안드로이드 2011/11/29 11:37

안드로이드에서 Google Mapki 사용하기 (지도 검색)

다음 지도에서 이름을 검색하면 나오는 목록들 처럼
안드로이드 구글맵과 구글 맵키를 사용해서 결과를 얻고 위치를 표시하고자 작업하던 걸 정리해본다.
안드로이드의 기본 API 에 GeoCoder 를 이용하면 기본적인 주소 검색을 할 수는 있지만, 업체나 주요 시설물 정보는 얻을 수 없다. 상식적으로 그런 방대한 정보를 API로 담기는 어려운 일이기도 하다.


구글맵 주소(maps.google.co.kr)에 쿼리를 보내면 필요한 데이터를 얻을 수 있다.(구글은 모든 정보를 갖으려고 하는 듯, 역시 정보망은 최고다.)


웹 서비스 주소 : maps.google.co.kr
쿼리 파라메터 정보 :  http://mapki.com/wiki/Google_Map_Parameters


일단 자주 쓰는 파라메터 정보를 간추려본다.
q : 검색어를 지정한다(필수)
near : 특정 주소의 근처를 검색하려면 지정한다.(보통 Address address.getAddressLine(0)로 입력함)
output : 결과를 어떤 형식으로 받을지 결정한다(
json, html, kml 등등)
mrt : 결과 범위 결정(all:전부 검색, yp: 비지니스 영역 검색, websearch:웹 검색 등등)
hl : 언어
radius : 검색반경 설정(near 가 없으면 소용없는 듯)
num : 결과 갯수

**  공식 문서에는 JSON 형식으로 output 하려면 js 라고 되어 있지만, 실제로 해보니 json 으로 기입해야 된다.


테스트 쿼리를 날려보자.
http://maps.google.co.kr/?q=전라도+광주&output=json&mrt=yp&num=6

조금 다른 쿼리도.
http://maps.google.co.kr/?q=전라도+광주&near=대한민국+서울특별시+금천구+가산동+616-11&output=json&mrt=yp&radius=500&num=6

output 만 html로 하면  변경해서 테스트도 해보자.


안드로이드에서 사용하기에는 JSON 포맷이 편하다.
위 테스트 주소를 통해 나오는 무수한 글씨들은 바로 사용할 수 있는 JSON은 아니다.
앞부분을 보면 while(1); 이란 글씨는 불필요하다. 그리고 무수한 글씨들은 웹으로 표시되는 모든 정보를 포함하고 있기 때문에
필요이상 데이터가 많다.
데이터 구조를 파악하기 위해 
while(1); 이란 글씨를 제거하고 복사한 다음에 JSON 파싱 사이트에 가서 테스트를 해보자.
JSON 파싱 테스트 주소:  
http://braincast.nl/samples/jsoneditor/

★ 그러면 이런 식의 구조를 볼 수 있다. 
여기서 필요한 내용은 overlays.markers 이다(지도에 표시되는 마커의 정보임)
값이 없을 경우 이 값 또한 없다.


overlays.markers 는 배열 형식이며, marker 안에도 엄청난 데이터들이 있다.
이중에 laddr(주소)와 latlng(위치정보)를 사용했다.

★ 대~충 구조를 알았으니 코딩을 해보자.

- HttpClient 를 사용해 요청하고 파싱하는 부분만 요약한 내용 (HttpClientUtil.Java) -


- 윗 부분 내용을 요청해서 다이어로그를 보여주는 부분 -


** 드디어 예제 프로젝트를 만들어서 올립니다~ sdk 2.2 입니다.

