2013-04-08 3 views
1

특정 지역 내의 점 목록을 반환해야하는 API 호출을 만들고 있습니다.특정 지역에 해당하는 좌표 가져 오기

지도에서 사용되므로 API 호출에 네 모퉁이의 좌표가 있습니다.
영역은 항상 사각형이며 회전되지 않습니다.

순간

, 나는 결과를 제한하기위한 다음과 같은 알고리즘을 사용하고 있습니다 :

$lat_limits = array(min($bottom_left_lat, $top_left_lat), max($bottom_left_lat, $top_left_lat)); 
$lon_limits = array(min($top_left_lon, $top_right_lon), max($top_left_lon, $top_right_lon)); 

내 질문

은 다음과 같습니다

  1. 이 검색의 최적의 방법이 있나요?
  2. 이 용도에 더 적합한 PHP 라이브러리/도우미 함수가 있습니까?

고마워요!

+2

WHAT 위도는 $ lat_min과 $ lat_max 그리고 lng는 $ lng_min과 $ lng_max'이며 위도와 열에는 색인을 넣습니다. 'left_lng> right_lng' 윈도우가 날짜 라인을 넘어 서면 +/- 180도에서 2 개의 상자로 분할해야한다는 것을 명심하십시오. – Sammitch

+0

빠른 답장을 보내 주셔서 감사합니다. 그것은 내가 사용하는 것과 같은 쿼리입니다. 그러나, 나는'left_lng> right_lng' 사건에 대한 당신의 코멘트의 두 번째 부분을 이해하지 못했습니다. 좀 더 설명해 주시겠습니까? –

+2

경도는 일반적으로 경도가 180도에서 -180 도로 바뀌는 국제 날짜 표시 줄을 건너는 것을 제외하고는 서쪽에서 동쪽으로 증가합니다. 이 줄을 걸은 상자에서 동일한 쿼리를 사용하면 상자 밖의 모든 경도에 대한 결과를 얻을 수 있습니다. 조건을 감지하고 쿼리 조건을 $ lng_left ~ 180 및 -180 ~ $ lng_right의 두 상자로 분할해야합니다. – Sammitch

답변

1
간단히

:

WHERE lat BETWEEN $lat_min AND $lat_max AND lng BETWEEN $lng_min AND $lng_max 

을하고 더 나은 쿼리를 최적화하기 위해 위도와 LNG 컬럼에 인덱스를 넣습니다.

left_lng> right_lng이면 창이 날짜 라인에 걸쳐 있고 두 개의 상자를 +/- 180 도로 분할해야한다는 점을 명심하십시오.

경도는 일반적으로 경도가 180도에서 -180 도로 바뀌는 국제 날짜 행을 제외하고 서쪽에서 동쪽으로 증가합니다. 이 줄에 걸쳐있는 상자에서 동일한 쿼리를 사용하면 상자 밖의 모든 경도에 대한 결과가 표시됩니다. 조건을 감지하고 쿼리 조건을 lng_left에서 180, lng_right에서 -180까지의 두 상자로 분할해야합니다.

+0

창이 북극 또는 남극을 덮는 특수한 경우는 어떻게됩니까? – dashmug