2014-01-30 6 views
2

위치 추적 응용 프로그램을 개발 중이며 현재 위치에서 반경 1000m 이내에있는 모든 친구의 위치를 ​​파악하려고합니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?X 점에서 위도와 경도를 찾는 방법은 무엇입니까?

내가 생각할 수있는 한 가지 방법은 내 위치와 모든 친구의 위치 간의 거리를 계산하고 그것이 1000mtr 미만인지 확인하는 것입니다. 그러나 이것은 DB의 각 엔트리를 거치고 각 엔트리를 계산하는데 더 많은 시간을 필요로 할 것이며, 대부분은 아주 멀리 떨어져있을 것입니다.

나는 다른 것을 생각하고있었습니다. 나는 원형 지역 내에 위치를 원한다. 원을 둘러싸는 정사각형의 좌표를 얻을 수있는 경우 해당 정사각형의 좌표 (각도와 경도 집합 사이)에 대한 결과 집합을 필터링 한 다음 각 항목까지의 거리를 계산할 수 있습니다. 어떻게해야합니까? 어떻게 위도와 경도를 극대화 할 수 있습니까? 또한 내 SQL 쿼리는 분 < (each.location.degree) < 최대처럼

이 더 좋은 대안이 있다면 알려주세요있을 것입니다. 나는 극도의 정확성과 성능에 대해 걱정하지 않는다. WP8을 사용하고 있으므로 좌표는 다음 형식으로되어 있습니다. Lat : 47.626, Long : -121.989.

답변

2

예, 사각형으로 시작하는 것이 좋습니다. 주위 최소/최대 위도와 경도를 다음과 같이 좌표 mylat (km)에 거리 DIST와 mylon 계산할 수있다 :

:

set lon1 = mylon-dist/abs(cos(radians(mylat)) * 111); 
set lon2 = mylon+dist/abs(cos(radians(mylat)) * 111); 
set lat1 = mylat-(dist/111); 
set lat2 = mylat+(dist/111); 

그 사각형 내의 모든 점의 정확한 거리를 계산할 수있다

6367 * 2 * ASIN(SQRT(POWER(SIN((origin.latitude -destination.latitude) * pi()/180/2), 2) + COS(origin.latitude * pi()/180) * COS(destination.latitude * pi()/180) * POWER(SIN((origin.longitude -destination.longitude) * pi()/180/2), 2))) as distance 
+1

당신은 내가이 공식 뒤에 논리를 이해할 수있는 자원을 공유 할 수 있습니까? –

+1

http://www.plumislandmedia.net/mysql/haversine-mysql-nearest-loc/ MySQL 논리를 매우 간단하게 설명합니다. 공식은 http://en.wikipedia.org/wiki/Haversine_formula –

+0

으로 이동하십시오. 머리가 위로 향하는 경우, 여러 언어의 경우, dist가 111보다 작고 int 인 경우 대신 dist를 111.0으로 나누거나 당신의 dist가 float으로 출력이 float인지 확인하십시오. 그렇지 않으면 dist/111이 0 (int)으로 나올 수 있습니다. – lmc

0

실제로 게시물에 몇 가지 질문이 제기됩니다.

  1. 두 GPS 위치 간의 거리를 계산하는 방법.
  2. 선택이 2 차원 데이터 (예 : 위치)를 기반으로하는 경우 데이터베이스에서 데이터 선택을 효율적으로 검색하는 방법. 공간 데이터베이스 :

는 좋은 해결책은 아마 같은 시간에 두 문제를 해결합니다. 2 차원 위치를 지원하는 데이터베이스 (지리적 데이터라고도 함)가있는 경우 해당 데이터베이스는 두 위치 간의 거리를 쿼리 할 수있게하며이를 기반으로 선택을 제공합니다. 필자는 ORACLE 공간 데이터로 작업했지만 요즘에는 대부분의 데이터베이스 시스템에서 공간 데이터를 지원해야합니다.

대체 (덜 정밀) 접근에 대한 몇 가지 힌트 : LAT/LON 형식의 GPS 위치는 다루기가 어렵습니다. 세계 반대편의 다른 위치와의 거리를 결정하고 싶지 않지만 반경이 작은 경우 위치를 간단한 2 차원 형식으로 바꿀 수 있습니다 (큐 map projection). 그런 다음 데이터베이스는 해당 X/Y 좌표를 저장할 수 있으며 힌트처럼 "위치 x/y 주위의 사각형에서 모든 위치 가져 오기"와 같은 간단한 쿼리를 수행 할 수 있습니다.

도움이 되었기를 바랍니다.

0

이미 추측 하듯이 더 복잡한 반경 탐색보다 위치 주변의 모든 사각형을 계산하고 그 안에있는 모든 객체를 탐지하는 데 더 많은 성능을 얻을 수 있습니다.

단락에서 찾아 보게한다 "대상 포인트 주어진 거리를하고 시작 지점에서 베어링"이 페이지의 : http://www.movable-type.co.uk/scripts/latlong.html

관련 문제