Ich verwende PostGIS 1.5.2 mit Geometrien in SRID: 900913. Ich muss einen Kreis mit einer Liste von Punkten als Mittelpunkt mit einem Radius von 600 Kilometern erstellen. Ich benutze diese Abfrage:
INSERT INTO circles (geom) (
SELECT ST_Buffer(point, 600000, 'quad_segs=8')
FROM points
);
Die erzeugten Kreise haben jedoch keinen Radius von 600 Kilometern (der Radius liegt in der Nähe dieser Länge, aber nicht genau).
Gibt es andere Methoden zum Erstellen von Kreisen in PostGIS?
HINWEIS: Die dargestellten Informationen stammen aus Spanien. Die korrekte Projektion lautet 4326, aber der Client verwendet Google-Raster. Daher speichere ich Daten in 900913, um Neuprojektionen zu vermeiden und die Leistung zu steigern.
postgis
postgis-1.5
Angelcervera
quelle
quelle
SELECT ST_Distance( (select point from points where id = 7), (select point from points where id = 42));
return mehr als 100km Unterschied respektieren Sie gmap-pedometer.com, aber wenn ich diese Länge als korrekt annehme, ist der Kreisradius perfekt. Aber die Leute benutzen die erste Distanz als Radius, nicht die Distanz, die von st_distance zurückgegeben wird. Ist es möglich, die erste Distanz in die zweite zu transformieren?Antworten:
Versuche dies:
Dies wechselt in die Geographie und verwendet dann die eingebaute SRID-Auswahl, um (ironischerweise) in die Geometrie zurückzukehren, in der ein guter planarer Puffer ausgeführt wird, und wechselt dann zurück. Das Problem bei Ihrer Vorgehensweise in Mercator ist, dass Mercator keine Distanz einhält. Die Verwendung einer geeigneteren lokalen Projektion führt zu besseren Ergebnissen, und genau das passiert bei der obigen Methode.
quelle
Sie können den quad_seg-Wert erhöhen, um einen genaueren Kreis zu erhalten. Um einen echten Kreis zu erhalten, muss man mit einem gekrümmten Geometrietyp arbeiten, aber ich weiß nicht, welche Software das zeigen kann.
Die Genauigkeit von srid 90013 ist ebenfalls sehr schlecht, da es sich um eine Projektion handelt, die die ganze Welt abdeckt.
Mit einer lokalen Projektion erhalten Sie ein genaueres Ergebnis.
quelle
Es hängt davon ab, wo Ihre Kreise erstellt werden. Befinden sie sich in der Nähe des Äquators oder näher an den Polen?
Schauen Sie sich diese Karte an . Denken Sie, dass Antarktis oder Grönland wirklich so groß sind? Das ist die Projektion, die Sie verwenden, richtig?
Ich empfehle Ihnen, dieses USGS-Dokument zu Projektionen schnell durchzulesen , insbesondere die folgende Tabelle, die Ihnen einen schnellen Überblick darüber gibt, welche Projektionen wofür gut sind.
Und nach all dem denke ich, ich sollte endlich deine Frage beantworten :)
Was Nicklas sagte, war ein guter Rat. Gibt es eine bestimmte Projektion für Ihre Region, die besser funktionieren würde?
Andernfalls möchten Sie möglicherweise den neuen PostGIS Geography-Typ anzeigen . Die am besten geeignete Antwort hängt jedoch davon ab, wo sich Ihre Daten befinden.
UPDATE: Da wir jetzt wissen, dass sich Ihre Daten in Spanien befinden, haben Sie versucht , sie in einer lokalen Projektion wie UTM Zone 31N zu speichern , Ihre Vorgänge damit durchzuführen und sie dann wieder in Google Web Mercator zu projizieren?
quelle
Sie können den neuen SQL / MM Part 3- Geometrietyp CIRCULARSTRING und / oder CURVEPOLYGON verwenden.
Beachten Sie jedoch, dass die Unterstützung für diesen Typ sowohl für interne Funktionen als auch für externe Programme begrenzt ist. Sie können ST_CurveToLine zur Visualisierung verwenden.
Außerdem ist es etwas abstoßend (ab PostGIS 2.0 svn), dass
SELECT ST_Area('CURVEPOLYGON(CIRCULARSTRING(2 1, 1 2, 0 1, 1 0, 2 1))'::geometry)
es sich nur um eine grobe Näherung von π handelt . (Vergleiche 3.14033115695475 mit 3.14159265358979 vonpi()
).quelle