MapView 를 이용해서 간단한 기능을 하는 어플을 개발중인데요...
왜 이놈은 안드로이드에 기본으로 있는 지도 어플보다 검색기능이 떨어지는건가요?
실 단말기(넥서스원)에 제 어플을 올려놓고, 두 지도의 검색 결과를 보면.. 아주 참담합니다.
기본 지도 어플은 MapView 를 이용한 방식이 아닌가요?
브라우저로 구글 지도 검색을 띄워놓고 테스트를 해본결과,
단말기의 기본지도 프로그램과 동일한 검색능력을 보여주는것 같은데, 제가 만든 지도는 완전 허접한 검색결과가 나옵니다.
왜 이런건가요?
자료를 검색 해봐도 명확한 답이 없어서 갑갑하네요.. ㅡㅡ;
제발, 한줄기 빛이 될 수 있는 조언 부탁드립니다.
그럼, 고운하루 되세요 ^^
1. MapView 를 이용한다.
2. 검색은 http 통신으로 처리한다.(결과포멧 : json or kml - XML 베이스)
3. MapView 에 올릴 오버레이를 2번 결과 에서 얻어서 만든다.
2번에대한 자료는
http 통신방법 및 결과처리 -
민생고 프로그램을 소스 다운받아서 분석할것(안드로펍에서 검색하면 됨).
구글맵 http get 방식 쿼리 파라미터 : http://mapki.com/wiki/Google_Map_Parameters
json - http://www.json.org/json-ko.html, SimpleJSON 검색
3번에 대한 자료는 MapView 의 오버레이 컨트롤 등등으로 검색하면 다 나옴 ^^;;
같은 고민을 하던차에 이 글을 보고 댓글 남깁니다.
2번에 대한 질문인데요,
결과포맷을 json 으로 받는 쿼리 파라미터가 있나요?
output 포맷중에는 길찾기 관련인 dragdir 밖에 없어서요..
질문의 요는 '서울대' 를 찾는다면 서울대학교, 서울대역 등등 이 나오는 json 파일이나 xml 파일을 받는 파라미터를 알고싶습니다!
맵키에 나와있는것에서는 output=mobile 하면 패킷량을 줄일수있긴한데.. json 파일이면 훨씬 깔끔하지 않습니까 ㅎㅎ
고견부탁드립니다 꾸벅
Geocoder coder = new Geocoder(context);
List<Address> address = coder.getFromLocation(loc.getLatitude(), loc.getLongitude(), 1);
qparams.add(new BasicNameValuePair("q", sQuery)); //검색어
qparams.add(new BasicNameValuePair("near", address.get(0).getAddressLine(0)));
qparams.add(new BasicNameValuePair("output", "js")); //결과포멧 - json
//qparams.add(new BasicNameValuePair("output", "kml")); //결과포멧 - xml
//qparams.add(new BasicNameValuePair("output", "")); //결과포멧 - 일반웹페이지(html)
qparams.add(new BasicNameValuePair("mrt", "")); //검색옵션 - 기본(전체)
//qparams.add(new BasicNameValuePair("mrt", "yp")); //검색옵션 - 업체
qparams.add(new BasicNameValuePair("hl", "ko")); //언어
qparams.add(new BasicNameValuePair("radius", "1.242742")); // 검색반경 2km, miles = kilometers / 1.60934
qparams.add(new BasicNameValuePair("num", "30")); //검색갯수
제가 사용하고 있는 파라미터 입니다. 대충보시면 감이 오실겁니다.
질문하신 JSON 요청 파라미터는
qparams.add(new BasicNameValuePair("output", "js"));
이부분 입니다.
다른 파라미터들도 있는데 제가 필요한것만 사용하고 있습니다.
질문에 답변이 되었는지 모르겠네요.
그럼, 수고하세요 ^^
자답입니다.
아래와 같이 Geocoder API 로 처리할때 검색내용의 부족등은 구글 정책으로 검색을 제한해서 그런것 같군요.. 확실하지는 않습니다
developer.google.com 에서 getFromLocationName 의 내용을 보아도 웹의 구글맵 API 쿼리와는 상당한 차이를 보일수 밖에 없습니다.
Geocoder coder = new Geocoder(getApplicationContext());
List<Address> geocodeResults = coder.getFromLocationName(placeName, 3);
결국, 제가 잡은 방향은 단말기에서 http 통신으로 http://maps.google.co.kr 에 검색 요청쿼리를 날려서
json, xml 을 스크랩핑 해오는 방법입니다.
웹을 해보신 분들은 쉽게 감이 오실겁니다. 특히, 리모트 서버들과 http 통신으로 결과값을 주고 받는걸 해보신 분들은..
텍스트스크랩핑, SOAP, XML RPC 등등 과 같은 맥락입니다.
최종적으로, MapView 를 이용하되, 검색관련된 부분은
Geocoder coder = new Geocoder(getApplicationContext());
List<Address> geocodeResults = coder.getFromLocationName(placeName, 3);
이걸 사용하지 않고
http통신 으로 쿼리를 하고 응답온 json, xml 을 파싱해하고, 그 데이터들을 오버레이로 만들어서 맵에 그려주는 겁니다.
통신, 즉 네트워크는 상황에 따라서 일정한 속도를 유지 못하거나, 끊어질 염려가 있기 때문에 스레드를 이용해야 할것입니다
XML 파싱하는 부분도 데이터량에 따라 처리시간이 길어 질수 있기 때문에 스레드를 이용해야 할것입니다.
게시판에 MapView 관련해서 안드로이드 기본지도 와 검색내용이 차이가 나서 개발방향을 잘 못찾거나 검색 자체를 어려워
하시는 분들이 많이 보입니다. 제 생각이 정답인지는 모르겠지만 해결할 수 있는 한가지 방법은 맞는것 같습니다.
구글에서 검색하실때 "MapView http", "MapView http://maps.google.co.kr" "MapView httpclient" 등등 으로 검색하시면 원하시는 자료를
많이(?) 얻을수 있으실 겁니다.