>데이터 베이스 >MySQL 튜토리얼 >위도와 경도 좌표를 사용하여 반경 5마일 내의 건물을 찾는 방법은 무엇입니까?

위도와 경도 좌표를 사용하여 반경 5마일 내의 건물을 찾는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-09 11:51:42579검색

How to Find Buildings Within a 5-Mile Radius Using Latitude and Longitude Coordinates?

좌표를 사용하여 특정 반경 내의 건물을 검색하세요

지리 데이터를 처리할 때 일반적으로 특정 위치의 특정 범위 내에 있는 개체를 찾아야 합니다. 이는 특정 지점의 특정 반경 내에서 건물을 찾는 등의 작업에 특히 유용합니다. 이 기사에서는 주어진 좌표 세트에서 5마일 이내에 있는 모든 건물을 찾는 데 중점을 둘 것입니다.

데이터 구조

저희 데이터베이스 테이블 이름은 "Building"이며 다음과 같은 필수 정보가 포함되어 있습니다.

  • 이름: 건물 이름
  • lat: 위도 좌표
  • lng: 경도 좌표

도전

특정 지점에서 반경 5마일 이내에 있는 모든 건물을 검색하고, 주어진 좌표 세트를 사용하여 이를 표현하려고 합니다.

  • -84.38653999999998(경도)
  • 33.72024(위도)

초기 시도

원하는 범위 내의 건물을 검색하려면 먼저 ST_Contains 함수 사용을 고려할 수 있습니다. 그러나 이 접근 방식은 좌표를 단일 기하학으로 저장하는 경우에만 작동합니다. 별도의 위도 및 경도 열을 사용하므로 ST_Contains를 직접 적용할 수 없습니다.

솔루션

대신 ST_DWithin 및 ST_Distance라는 두 가지 다른 함수를 활용하여 포인트 기반 지리공간 계산을 수행할 수 있습니다. 개별적으로 살펴보겠습니다.

1.ST_D내

ST_DWithin을 사용하면 도형이 다른 도형의 지정된 거리 내에 있는지 확인할 수 있습니다. 이 상황에서 이를 어떻게 사용하는지에 대한 예는 다음과 같습니다.

<code class="language-sql">SELECT name,
       long,
       lat,
       ST_Distance('POINT(-84.38653999999998, 33.72024)'::geography,
                   ST_MakePoint(long, lat)) * 0.000621371 AS distance
FROM building
WHERE
  ST_DWithin('POINT(-84.38653999999998, 33.72024)'::geography,
              ST_MakePoint(long, lat), 8046.72); -- 8046.72 米 = 5 英里</code>

2. ST_거리

ST_Distance 두 도형 사이의 거리(미터 단위)를 계산합니다. 이를 사용하여 5마일 내의 모든 건물을 찾은 다음 거리를 마일로 변환할 수 있습니다.

<code class="language-sql">SELECT name,
       long,
       lat,
       ST_Distance('POINT(-84.38653999999998, 33.72024)'::geography,
                   ST_MakePoint(long, lat)) * 0.000621371 AS distance
FROM building
WHERE
  ST_Distance('POINT(-84.38653999999998, 33.72024)'::geography,
              ST_MakePoint(long, lat)) * 0.000621371 < 5;</code>

ST_Point 기하학을 구성할 때는 인수 순서가 중요합니다. 첫 번째 매개변수는 경도를 나타내고 두 번째 매개변수는 위도를 나타냅니다.

이 두 쿼리 중 하나를 실행하면 건물 이름, 경도, 위도 및 지정된 좌표로부터의 거리 목록이 반경 5마일 내의 건물만 포함하도록 필터링되어 원하는 결과를 얻을 수 있습니다.

위 내용은 위도와 경도 좌표를 사용하여 반경 5마일 내의 건물을 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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