>데이터 베이스 >MySQL 튜토리얼 >MySQL 공간 확장을 사용하여 원 내의 점을 어떻게 효율적으로 찾을 수 있습니까?

MySQL 공간 확장을 사용하여 원 내의 점을 어떻게 효율적으로 찾을 수 있습니까?

DDD
DDD원래의
2025-01-06 12:11:40891검색

How Can I Efficiently Find Points Within a Circle Using MySQL Spatial Extensions?

MySQL 공간 확장을 사용하여 원 내 지점 찾기

위도와 경도를 통해 사용자 위치가 결정되는 시나리오에서 일반적인 작업은 다음과 같습니다. 특정 반경 내 근처의 깃발을 검색합니다. MySQL의 공간 확장을 사용하면 지리공간 데이터에 대한 근접 쿼리를 수행할 수 있습니다.

원 쿼리를 위한 공간 함수

처음에는 MySQL에 위도/경도 거리 계산을 위한 공간 함수가 부족했습니다. , MySQL 5.7 릴리스에서는 이러한 계산에 대한 지리 공간적 지원이 도입되었습니다. 원형 근접 쿼리의 경우 ST_Distance_Sphere 함수를 사용할 수 있습니다.

SELECT * FROM flags
WHERE ST_Distance_Sphere(coordinates, ST_GeomFromText('POINT(latpoint longpoint)')) < 100;

이 쿼리에서 좌표는 지리공간 지점을 포함하는 열을 나타내고, latpoint 및 longpoint는 사용자 위치의 위도 및 경도 값입니다. 원의 반경은 미터 단위로 지정됩니다.

대체 접근 방식

MySQL 5.7 이전에는 사용자가 대체 접근 방식을 사용할 수 있었습니다.

  • Haversine Formula: 이 공식은 두 점 사이의 대원 거리를 계산합니다. 구체에. ACOS 및 SIN과 같은 SQL 함수를 사용하여 구현할 수 있습니다.
  • Bounding Rectangle: 사용자의 원을 둘러싸는 경계 사각형을 생성하면 MBRContains 함수를 사용하여 사각형 내의 지점을 식별할 수 있습니다. 이 접근 방식에는 실제 원 외부의 지점이 포함될 수 있으므로 제한이 있습니다.

사용 예

기하학적으로 '좌표'가 있는 '플래그' 테이블을 가정합니다. point 열에서 다음 쿼리는 사용자로부터 100m 이내에 있는 모든 플래그를 검색합니다. 위치:

SELECT * FROM flags
WHERE ST_Distance_Sphere(coordinates, ST_GeomFromText('POINT(42.81 -70.81)')) < 100;

결론

MySQL의 공간 확장은 위도를 기준으로 원 내 지점을 찾는 기능을 포함하여 지리공간 데이터에 대한 효율적인 근접 쿼리를 위한 강력한 도구를 제공합니다. 및 경도 위치.

위 내용은 MySQL 공간 확장을 사용하여 원 내의 점을 어떻게 효율적으로 찾을 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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