Je travaille sur une tâche qui m'oblige à obtenir des points d'échantillonnage tous les 1000 km le long des côtes et j'ai rencontré un problème avec l'Antarctique. D'après ce que je peux dire, cela semble être un problème avec l'utilisation de la géométrie dans les fonctions, alors que je pense vraiment que la géographie devrait être utilisée pour cette opération.
En utilisant la fonction de cette question très similaire , je suis en mesure de produire un résultat qui ressemble à ceci: .
Comme vous pouvez le voir, ST_AddMeasure()
et ST_LocateAlong()
ne semblez pas traiter la géométrie de manière sphérique, ce qui entraîne de nombreux points qui se trouvent sur le pôle Sud. Un point a même été ajouté sur le clip le long de la ligne de date (côté gauche). Selon la documentation de ces deux fonctions, seule la géométrie peut être utilisée.
Le code utilisé pour générer le polygone et les points peut être trouvé ici , mais c'est le SQL utilisé pour générer les points:
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;
Comment générer des points tous les 1000 km le long de ce littoral?
la source
Réponses:
Comme suggéré dans l'un des commentaires, je voudrais d'abord transformer la géométrie d'entrée en projection stéréographique polaire.
De plus, vous voudrez l'utiliser
ST_Buffer
dessus (avec une quantité de0
) pour vous débarrasser de la ligne de coupe résultante.Ainsi, vous obtiendrez le résultat souhaité:
Notez que cette requête suppose qu'il n'y a qu'une seule ligne dans le
line_sample_test
tableau, ajustez-la si nécessaire pour vos données d'entrée réelles.la source
ST_Buffer(geom, 0)
astuce pour éliminer la ligne de coupe - c'est utile!