Ich möchte mit postGIS eine Abfrage erstellen, um alle Wege und ihre Knoten innerhalb eines Begrenzungsrahmens auszuwählen. Der Begrenzungsrahmen muss alle Details enthalten, die der Osmose-Befehl "--bounding-box" abruft.
Vielen Dank. Die Funktion ST_MakeEnvelope benötigt einen weiteren Parameter, srid. Ich weiß nicht, was ich dort hinstellen soll.
Uriel
1
Anscheinend verwenden Sie PostGIS 1.5, für das dieser Parameter erforderlich ist. Ich denke, dass SRID ignoriert wird, so dass jeder Wert die gleichen Ergebnisse liefern kann. Wenn Sie Lat / Long-Daten haben, verwenden Sie im Allgemeinen eine SRID von 4326.
Mike T
1
In den meisten Tools können Sie heutzutage die SRID für OSM-Daten beim Laden auswählen. Die Standard-OSM-SRID ist 3857 (sphärischer Mercator). Die Standard-SRID für die meisten Lat / Lon-Daten ist SRID 4326 (Lat / Lon AKA WGS84). Wenn Sie die Daten mit SRID 3857 laden, müssen Sie beispielsweise eine Konvertierung von LAT / LON WGS84 in 3857 durchführen: ST_Transform (ST_MakeEnvelope (LON1, LAT1, LON2, LAT2, 4326), 3857) Einige Tools (wie imposm3) Derzeit unterstützt nur SRID 3857
Justin Swanhart
Beachten Sie, dass der Operator && keine SRIDs für Sie transformiert. Stellen Sie sicher, dass sich die von Ihnen erstellte Hüllkurve in derselben SRID befindet wie die Testgeometrie, oder transformieren Sie sie selbst. trac.osgeo.org/postgis/ticket/2320
Nelson
1
Der Operator && ist rechnerisch langsamer als ST_Intersects
caiohamamura
8
Ich denke, es wird ungefähr so aussehen: Der Begrenzungsrahmen in PostGIS wird von erstellt
Die Abfrage verwendet ST_Intersection mit einer Unterabfrage.
SELECT bbox_nodes.id, bbox_nodes.tag, nodes_geom
FROM (SELECT nodes.id, nodes.tag,
ST_Intersection(nodes.the_geom,
ST_GeomFromText('POLYGON((ulx uly, urx ury, llx llr, lrx lry, ulx uly))',<srid>)).geom AS nodes_geom
FROM nodes
WHERE ST_Intersects(nodes.the_geom,
ST_GeomFromText('POLYGON((ulx uly, urx ury, llx llr, lrx lry, ulx uly))',<srid>)) AS bbox_nodes
WHERE ST_Dimension(bbox_nodes.nodes_geom)=0;
Ich habe dies mehr oder weniger von den PostGIS-Hilfeseiten übernommen.
Eine zweite Abfrage in der Wegetabelle, die ähnlich wie oben entworfen wurde (aber mit ST_Dimension () = 1), sollte die Wege abrufen.
Hallo danke! Was zum Teufel? was muss ich in <srid> einfügen? und ".geom" (Zeile 4) es scheint ungültig zu sein, sollte es da sein?
Uriel
Entschuldigung, ich habe deinen Kommentar von letzter Woche verpasst. Das srid ist der Code des Koordinatenreferenzsystems. dh 2039 für Israel. Der .geom-Zusatz extrahiert den Geometrieteil einer "GeometryCollection". Vielleicht haben Sie recht, dass er hier nicht erforderlich ist.
Micha
4
es gibt hier ein Thema auf Ihre Frage ähnlich , die hier ...
ST_Intersection - (T) Gibt eine Geometrie zurück, die den gemeinsam genutzten Teil von geomA und geomB darstellt. Die Geografieimplementierung führt eine Transformation in Geometrie durch, um die Schnittmenge zu erstellen, und transformiert dann zurück in WGS84.
1.you kann auch einige Informationen bekommen hier über Geometrie Konstruieren von Funktionen.
2.Another Informationen hier über durchteuft Überschneidung: PostGIS - ST_Intersects, ST_Intersection ...
SELECT b.the_geom As bgeom, p.the_geom As pgeom,
ST_Intersection(b.the_geom, p.the_geom)As intersect_bp
FROM buildings b INNER JOIN parcels p ON ST_Intersection(b,p)
WHERE ST_Overlaps(b.the_geom, p.the_geom)
LIMIT 1;
Die Koordinatenpaare für POLYGONsollten im Uhrzeigersinn (oder gegen den Uhrzeigersinn) angeordnet sein: links oben, rechts oben, rechts unten, links unten, wieder links oben.
Im Uhrzeigersinn sollte der Funktionsaufruf also sein:
Ich denke, es wird ungefähr so aussehen: Der Begrenzungsrahmen in PostGIS wird von erstellt
Die Abfrage verwendet ST_Intersection mit einer Unterabfrage.
Ich habe dies mehr oder weniger von den PostGIS-Hilfeseiten übernommen.
Eine zweite Abfrage in der Wegetabelle, die ähnlich wie oben entworfen wurde (aber mit ST_Dimension () = 1), sollte die Wege abrufen.
HTH, Micha
quelle
es gibt hier ein Thema auf Ihre Frage ähnlich , die hier ...
1.you kann auch einige Informationen bekommen hier über Geometrie Konstruieren von Funktionen.
2.Another Informationen hier über durchteuft Überschneidung: PostGIS - ST_Intersects, ST_Intersection ...
ich hoffe es hilft dir ...
quelle
Dies ist ein Kommentar zu @ Michas Code.
Die Koordinatenpaare für
POLYGON
sollten im Uhrzeigersinn (oder gegen den Uhrzeigersinn) angeordnet sein: links oben, rechts oben, rechts unten, links unten, wieder links oben.Im Uhrzeigersinn sollte der Funktionsaufruf also sein:
Oder gegen den Uhrzeigersinn:
quelle