Suite

PostGIS connect points à 1 ligne de fermeture/limite


J'ai ces points représentés comme geom:

Et quand je postule :ST_MakeLine(points.geom)J'ai ceci :

Quand j'ai besoin de quelque chose comme la ligne de fermeture/limite (et encore mieux toute la zone comme 1 geom):


Voici comment j'obtiens les points par exemple :

SELECT DISTINCT (ST_DumpPoints(buildings.geom)).geom --AS geom FROM buildings WHERE ST_DWithin(buildings.geom, ST_GeomFromText('POINT(lon lat)', 4326), radius)

EDIT 2:

ApplicationST_ConcaveHull(ST_Collect(vertices.geom), 0.99, faux)a abouti presque la solution:

La raison est telle que documentée ici : « l'approche de base est qu'elle crée d'abord une coque convexe de la géométrie, puis utilise la fonction ST_ClosestPoint introduite dans PostGIS 1.5 pour creuser la coque pour la transformer en une coque concave. C'est l'idée de base ». On voit que les points mal connectés sont ceux où le problème avec le point le plus proche est trompeur…


Ce que vous voulez faire n'est pas vraiment possible dans un sens général, sans donner plus d'informations à la base de données. Il peut être clair pour un humain quelle est la bonne solution, mais la machine n'est pas encore tout à fait là.

J'ai essayé ST_ConcaveHull avec 0,99 et j'ai obtenu ces deux résultats :

La différence est une petite perturbation du point intérieur à droite (je l'ai exagéré pour l'effet.)

la suggestion de vinayan, que vous ordonniez les points, est, je pense, la bonne. Vous pouvez le faire en attribuant un identifiant à chacun et en les commandant dessus.

Une autre chose que vous pourriez essayer est une triangulation de Delaunay. Construisez la triangulation, puis supprimez les bords supérieurs à une certaine longueur de la limite jusqu'à ce que la forme souhaitée apparaisse. Cela nécessiterait tout de même une intervention de votre part. (Je crois que cela est similaire à l'idée derrière les formes alpha.)


Voir la vidéo: PostgreSQL + PostGIS. Basics (Octobre 2021).