Я работаю над задачей, которая требует, чтобы я брал пробные точки каждые 1000 км вдоль береговой линии, и у меня возникла проблема с Антарктидой. Из того, что я могу сказать, кажется, что проблема с использованием геометрии в функциях, когда на самом деле я думаю, что география должна использоваться для этой операции.
Использование функции от этого очень подобного вопроса , я могу получить результат , который выглядит следующим образом : .
Как вы можете видеть, ST_AddMeasure()
и ST_LocateAlong()
, кажется, не относитесь к геометрии сферически, что приводит к множеству точек, расположенных на Южном полюсе. Точка была даже добавлена на клип вдоль линии даты (левая сторона). Согласно документации этих двух функций, может использоваться только геометрия .
Код, используемый для генерации многоугольника и точек, можно найти здесь , но это SQL, используемый для генерации точек:
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;
Как я могу генерировать точки на каждые 1000 км вдоль этой береговой линии?
источник
Ответы:
Как предложено в одном из комментариев, я сначала преобразовал бы входную геометрию в полярную стереографическую проекцию.
Кроме того, вы хотите использовать
ST_Buffer
его (с количеством0
), чтобы избавиться от результирующей линии разреза.Так что это даст желаемый результат:
Обратите внимание, что в этом запросе предполагается, что в
line_sample_test
таблице есть только одна строка , поэтому настройте ее так, как это необходимо для ваших реальных входных данных.источник
ST_Buffer(geom, 0)
хитрости, чтобы устранить линию разреза - это полезно!