Suite

Création d'une couche de chaînes de lignes sécantes à partir de deux couches de polygones en utilisant une certaine tolérance


J'ai deux couches postgis :

  • La première couche contient les trottoirs de ma ville (polygones en bleu).
  • Le second contient les trottoirs (routes) de ma ville (polygones en marron).

La carte ressemble à ceci dans QGIS avec les deux couches activées :

Ok, maintenant je dois obtenir une couche avec les bordures (lignes) de la ville à partir de ces deux couches. Le nouveau calque doit être composé de chaînes de lignes. Chaque élément de cette nouvelle couche doit être une chaîne de lignes où chacune des géométries des deux couches se croisent.

Dans l'instantané suivant, j'ai peint manuellement les géométries qui devraient être créées dans cette zone particulière :

Désolé pour mon mauvais pouls. J'espère que cela m'aidera à mieux me comprendre.

Ok, si j'ajoute simplement les couches à QGIS, par exemple, et croise une couche avec une autre, j'obtiens la couche suivante :

La nouvelle couche verte est la couche de bordures obtenue. J'ai deux accrocs avec cette couche :

  • Il est composé de polygones
  • Toutes les courbes ne sont pas dessinées.

Avec cette dernière preuve, je découvre que les couches de trottoirs et de routes n'étaient pas précisément délimitées les unes à côté des autres, j'ai donc besoin d'une sorte de tolérance dans l'opération pour obtenir la couche que je recherche. Comme je l'ai déjà dit, il devrait s'agir d'une couche de ligne.

Cela ne me dérange pas si la requête est effectuée directement dans postgis ou à l'aide de QGIS ou d'autres outils logiciels, je ne peux tout simplement pas comprendre pour le moment comment résoudre ce problème.


Dans PostGIS, vous pouvez utiliser ST_Buffer pour ajouter une petite marge à l'une des couches de polygones, puis utiliser ST_Intersection pour obtenir le polygone des bordures. Maintenant, le ST_StraightSkeleton peut vous donner ce que vous voulez (je n'ai pas réellement testé mais cela devrait fonctionner).

Comme indiqué ci-dessous, squelettiser produit un résultat erroné. La meilleure façon devrait être de faireST_DumpRingssur le polygone des routes et obtenezST_Intersectiondes anneaux et le polygone de bordure.


Voir la vidéo: Lesson N2: Crée une couche vecteur Point, Polyline, Polygone avec QGIS (Octobre 2021).