안드로이드 개발 질문/답변
(글 수 45,052)
다음 그림은 서울버스(아이폰)입니다.
내위치 기준으로 주변 정류장을 보여주는 화면입니다.
그림과 같이 현재 내 위치를 기준으로 반경(예를 들어 500m,1km)또는
내가 보고 있는 지도안에 커피숍, 편의점등을 표시하고 싶습니다.
1. 이기능을 구현할려면 커피숍,편의점 geopoint를 DB에 갖고 있어야 하나요??
아니면 구글지도에서 검색하는건가요??
2. 만약 서울시내의 모든 커피숍,편의점의 geopoint를 DB에서 저장되있다고 가정할때
내 위치를 기준으로한 반경(예를 들어 500m,1km)또는 내가보고있는 지도안에 있는
커피숍,편의점의 geopoint만 어떻게 뽑아낼수 있는지 궁금합니다.
어떻게 goepoint값의 범위를 설정하고 geopoint를 가져와야 하나요??
3. 결론적으로 일반적인 위치정보 서비스 어플에서 '주변검색' 기능으로 내위치 중심으로 현재 지도위에 음식점,정류소등을
표시해주는데 어떻게 구현되는지 힌트라도 주시면 감사하겠습니다.
많은 위치정보 서비스 어플들이 위의 기능(일반적으로 '주변검색' 기능)을 가지고 있는데 관련 내용을 검색해봐도 내용이 나오질 않네요.
많은 고수님들의 조언 부탁드립니다.
2010.08.09 15:57:48
일단 DB로 모든 POI (Point Of Interest, 관심 위치)를 가지고 있다고 가정하에,
geopoint (경도, 위도)를 거리로 변환할 수 있는 계산법이 있습니다. (구글링 하세요)
그러면 500m, 1km 내에 POI를 검색하신다면 꼭 현재 위치를 중점으로 그 거리만큼의 원 안에 들어오는 POI를 찾는 것보단,
거리 만큼의 경도 차이값 내에 위치한 POI를 검색하는 것이 좋겠습니다.
예를 들어, 내 위치가 130.00000, 37.000000 이라고 하고,
1km의 거리가 경도로는 1도이고 위도로는 0.5도라 한다면 (가정입니다!!!)
경도가 129.000000 ~ 131.000000 이 사이 값이고
위도가 36.500000 ~ 37.500000 사이 값을 가진 POI를 검색하면 되겠지요.
일단 위 방법은 모든 POI 정보를 DB 로 가지고 있다는 것을 가정한 것이구요, 이건 솔직히 거의 불가능할테지요.
정확이 어떤 작업을 하시려는지 알면 더 쉽게 도와 드릴 수 있을 것 같습니다.
2010.08.09 16:58:06
근데 위도와 경도 중에서 위도는 일정한 거리 유지가 가능한데 경도는 그렇지 않다고 하던데요...
그래서 며칠전에 저도 막 검색을 하다가 위도 0.000750가 100미터라는 결과를 검색했는데여
경도는 오차가 생긴다는거죠
차라리 DB가 있으면 geopoint를 location으로 바꾸면 되는게 고작
전 아예 geopoint도 아닌 lat와 lng가 있다고 가정하에 만들어서
lat = 0.000111
lng = 0.000222
이렇게 값을 주고요
location.setLatitude(lat);
location.setLongitude(lng);
이렇게 해서 location을 생성하였습니다
그렇게 해서 distanceTo() 사용하면 바로 값 나오는데...
그래서 며칠전에 저도 막 검색을 하다가 위도 0.000750가 100미터라는 결과를 검색했는데여
경도는 오차가 생긴다는거죠
차라리 DB가 있으면 geopoint를 location으로 바꾸면 되는게 고작
전 아예 geopoint도 아닌 lat와 lng가 있다고 가정하에 만들어서
lat = 0.000111
lng = 0.000222
이렇게 값을 주고요
location.setLatitude(lat);
location.setLongitude(lng);
이렇게 해서 location을 생성하였습니다
그렇게 해서 distanceTo() 사용하면 바로 값 나오는데...




일단 저 반경이라는 부분의 계산은
내위치.distanceTo(목표지점)
이러한 기능이 있는데요 내위치와 목표지점은 Location 이어야 합니다
그런데 목표지점이 따로 없는 상태로 반경을 구하시는 거자나여
그러면 저걸 이용하시는게 아니라 반대로 생각해서
목표지점에 대한 좌표값을 아시면 그걸 location으로 변환하시고
location 을 안다면 그걸 그대로 이용해서 나오는 distanceTo를 가지고 나오는 거리를
님이 원하는 반경이 500 이면 500보다 작은지 그걸 확인하시고 그럴 경우에만 표시를 하신다면
충분히 반경 500m내에 있는 물체는 표시가 가능할거예요 ㅎㅎ
그리고 그걸 DB로 가지고 있어야 할지는 저도 잘 몰겠는데여
구글맵에서 주소를 검색하면 좌표로 표시해주자나여
그걸 이용한다면 파싱을 이용해서 값을 전달 받아서 구현할수 있을거라 생각이 드네여
저도 현재 제가 만드는 부분에 대한 DB 정보를 가지고 있지 않아 테스트를 못해봤어요
구글맵을 이용한다는것은 인터넷을 이용하는 것이기에 굳이 그 많은 DB를 생성할 필요없이
인터넷을 통해 가져오는게 낫다고 생각이 드네여
그리고 검색을 하실땐 구글로 영어 검색하세여 훨씬 많이 나오는듯 ;;;;;