안녕하세요
궁금한게 있어 질문 올립니다.
두 지점에 맵에 표시(마커)하고, 두 지점간 가는길(아래 화면)을 표시 할려고 합니다. ( 지하철 노선 필요없고, 보라색 부분)
두 지점에 대한 위도, 경도를 받아와 overlay 클래스를 상속받은 클래스의 draw함수에서 canvas.drawPath(path,paint)로 두지점을 그렸는데, 두 지점간 가는 길을 그리지 않고, 직선으로 그냥 그리네요
혹시 해결 방법 아시는분 계신가요?
쩔어님 답변 감사합니다.
헌데 좌표데이터(시작지점의 위도,경도 및 도착지점의 위도, 경도)는 이미 받아 왔습니다.
시작지점 위도,경도는 디비에서 받아 왔구요, 도착지점 위도,경도는 GPS를 통해 현재위치의 위도 경도를 받아 왔습니다.
안드로이드에서 GPS 관련 보시면 리스너에서 일정 간격으로 GPS 좌표를 체크하는 함수가 있습니다(onLocationChanged 함수네요)..거기에서 받아온 좌표를 일일이 기록하신뒤 시작좌표->GPS에서 일일이 기록한 좌표->종료좌표 이런식으로 선을 연결해야 하지 않을까 싶습니다..도착지점을 GPS로 받아오신다 하니 시작지점부터 이동하는 순간순간마다 GPS 값들을 계속 기록한뒤 각 지점별로 선을 그려주시면 될듯 싶습니다..
출발지점과 도착지점만으로 미리 경로를 검색해서 가져오는 거라면 인터넷에서 경로를 제공하는 싸이트(구글맵, Cloudmade, YOURS, 다음, 네이버 등)로부터 경로를 포함하는 XML 문서 등을 가져와서 파싱하여 맵 위에 경로를 그려주어야 합니다.
1. 구글맵으로부터 가져오는 방법은 다음 링크를 참고하세요.
(단, 국내는 kml 포멧으로는 안되고 json 포멧으로 하면 대중교통 경로는 가져올 수 있습니다)
http://blog.synyx.de/2010/06/routing-driving-directions-on-android-part-1-get-the-route/
2. YOURS, Clodemade 로부터 가져오는 방법은 오픈소스 안드로이드 네비게이션 앱인 OsmAnd 의 소스 중 RouteProvider.java 파일을 참고하세요.
http://code.google.com/p/osmand/
3. 다음 은 아래 링크와 개발정보 게시판의 좌표계 변환코드를 참고하세요.
http://dna.daum.net/griffin/do/griffin/do/DevQnA/read?articleId=942&bbsId=DevQnA
그런데, 다음 길찾기 주소가 언제부턴가 다음과 같이 변경되었네요.
http://map.daum.net/route/route.json?routeMode=SHORTEST_REALTIME&routeOption=NONE&sX=862540&sY=667938&eX=863549&eY=666837
4. 네이버 는 아래 for-happy-date 프로젝트의 FastRoadModules.java 파일을 참고하세요.
http://code.google.com/p/for-happy-date-for-android/
그리고, 네이버도 변경되었습니다.
http://map.naver.com/findroute2/findCarRoute.nhn?via=&call=route2&output=json&car=0&mileage=12.4&start=128.0%2C37.0%2C%20&destination=128.0%2C37.5%2C%20&search=2
저도 예전에 같은 주제로 고민했었는데 아래 글이 블랙홀3님께 참고가 될 것 같아서 링크 납깁니다.
google map navigation 질문이요 ! http://www.androidpub.com/1206563
매발톱님이 알려주신 1번 방법에 소개된 사이트를 참조하여 해결하였습니다. 댓글 달아 주신 분들 감사합니다.
1. http://maps.google.com/maps?f=d&hl=en..output=dragdir 을 호출
2. json데이터를 받고
3. polyline 디코딩하여 좌표값을 리스트에 담아
4. for문을 돌면서 좌표값에 따라 draw함수가 호출되도록 하였습니다.
블랙홀3님 감사합니다. 님의 말씀대로 했더니 됐습니다.
단, json 데이터가 제대로 안 받아집니다.
가끔 될 때도 있는데, 대부분 => {tooltipHtml:" (0.0 km / 0 secs)"} <= 이러한 json 데이터만 받아집니다. 원래 polyline 이후까지 나와야 하는데 말이죠.
그래서 이 코드 : encoded = encoded.split(
"points:"
")[1].split("
","
)[
0
]; 가 무용지물이 되고,
polyline이 잘못된 값으로 저장됩니다.
그래서 디코딩도 안 되고, 결국 좌표값도 제대로 안 나옵니다.
혹시 이 문제에 대한 해결법을 아십니까?
위에 사진처럼 그리실려면 그 해당 경로에 위치한 길에대한 좌표데이터가 필요할꺼 같은데요
길에대한 좌표데이터가 없이 구현을했을경우는 아래사진이 최선같습니다.