>데이터 베이스 >MySQL 튜토리얼 >MySQL 공간 확장 및 위도/경도를 사용하여 원 내에서 점을 선택하는 방법은 무엇입니까?

MySQL 공간 확장 및 위도/경도를 사용하여 원 내에서 점을 선택하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-06 12:23:41403검색

How to Select Points Within a Circle Using MySQL Spatial Extensions and Latitude/Longitude?

MySQL 공간 확장: 위도/경도를 기준으로 원 내 지점 선택

배경:

MySQL은 공간 확장을 사용하여 지리공간 데이터를 저장할 수 있습니다. 이를 통해 점, 선, 다각형을 포함한 공간 객체를 효율적으로 쿼리하고 조작할 수 있습니다. 일반적인 작업 중 하나는 주어진 위치에서 지정된 반경 내의 지점을 선택하는 것입니다.

지리 공간 확장 사용:

이 작업을 수행하기 위해 MySQL은 버퍼를 포함한 여러 지리 공간 기능을 제공합니다. ()는 점이나 선 주위에 완충 구역을 생성합니다. 그러나 MySQL은 기본적으로 위도와 경도를 기반으로 한 근접성 계산을 지원하지 않는다는 점에 유의하는 것이 중요합니다.

대체 접근 방식:

다음을 기반으로 원 내 지점을 결정하려면 위도와 경도에 대해서는 다른 접근 방식이 필요합니다. Great Circle Distance 공식은 지구 표면의 두 지점 사이의 거리를 계산하는 데 사용할 수 있습니다. 이는 지정된 반경 내의 지점을 필터링하기 위해 MySQL 쿼리에 통합될 수 있습니다.

샘플 쿼리:

다음 쿼리는 Great Circle Distance 공식을 사용하여 다음을 수행하는 방법을 보여줍니다. 주어진 위도와 경도에서 반경 100미터 내의 플래그를 선택합니다.

SELECT id, coordinates, name, r,
        units * DEGREES(ACOS(LEAST(1.0, COS(RADIANS(latpoint))
                  * COS(RADIANS(latitude))
                  * COS(RADIANS(longpoint) - RADIANS(longitude))
                  + SIN(RADIANS(latpoint))
                  * SIN(RADIANS(latitude))))) AS distance
   FROM flags
   JOIN (
        SELECT 42.81  AS latpoint,  -70.81 AS longpoint, 
               10.0 AS r, 69.0 AS units
        ) AS p ON (1=1)
  WHERE MbrContains(GeomFromText (
        CONCAT('LINESTRING(',
              latpoint-(r/units),' ',
              longpoint-(r /(units* COS(RADIANS(latpoint)))),
              ',', 
              latpoint+(r/units) ,' ',
              longpoint+(r /(units * COS(RADIANS(latpoint)))),
              ')')),  coordinates)

이 쿼리에서 latpoint 및 longpoint 매개변수는 사용자의 위치를 ​​나타냅니다. r 및 단위 매개변수는 반경(미터)과 위도당 거리 단위를 지정합니다.

추가 고려 사항:

  • 위 쿼리는 거리를 계산합니다. 위도와 경도에 대한 데카르트 거리보다 더 정확한 대권 거리 공식을 사용합니다.
  • 결과를 원 내의 점에 추가하려면 WHERE 절을 추가하여 반경보다 작거나 같은 거리를 필터링하세요.
  • 가장 가까운 플래그를 먼저 표시하려면 거리별로 결과를 정렬하세요.
  • 공간 인덱싱 좌표 열은 쿼리 성능을 크게 향상시킬 수 있습니다.

이 접근 방식을 따르면 위도와 위치를 기준으로 원 내 지점을 효과적으로 선택할 수 있습니다. MySQL 공간 확장을 사용하여 위치 기반 애플리케이션을 생성할 수 있습니다.

위 내용은 MySQL 공간 확장 및 위도/경도를 사용하여 원 내에서 점을 선택하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.