2016-05-15 11 views
0

Ich versuche alle Straßen zu finden, die in den Anwendungsbereich fallen.ST_Contains. Finden Sie alle Straßen, die innerhalb des Bereichs liegen

, dass meine Anfrage:

select osm_id, 
name, 
from planet_osm_roads 
where ST_Contains(ST_GeomFromEWKT('SRID=900913;POLYGON((4355764.028 6715445.513, 4364401.418 6715674.192, 4364248.577 6708736.416, 4354808.572 6709155.795, 4355764.028 6715445.513))'), way) 
LIMIT 100; 

oder dass:

select osm_id, 
name, 
from planet_osm_roads 
where ST_Contains(ST_GeomFromText('LINESTRING(4355764.028 6715445.513, 4364401.418 6715674.192, 4364248.577 6708736.416, 4354808.572 6709155.795, 4355764.028 6715445.513)', 900913), way) 
LIMIT 100; 

Ich mache alles auf der lokalen Datenbank, die erforderlichen Daten.

Polygon so:

enter image description here Das Abfrageergebnis ist leer. Sag mir, was schief gelaufen ist. Vielen Dank.

+0

Welche SRID sind Ihre Daten? Sie scheinen 900913 in Ihrer Abfrage zu verwenden – e4c5

+0

ST_SRID (Weg) in Abfrage gibt 900913 – sergpc

+0

Das erste Beispiel zum Erstellen eines Polygon ist korrekt. LineStrings enthalten nur Punkte, die genau auf der Linie liegen, da sie definitionsgemäß keinen Bereich haben. –

Antwort

0

Der Fehler wurde in der Raumreferenz gefunden. Das ist eine gültige Anfrage:

select osm_id, name, 
ST_AsText(ST_Transform(way,4326)) from planet_osm_roads 
where ST_Contains(ST_Transform(ST_GeomFromText('POLYGON((39.128494 51.716394, 39.206085 51.71767, 39.204712 51.678942, 39.119911 51.681284, 39.128494 51.716394))',4326),900913), way) 
LIMIT 120; 

ST_Transform - Gibt eine neue Geometrie mit seinen Koordinaten in den SRID durch den Integer-Parameter referenziert umgewandelt.

1

ST_Contains wahrscheinlich für diesen Job ist nicht

ST_Contains geeignet - Gibt true zurück, wenn und nur wenn keine Punkte von B liegen in der Äußeren von A, und mindestens einen Punkt des Inneren des B liegt in der Innenraum von A.

Da dies Straßen sind, wird zumindest einige Teile davon außerhalb Ihres Polygons liegen. Das bedeutet, dass ST_Contains false zurückgibt. Vielleicht könnte ST_Intersects eine bessere Option sein.

+0

Mit "ST_Intersects" ist das Ergebnis, aber dieses Ergebnis scheint mir, dass ich den falschen Punkt des Polygons gewählt habe. Ich habe das Bild aktualisiert und die Zahlen zeigten die Polygonpunkte. Mein Polygon wie 1-2-3-4-1. Vielleicht irre ich mich ein Polygon? – sergpc

+0

Sorry ich habe diesen Kommentar nicht ganz verstanden – e4c5

+0

Ich denke, dass der Fehler, um die Punkte eines Polygons zu spezifizieren. Ich zeige sie in der folgenden Reihenfolge an: 1-2-3-4-1. Es ist nicht falsch? – sergpc