programing

MariaDB: 위도 및 경도 점의 원형 반지름이 다각형과 교차하는지 확인

goodsources 2022. 9. 13. 22:18
반응형

MariaDB: 위도 및 경도 점의 원형 반지름이 다각형과 교차하는지 확인

나는 구글 지도 검색물을 만들고 있는데, 그 곳에서 위치와 '반경'을 지정할 수 있다.그런 다음 반경 검색이 교차하는 정의된 영역(DB에서 폴리곤으로 정의됨)의 결과를 가져오려고 합니다.

현재 다음 쿼리를 사용하고 있습니다(명확한 설명을 위해 php 코드).

$km = ($miles * 1.852) * 1000;
$sql = "SELECT * FROM Regions WHERE ST_Intersects(poly, ST_BUFFER(ST_GeomFromText('POINT({$lat} {$lng})'), {$km}))"

지역 데이터베이스는 위도 및 경도 값의 폴리곤 데이터를 저장하는 "폴리곤" 필드를 사용하여 설정됩니다.하지만 반경 5마일에서 검색하면 데이터베이스에 있는 모든 폴리곤을 수신할 수 있습니다.

제가 발견한 다른 느슨한 답변을 바탕으로 질문을 해봤는데, 지금 제가 뭘 잘못하고 있는 건지 잘 모르겠어요.온라인에서 발견된 문제의 대부분은 폴리곤 또는 반지름 내의 특정 위치를 찾는 것이지만, 여기서는 반경 검색이 제가 만든 폴리곤과 교차하는지 확인해야 합니다.

어떤 도움이라도 주시면 감사하겠습니다!감사합니다.

비슷한 문제를 안고 있는 사람을 위해 제가 안고 있는 문제를 발견했습니다.

데이터베이스에 'polygon' 값을 저장할 때 값을 '경도 위도'로 지정해야 하는데, 저는 반대로 저장했습니다.lng/lat이 x/y 형식이기 때문일 것입니다.

그런 다음 https://github.com/bcalik/php-circle-to-polygon에 있는 클래스의 메서드를 사용하여 원형 폴리곤을 생성했습니다.그런 다음 다음과 같이 사용:

SELECT id FROM Regions WHERE ST_Intersects(poly, GEOMFROMTEXT('POLYGON((" . implode(",", $circle) . "))', 0))

어디에$circle의 배열입니다.$longitude $latitudestring 값

ST_BUFFER 메서드는 아직 동작하고 있습니다만, 지금은 동작하고 있습니다.더 이상 조작할 생각은 없습니다.

언급URL : https://stackoverflow.com/questions/52994446/mariadb-finding-if-a-circular-radius-from-a-latitude-and-longitude-point-inter

반응형