시나리오는 어떤 지점에서 가장 가까운 위치를 찾아야 한다.. 입니다. 그런데 위치에 대한 좌표 타입이 geometry가 아니고 일단 실수형이라는 점입니다. 그리고 기준 좌표와 찾아야 하는 좌표의 좌표 체계가 다릅니다. 하나는 구글 좌표계(EPSG:3857)이고 하나는 경위도 좌표계(EPSG:4326)입니다.
아래의 쿼리가 위의 내용에 대한 솔루션 중 하나입니다.
SELECT station_id, address, lng, lat, ST_DISTANCE( ST_TRANSFORM( ('SRID=4326;POINT(' || lng || ' ' || lat || ')')::geometry, 3857 ), 'SRID=3857;POINT(14128453 4506986)'::geometry ) AS distance FROM weather_station ORDER BY distance
즉, 구글 좌표계로 (14128453, 4506986)인 지점과의 거리를 구하고 있습니다. 거리를 구하는 ST_DISTANCE는 서로 다른 좌표계를 사용할 수 없으므로 ST_TRANSFORM을 통해 경위도 좌표를 X,Y 좌표계로 변경하고 있습니다. 결과는 다음과 같습니다.
보시면 가장 첫번째 Row가 가장 가까운 대상이라는 것을 알 수 있습니다.