Haversine formula를 사용하여 행별로 정렬
2154 단어 SQLPostgreSQL
거기서 사용할 수 있는 건요.
Haversine formula라는 공식입니다.
http://en.wikipedia.org/wiki/Haversine_formula
결국
에서 설명한 대로 해당 매개변수의 값을 수정합니다.(공식의 전개 등은 번거롭기 때문에 생략한다...)
하면, 만약, 만약...
select id,name,latitude,longitude from cities;
id
name
latitude
longitude
삼
Kuala Lumpur
3.146685
101.686656
일
Singapore
1.283333
103.833333
사
Bangkok
13.787395
100.524502
오
Hong Kong
22.27833
114.15889
육
Jakarta
-6.193806
106.843314
이
Manila
14.603352
120.984682
칠
Taipei
25.105495
121.557441
이 샘플 데이터를 사용하여 Kuala Lumpur에 가까운 점으로 정렬해 보십시오.
\set lat 3.046685
\set lng 100.686656
SELECT
id,name,latitude,longitude ,
3956 * 2 *
ASIN(
SQRT(
POWER(SIN( (:lat - abs(cities.latitude)) * pi()/180 / 2), 2 ) + COS(:lat * pi()/180) * COS(cities.latitude * pi()/180) * POWER(SIN((:lng - cities.longitude) * pi()/180 / 2)
, 2)
)
)
AS distance
from cities order by distance;
idname
latitude
longitude
distance
삼
Kuala Lumpur
3.146685
101.686656
69.2892623017496
일
Singapore
1.283333
103.833333
248.908449383448
육
Jakarta
-6.193806
106.843314
476.126654090718
사
Bangkok
13.787395
100.524502
741.677180652493
이
Manila
14.603352
120.984682
1595.9777030627
오
Hong Kong
22.27833
114.15889
1605.53830449593
칠
Taipei
25.105495
121.557441
2059.91627144258
결과는 이렇다.
* 성능 등을 고려하지 않음...
Reference
이 문제에 관하여(Haversine formula를 사용하여 행별로 정렬), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/akirahrkw@github/items/3ddd5bbb51bb912981ad텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)