2013-02-16 2 views
2

У меня есть следующий запрос, который делает самостоятельное соединение с таблицей и выводит все точки пересечений между строками.запрос пространственных данных

insert into road_intersection 
select nextval('road_intersection_id_seq'), a.road_id, b.road_id, st_intersection(a.road, b.road), st_centroid(st_intersection(a.road, b.road)) 
from polygon_road a, polygon_road b 
where st_intersects(a.road, b.road) AND a.road_id!=b.road_id 

НО он выводит повторяющиеся значения для каждой точки пересечения, так как он вычисляет точку пересечения для каждой дороги. EG:

70;71;POINT_OF_INTERSECTION 

71;70;POINT_OF_INTERSECTION 

70 И 71 оба id значения двух разных дорог. Как вы можете видеть, точка пересечения была рассчитана дважды для тех же двух дорог.

Любые предложения, как я могу решить эту проблему, и будет вычисляться только одна точка пересечения?

ответ

1

Попробуйте что-то вроде:

select nextval('road_intersection_id_seq'), 
     a.road_id, 
     b.road_id, 
     st_intersection(a.road, b.road), 
     st_centroid(st_intersection(a.road, b.road)) 
from polygon_road a, polygon_road b 
where st_intersects(a.road, b.road) 
    --AND a.road_id!=b.road_id --not needed any more 

    AND a.road_id < b.road_id 

Это оставит только один из перекрестков (тот, где первая дорога имеет меньший идентификатор)

+0

Это работает! :) Огромное спасибо –

Смежные вопросы