2013-05-29 6 views
0

두 개의 (PostgreSQL 9.2) 테이블이 있습니다. cities 첫째는 : weather_stations에 의해 외래 키로 가장 가까운 (기하학적 인) 점

loc_id | integer    | not null 
name  | character varying(40) | 
gps_coord | point     | 

다음

:

s_id  | integer    | not null 
location | character varying(255) | not null 
height  | integer    | 
city_loc_id | integer    | 
gps_coord | point     | 

자신의 점 좌표를 사용하여, 어떻게 우리가 기상 관측소의 가장 가까운 도시를 찾을 수 있습니까?weather_stations의 외래 키 (현재 NULL이 모두 NULL 임)를 채우기 위해이 도시를 사용하고 싶습니다. 즉 city_loc_id입니다. (그러한 외래 키를 갖는 것이 좋은 생각입니까?)

어쨌든 가장 가까운 점 연산자 (##)를 사용해야한다는 것을 알고 있지만 쿼리를 작성할 때 약간 손실됩니다.

+0

나는 오른쪽 피연산자에 점들의 배열이 있거나 라인과 같이 둘 이상의 점에 걸쳐있는 오른쪽 피연산자의 기하학적 구조가 있다고 생각합니다. 당신이 정말로하고 싶은 것은 고려중인 지점으로부터 최소 유클리드 거리를 가진 행을 반환하는 하위 쿼리를 만드는 것입니다 (예 : 점 1과 점 2 사이의 유클리드 거리를 계산하는 데 걸리는 분). – Patashu

+0

그것은 좋은 생각입니다 - 도시 이름 변경, 버려진/파괴 등/정부 기관의 선언에 의해 만들어지며 두 개 이상의 독립된 단체로 나뉘어져 있습니다. 그래서 나는 도시를 사용하지 않을 것입니다. 이 모든 것은 기상 관측소의 평생과 별개로 발생하기 때문에 개인적으로 외래 키로 사용됩니다. –

답변

1

나는 해결책을 찾았다. 도와 주셔서 감사합니다.

UPDATE weather_stations 
    SET city_loc_id = (
     SELECT c.loc_id 
     FROM cities c 
     ORDER BY weather_stations.gps_coord <-> c.gps_coord 
     LIMIT 1); 
2

당신이 찾고있는 거리 연산자가 있습니다 : select point1 <-> point2. (지구 궤도도 있지만, 목적에 따라 과잉으로 보인다.)

관련 문제