... 끝
.. 귀찮아.
저작자 표시 비영리 동일 조건 변경 허락
  • Favicon of http://yeojoy.tistory.com BlogIcon 강렬눈썹 2011/08/29 23:32

    아... 제가 찾던 정보입니다! 그리고 json tree builder도 감사합니다!
    덕분에 큰 도움을 얻었습니다!

    • Favicon of http://blog.hansune.com BlogIcon hansune 2011/08/30 23:47

      역시 요즘은 안드로이드를 찾는 사람들이 많군요~ 감사해요.

    • 구루미군 2011/11/12 23:35

      혹시 죄송한데 이거 프로젝트 있으시면 좀 보내주심 안될까요?

  • 구루미군 2011/11/12 15:22

    블로거님 부탁드릴 말씀이 있는데
    이걸 사용법을 제가 좀 몰라 봐서 그런데 ㅠㅠㅠ 혹시 예제 소스 같은거 만들어 두신건 없나요 ㅠ
    지금 안드로이드에서 만들려고 하는데 검색어 값을 날려서 검색 값을 받아오는걸 지금 못하고 있네여 ㅠ

    • Favicon of http://blog.hansune.com BlogIcon hansune 2011/11/12 17:52

      제가 요즘 한가하지 않아서, 여유가 없습니다. 필요한 메소드는 위에 있는 게 거의 전부인데요.. 음 .. 라이브러리 설정은 잘해놓으셨는지요? 시간되면 프로젝트 올려볼께요.
      주위에 자바하시는 분께 물어보면 잘 알 것 같아요~

  • 구루미군 2011/11/12 23:32

    제가 이거에 대해서 아직 잘 몰라서 그런데
    프로젝트 만든다음에
    그냥 저 소스들 다 복사해서 붙여넣기 하고 디버그 하면 되는건가요 ?

    • Favicon of http://blog.hansune.com BlogIcon hansune 2011/11/13 16:31

      아마도..복사해서 붙여넣기만 하면 될꺼에요~

  • 구루미군 2011/11/12 23:33

    아 그리고 저거 안드로이드 구글 맵 에서 사용 가능한거 맞죠 ㅠ?

    • Favicon of http://blog.hansune.com BlogIcon hansune 2011/11/13 16:32

      네에~ 구글맵이든 다음 맵이든... 좌표표시계가 맞는 맵들은 다 응용할 수 있습니다.

  • 구루미군 2011/11/14 00:53

    이 클래스를 불러오는 함수는 어떻게 사용하죠 ?
    이걸 클래스로 만들면 맵뷰 선언하는것도 없는데 ㅠㅠ
    아ㅣ... 진짜 초보라 님한테 사서 고생만 시키네요 ㅠㅠ

    • Favicon of http://blog.hansune.com BlogIcon hansune 2011/11/15 13:43

      제가 틈틈히 프로젝트 구성하고 있는데요, 나중에 정리되면 올리도록 할께요.
      그전에 위 내용을 어느정도 이해하려면 기본적인 안드로이드 또는 자바 언어를 익히시는게 좋을 것 같아요. 시중에 책도 많이 나왔고, 인터넷 블로그도 많이 있으니 찾아보세요.
      여기 사이트도 참고해보세요. http://lomohome.com/316

  • 구루미군 2011/11/15 22:25

    쿼리 날리는건 알겠는데
    쿼리 날릴때 메소드 쓰는 방식을 잘 모르겠네요 ;;;
    그리고 서치문이랑도여 ㄱ-;;;

  • 구루미군 2011/12/07 20:29

    오 !! 감사합니다1!!! 늦게 봤네여 ㅠ

  • BlogIcon ㄹㄴㅇ 2012/04/04 02:53

    질문이요 프로젝트에 보면 Referenced Libraries해서 여러가지 jar파일이 들어가있는데 그게 꼭 필요한건가요?
    그리고 최대검색수는 10개밖에 안되네요 그이상을 검색하려면 어떻게해야하나요

    • Favicon of http://blog.hansune.com BlogIcon hansoodeak 2012/04/05 01:26

      ReferencedLibraries 에 있는 jar 파일이 전부 필요하지 않을 수 도 있어요. 제가 빼놓지 못했나봅니다. 다른 프로젝트에 붙어있던걸 떼오느라..
      10개 다음 갯수를 알려면 start 라는 파라메터를 붙여주면 되네요. start=10 이런식으로 하면 11번째 부터 값을 얻을 수 있어요.(0부터 시작하는 숫자임)

  • 리쿠스 2012/05/17 14:51

    안녕하세요 좋은글 감사합니다. 저도 아이폰에서 이 기능을 구현하는데요.. 검색결과를 리턴받은 후 string에서 while(1); 을 제거하고 json으로 변환했더니 제대로 된 json구문이 아니라면서 변환이 안되는데요.. 이건 왜그러시는지 아시나요?.. 그리고 위의 json build tree이외의 다른 json parsing 사이트에서는 while(1); 을 제거한 부분을 붙여봐도 invalid한 json이라고 알려주는데요.. 혹시 또 다른것을 제거해야하거나 손봐줘야할것이 있나요??..

    • Favicon of http://blog.hansune.com BlogIcon hansoodeak 2012/05/20 23:40

      안녕하세요. 브라우저에서 쿼리를 보냈을 때 응답은 잘 오나요? 응답으로 오는 데이터양이 필요이상 상당합니다. 그래서 완전한 데이터를 받지 못하고 파싱하려고 해서 그런것은 아닌지 확인도 해보세요.

  • 리쿠스 2012/05/23 10:59

    네 브라우져로 쿼리 보냈을때 잘옵니다
    그럼 필요한데이터만 받을수있다는 이야기신지요? 파싱하기전 Json데이터를 필요한 내용만 받을수있으면 양이 줄어들것 같은데 가능할까요?

    • Favicon of http://blog.hansune.com BlogIcon hansoodeak 2012/05/23 20:06

      이상하네요. 저는 데이터 파싱에 문제가 없는 데 말이죠. 필요한 양만 받는 방법은 없는 것 같아요. 포스트 글과 같이 작업한 이유도 만족스런 검색방법이 없어서 그랬거든요. ^