Ich arbeite an einem System, das Breiten- / Längengradinformationen von Adressen in einer PostGIS-Tabelle speichert. Um Lat / Long im Geometriedatentyp zu speichern, verwende ich die Funktion ST_GeometryFromText.
Beispielsweise ruft der folgende Funktionsaufruf den geometrischen Wert für die angegebene Long / Lat-Position ab:
myPointGeo = ST_GeometryFromText('POINT(40.758871 -73.985114)');
Ebenso konvertiere ich ein Polygon wie folgt in eine geometrische Darstellung:
myPolygonGeo = ST_GeometryFromText('POLYGON ((40.7566484549725 -73.9878561496734, 40.7556894646734 -73.9853026866913, 40.7545841705587 -73.9860537052154, 40.7548036054111 -73.9881458282471, 40.7559820394514 -73.9887895584106, 40.7566484549725 -73.9878561496734 ))')
Ich möchte herausfinden, ob sich die obige Lat / Long-Position in diesem Polygon befindet oder nicht. Dafür benutze ich die ST_Within Funktion. Obwohl sich 'myPointGeo' tatsächlich im Polygon befindet, gibt ST_Within false zurück. Ich benutze ST_Within folgendermaßen:
St_Within(myPointGeo,myPolygonGeo)
Was mache ich hier falsch? Sollte ich zu diesem Zweck eine andere Funktion verwenden?
Antworten:
Ich denke, ST_Intersects würde besser funktionieren, es gibt ein wahr oder falsch zurück, ob sich zwei Geometrien schneiden oder nicht. Sie möchten also etwas tun wie:
oder Sie können tun:
quelle