Ich verwende PostGIS 2.0.0 und möchte eine GML-Oberfläche so speichern, dass Schnittpunkte zwischen dieser Oberfläche und verschiedenen Punkten und Linien berechnet werden können. In meinem Fall hat die Oberfläche ein PolygonPatch ohne Innenringe und einen Außenring, der ein LineStringSegment, eine Geodät, ein Bogen oder ein Kreis sein kann. Die Entfernungen können in der Größenordnung von zehn bis Hunderten von Meilen liegen. Ich sehe, dass PostGIS CIRCULARSTRING
und hat CURVEPOLYGON
, was eine gute Möglichkeit zum Speichern eines Bogens zu sein scheint, außer dass sie nicht nur vom geography
Typ unterstützt werden geometry
. Was wäre der beste Weg, dies zu speichern? (Ich bin ziemlich neu in PostGIS und GIS im Allgemeinen, daher ist es durchaus möglich, dass mir etwas Offensichtliches fehlt.)
9
Antworten:
ST_GeomFromGML
Sie können Ihre GML-Features als PostGIS-Geometriedatentyp speichern, indem Sie die Funktion ST_GeomFromGML verwenden, mit der Ihre GML in den Geometriedatentyp konvertiert wird. Zu Ihrer Information: Es gibt ähnliche Funktionen für KML, WKT und so weiter.
mach einfach so etwas wie:
Sobald Sie es im Geometriefeld haben, können Sie alle lustigen Schnittpunkte und Dinge tun, die Sie in PostGIS tun möchten
Anschließend können Sie Ihr Ergebnis mit ST_AsGML wieder im GML-Format ausspucken
EDIT # 1 Ich glaube, Sie suchen:
http://postgis.net/docs/ST_Distance_Sphere.html
http://postgis.net/docs/ST_Distance_Spheroid.html
EDIT # 2
Ich verwende "POSTGIS =" 1.5.2 "(ältere Version als Sie) und die folgende Anweisung funktioniert einwandfrei:
Sie müssen eine Kombination von Funktionen verwenden, um das zu erhalten, was Sie benötigen.
distance_spheroid unterstützt CIRCULARSTRING nicht, da es die Geometriedatentypen berücksichtigt.
Bitte fügen Sie Ihrer ursprünglichen Frage eine BEARBEITUNG mit einem Beispiel-GML hinzu, mit dem Sie Probleme haben, und ich werde die Aussagen für Sie aufschreiben.
quelle
Am Ende gab ich es auf, den "exakten" Bogen oder Kreis zu speichern. Beim Importieren eines GML-Bogens (der durch 3 Punkte auf dem Bogen definiert ist) erstelle ich vorübergehend eine Geometrie
CIRCULARSTRING
und konvertiere sie dann wie folgt in eine Geografie:Beim Importieren eines GML ArcByCenterPoint (definiert durch den Mittelpunkt, den Radius sowie den Start- und Endwinkel) approximiere ich ihn direkt, indem ich Punkte in Intervallen von 1 Grad vom Startwinkel zum Endwinkel projiziere. Dies erfolgt auf einer Kugel, nicht auf einem Sphäroid, daher ist es nicht ganz genau, aber es gibt PostGIS-Tickets, um die Azimut- und Punktprojektion für den Geografietyp zu implementieren . Gleiches gilt für einen Kreis.
quelle