성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Get Started with Milvus Vector DB i...
[정성태] cyberark/PipeViewer - A tool that...
[정성태] WinForms in a 64-Bit world – our st...
[정성태] 예제에서 SELECT_SQL도 내부적으로는 SqlCommand/...
[victor] SELECT_LINQ SELECT_SQL 같은 쿼리인...
[victor] 답변 갑사합니다. 예외(Exception)가 났습니다. ...
[정성태] 일단, 위의 방식대로 하면 예외(Exception) 없이 잘 동...
[정성태] Windows 10 (버전 1809)에 이런 기능이 ^^ 추가되...
[정성태] pde windbg extension ; https://lea...
[정성태] // GetEnumerator extensions for Ran...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>C# - 버스 노선 및 위치 정보 조회 API 사용을 위한 기초 라이브러리</h1> <p> 자, 지난 글도 썼으니,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 공공 데이터 포털에서 버스 노선 및 위치 정보 조회 API 사용법 ; <a target='tab' href='https://www.sysnet.pe.kr/2/0/12779'>https://www.sysnet.pe.kr/2/0/12779</a> </pre> <br /> 간단한 코딩도 좀 해야겠지요. ^^<br /> <br /> 물론, 바닥부터 라이브러리를 만들어도 되겠지만, 어느 친절하신 분이 이미 위의 내용 정도에 해당하는 것을 Nuget 패키지로 올렸으니,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > KoreaBusInfo ; <a target='tab' href='https://www.nuget.org/packages/KoreaBusInfo/'>https://www.nuget.org/packages/KoreaBusInfo/</a> </pre> <br /> 간단하게 다음과 같이 패키지 참조하고,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Install-Package KoreaBusInfo </pre> <br /> 이렇게 사용할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > using System; using System.Collections.Generic; using System.IO; using KoreaBusInfo.Seoul; namespace ConsoleApp1 { // Install-Package KoreaBusInfo class Program { // 서울 103번 버스에 대한 정류장 및 운행 정보 조회 static void Main(string[] args) { <span style='color: blue; font-weight: bold'>string busNumber = "103";</span> string key = "...[인증키(Encoding)]..."; BusInfo sbi = new BusInfo(key); <span style='color: blue; font-weight: bold'>BusRoute busRoute = sbi.GetBusRoute(busNumber);</span> Console.WriteLine($"Bus: {busNumber}, RouteID == {busRoute.busRouteId}"); <span style='color: blue; font-weight: bold'>List<BusStation> stations = sbi.GetBusStations(busRoute);</span> Console.WriteLine($"정류장(총: {stations.Count}개):"); foreach (BusStation station in stations) { Console.WriteLine($"\t{station.stationNm}({station.station})"); } <span style='color: blue; font-weight: bold'>List<BusPosition> positions = sbi.GetBusPositions(busRoute, stations);</span> Console.WriteLine($"운행 중인 버스(총: {positions.Count}개):"); foreach (BusPosition position in positions) { BusStation lastStation = stations.Find((elem) => elem.station == position.lastStnId); Console.WriteLine($"\t'lastStation: {lastStation.stationNm}', 현재 위치 ({position.posX}, {position.posY})"); } } } } /* 출력 결과 Bus: 103, RouteID == 100100008 정류장(총: 71개): 삼화상운(110000391) 월계2교.참누리아파트(107000095) 광운초교앞(107000097) 장위래미안아파트(107000522) 꿈의숲아이파크아파트(107000130) 장곡초교사거리(107000132) 장곡초교(107000197) 국민은행장위동지점(107000186) 장위1동치안센터(107000184) 장위1동주민센터(107000182) 장위동고개(107000180) 장위동입구(107000516) 창문여고앞(108000101) 숭곡초등학교입구(108000102) 월곡뉴타운(107000001) 길음뉴타운(107000003) 미아리고개.미아리예술극장(107000005) 돈암사거리.성신여대입구(107000007) 삼선동주민센터(107000085) 성북구청.성북경찰서(107000087) 보문역(107000089) 보문동성당(107000091) 보문동주민센터(107000093) 신설동로터리(100000147) 동묘앞(100000367) 동대문(흥인지문)(100000365) 종로6가.동대문종합시장(100000397) 종로5가.광장시장(100000395) 종로4가.종묘(100000393) 종로3가.탑골공원(100000391) 종로2가(100000389) 종로1가(100000387) 광화문(100000385) 서울역사박물관.경희궁앞(100000379) 경찰청.동북아역사재단(112000399) 서울역버스환승센터(101000006) 숭례문(101000027) 남대문시장앞.이회영활동터(101000114) 롯데영프라자(101000043) 우리은행종로지점(101000040) 종로2가(100000388) 종로3가.탑골공원(100000390) 종로4가.종묘(100000392) 종로5가.광장시장(100000394) 종로6가.동대문종합시장(100000396) 동대문역.흥인지문(100000398) 동묘앞(100000366) 신설동역1번출구(105000552) 보문동주민센터(107000094) 보문동성당(107000092) 보문역(107000090) 성북구청.성북경찰서(107000088) 삼선동주민센터(107000086) 돈암사거리.성신여대입구(107000008) 미아리고개.미아리예술극장(107000006) 길음뉴타운(107000004) 월곡뉴타운(107000002) 숭곡초교입구(107000011) 창문여고(107000012) 장위동고개(107000179) 장위1동주민센터(107000181) 장위1동치안센터(107000183) 국민은행장위동지점(107000185) 장곡초교(107000198) 장곡초교사거리(107000131) 꿈의숲아이파크아파트(107000129) 장위래미안아파트(107000521) 광운초교(107000098) 월계2교(107000096) 월계주공1단지아파트앞(110000656) 삼화상운(110000391) 운행 중인 버스(총: 21개): 'lastStation: 꿈의숲아이파크아파트', 현재 위치 (204525.3, 457636.47) 'lastStation: 월곡뉴타운', 현재 위치 (202233.31, 456096.72) 'lastStation: 보문역', 현재 위치 (201670.97, 454037.62) 'lastStation: 동대문(흥인지문)', 현재 위치 (201064.02, 452495.2) 'lastStation: 종로4가.종묘', 현재 위치 (199348.3, 452335.88) 'lastStation: 서울역사박물관.경희궁앞', 현재 위치 (197193.97, 451992.4) 'lastStation: 서울역버스환승센터', 현재 위치 (197606.02, 450669.7) 'lastStation: 우리은행종로지점', 현재 위치 (198492.05, 452003.2) 'lastStation: 종로5가.광장시장', 현재 위치 (200127.38, 452374.38) 'lastStation: 보문동주민센터', 현재 위치 (201915.1, 453511.66) 'lastStation: 돈암사거리.성신여대입구', 현재 위치 (201746.34, 455056.88) 'lastStation: 창문여고', 현재 위치 (203532.77, 457174.44) 'lastStation: 장위래미안아파트', 현재 위치 (204694.03, 457735.78) 'lastStation: 삼화상운', 현재 위치 (204438.42, 458648.3) 'lastStation: 삼화상운', 현재 위치 (204439.84, 458646.53) 'lastStation: 삼화상운', 현재 위치 (204450, 458634.22) 'lastStation: 삼화상운', 현재 위치 (204444.7, 458640.66) 'lastStation: 삼화상운', 현재 위치 (204450.53, 458633.66) 'lastStation: 삼화상운', 현재 위치 (204447.97, 458636.78) 'lastStation: 삼화상운', 현재 위치 (204450.17, 458634.12) 'lastStation: 삼화상운', 현재 위치 (204448.67, 458635.88) */ </pre> <br /> 오~~~ 멋집니다. ^^ 제가 워낙에 strong typing을 좋아하다 보니, 위의 API에서 사용하는 클래스들을 모두 만들어 두었고,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > using System.Xml.Serialization; namespace KoreaBusInfo.Seoul { //...[생략]... public class BusStation { public string arsId; public string beginTm; public string busRouteId; public string busRouteNm; public string direction; public float gpsX; public float gpsY; public string lastTm; public float posX; public float posY; public int routeType; public int sectSpd; public string section; public int seq; public string station; public string stationNm; public string stationNo; public string transYn; public string fullSectDist; public string trnstnid; } public class BusRoute { public string busRouteId; public string busRouteNm; public string corpNm; public string edStationNm; public string firstBusTm; public string firstLowTm; public string lastBusTm; public string lastBusYn; public string lastLowTm; public decimal length; public int routeType; public string stStationNm; public int term; } public class BusPosition { public int busType; public int congetion; public string dataTm; public int isFullFlag; public string lastStnId; public string plainNo; public float posX; public float posY; public string routeId; public string sectDist; public int sectOrd; public string sectionId; public string stopFlag; public float tmX; public float tmY; public string vehId; } } </pre> <br /> 여러분은 인텔리센스의 도움을 받으며 편하게 코딩을 하시면 됩니다. ^^<br /> <br /> 이 글의 소스 코드는 다음의 github에 올려졌으니 참고하시고,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > stjeong/KoreaBusInfo ; <a target='tab' href='https://github.com/stjeong/KoreaBusInfo'>https://github.com/stjeong/KoreaBusInfo</a> </pre> <br /> 혹시, 위의 라이브러리에 구현되지 않은 API가 필요하다면 이슈에 올리거나, 아니면 직접 구현하셔서 PR을 주시면 기꺼이 반영을 하겠습니다. ^^<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1901
(왼쪽의 숫자를 입력해야 합니다.)