Théoriquement, il est possible d'obtenir les polygones de blocs de ville ( blocs urbains) à partir des rues, lorsque les rues sont représentées par l'axe des rues ( LineStrings ).
Les blocs urbains sont délimités par des rues, de sorte que les segments de rue peuvent être utilisés pour former un polygone qui ne contient qu'un seul bloc à l' intérieur ... Voir les illustrations.
Il existe un script (SQL) PostGIS 2.X pour ce faire? Un plugin?
PS: les géométries approximatives des blocs de villes suffisent.
Illustrant
En commençant le processus à partir d'un "maillage de segments de ligne connectés", il peut s'agir: 1) d'obtenir des polygones associés; 2) isoler les polygones par tampon négatif et soustraction du tampon des lignes.
Exemple: le polygone 262 (représentant un bloc de ville) a été créé par les segments 2496, 2494, 2369, 1513, ... Et le polygone voisin 263 peut utiliser certains segments communs, mais ensuite (par st_buffer négatif ou une autre opération) sera polygones vraiment isolés, donc une faible précision suffit.
(ÉDITER)
Je pense que nous pouvons traduire ce problème spécifique en un problème plus générique: l'ensemble des segments de rue peut être considéré comme une sorte de pavage , c'est-à-dire que les segments séparent l'avion en régions contiguës - les blocs urbains se trouvent à l'intérieur de ceux-ci Régions. Chaque segment est un côté de deux régions.
Le principal problème est de transformer "l'ensemble des segments de la mosaïque" en polygones indépendants .
la source
Réponses:
L'
ST_Polygonize
agrégat dans PostGIS renverra ungeometry_dump
contenant tous les polygones possibles formés par un ensemble de lignes. Je suppose que les ID de bloc affichés dans votre exemple ne sont pas liés aux ID de dessin au trait d'entrée. Si tel est le cas, vous pouvez obtenir vos polygones et identifiants avec:La partie lente ici est la
ST_Union
. Il semble que cela devrait fonctionner sans cet appel, tant que les lignes d'entrée sont correctement inclinées, mais je n'ai pas réussi à le faire.Un tampon négatif ne donnera pas les résultats exacts indiqués dans votre exemple, car les rues sans issue seront ignorées par le processus de polygonisation. Mais vous pouvez prendre un tampon positif du dessin au trait d'origine et l'utiliser
ST_Difference
pour supprimer cette zone des polygones de bloc.la source