Ich arbeite an einer Aufgabe, bei der ich alle 1000 km entlang der Küsten Probenpunkte sammeln muss, und bin auf ein Problem mit der Antarktis gestoßen. Soweit ich das beurteilen kann, scheint es ein Problem mit der Verwendung von Geometrie in den Funktionen zu sein, wenn ich wirklich denke, dass Geografie für diese Operation verwendet werden sollte.
Mit der Funktion aus dieser sehr ähnlichen Frage kann ich ein Ergebnis erzielen, das folgendermaßen aussieht : .
Wie Sie sehen können ST_AddMeasure()
und ST_LocateAlong()
die Geometrie nicht kugelförmig zu behandeln scheinen, entstehen viele Punkte am Südpol. Auf dem Clip entlang der Datumsgrenze (linke Seite) wurde sogar ein Punkt hinzugefügt. Gemäß der Dokumentation dieser beiden Funktionen kann nur Geometrie verwendet werden.
Der zum Generieren des Polygons und der Punkte verwendete Code befindet sich hier . Dies ist jedoch die SQL, die zum Generieren der Punkte verwendet wird:
CREATE TABLE atest AS WITH line AS
(SELECT
id,
ST_ExteriorRing((ST_Dump(geom)).geom) AS geom
FROM line_sample_test),
linemeasure AS
(SELECT
ST_AddMeasure(line.geom, 0, (ST_Length(line.geom))::int) AS linem,
generate_series(0, (ST_Length(line.geom))::int, 10) AS i
FROM line),
geometries AS (
SELECT
i,
ST_LocateAlong(linem, i) AS geom
FROM linemeasure)
SELECT
* from geometries;
Wie kann ich alle 1000 km entlang dieser Küste Punkte generieren?
quelle
Antworten:
Wie in einem der Kommentare vorgeschlagen, würde ich zuerst die Eingabegeometrie in eine polare stereografische Projektion umwandeln.
Zusätzlich sollten Sie
ST_Buffer
es (mit einer Menge von0
) verwenden, um die resultierende Schnittlinie zu entfernen .Dies würde also Ihr gewünschtes Ergebnis erzielen:
Beachten Sie, dass diese Abfrage davon ausgeht, dass die
line_sample_test
Tabelle nur eine Zeile enthält. Passen Sie sie daher nach Bedarf für Ihre tatsächlichen Eingabedaten an.quelle
ST_Buffer(geom, 0)
Trick nicht, um die Schnittlinie zu beseitigen - das ist nützlich!