2017-03-12 18 views
0

こんにちは、私はすべての通りの交差点を見つけなければなりません、私はコードの下に書いていますが、なぜ誰かがアイデアを持っているか、それを修正する方法をkhnowsしていますか?ご協力ありがとうございました。私の街のすべての街路交差点をポストギスで見つけるには

DROP TABLE IF EXISTS toto; 

CREATE TABLE toto(
gid serial primary key, 
nom_voie1 varchar(50), 
nom_voie2 varchar(50), 
geom_inter geometry(Geometry,4326) 
); 

CREATE INDEX ON toto using gist (geom_inter); 

INSERT INTO toto(nom_voie1, nom_voie2, geom_inter) 
SELECT a.nom_voie, b.nom_voie, ST_Intersection(a.geom, b.geom) 
FROM reseau_routier AS a , reseau_routier AS b 
WHERE ST_Intersects(a.geom,b.geom) 
    AND ST_Touches(a.geom, b.geom) 
    AND a.gid < b.gid 
    AND a.nom_voie <> b.nom_voie; 

enter image description here

+0

の代わりに参加します! –

答えて

1

あなたはreseau_routierであるためJOINの重複取得されています。

あなたが重複して削除することができます。

INSERT INTO toto(nom_voie1, nom_voie2, geom_inter) 
SELECT a.nom_voie, b.nom_voie, ST_Intersection(a.geom, b.geom) 
FROM reseau_routier AS a , reseau_routier AS b 
WHERE ST_Intersects(a.geom,b.geom) 
    AND ST_Touches(a.geom, b.geom) 
    AND a.gid < b.gid 
    AND a.nom_voie <> b.nom_voie 
GROUP BY a.nom_voie, b.nom_voie, ST_Intersection(a.geom, b.geom); 

しかし、これらは重複しては、不正な形式のクエリの兆候です。完全なデータサンプルを使用すると、完璧なクエリを簡単に提供できます。

0
SELECT DISTINCT a.nom_voie, b.nom_voie, ST_Intersection(a.geom, b.geom) 
1

使用して、明示的には私も同じ問題を抱えて、私はDISTINCT追加

INSERT INTO toto(nom_voie1, nom_voie2, geom_inter) 
SELECT a.nom_voie, b.nom_voie, ST_Intersection(a.geom, b.geom) 
FROM reseau_routier AS a 
JOIN reseau_routier AS b on ST_Intersects(a.geom,b.geom) 
    AND a.gid < b.gid 
    AND a.nom_voie <> b.nom_voie; 

暗示
関連する問題