J'essaie de diviser un polygone en petits polygones à partir d'une ligne, mais je pense que je ne peux pas utiliser la fonction st_split. Ce dont j'ai besoin, c'est de créer de petits polygones à l'intérieur d'un grand, en utilisant une grille de lignes linéaires.
J'ai essayé plusieurs façons, mais je n'arrive pas à obtenir le résultat. Ce que j'ai essayé:
Divisez un polygone d'une ligne de chaîne à l'aide de st_split ()
À partir d'un polygone limite.
Et table Linestring:
J'aurais besoin des polygones suivants:
Problème : je ne peux pas séparer un polygone de plusieurs lignes, ni un polygone d'une chaîne multiligne.
L'autre méthode que j'essaie est de créer un polygone à partir des lignes avec st_polygonize () Le SQL que j'essayais est:
SELECT
g.path[1] as gid,
g.geom::geometry(polygon, 22033) as geom
FROM
(SELECT
(ST_Dump(ST_Polygonize(geom))).*
FROM linestable
) as g;
Extrait de la création de polygones à partir de segments de ligne à l'aide de PostgreSQL et PostGIS
Problème : je ne peux obtenir qu'un seul polygone (la frontière).
Quelqu'un peut-il me dire quelle serait la meilleure façon d'obtenir les polygones de la chaîne de caractères, ou si je manque quelque chose?
Remarque: les tables sont dans le même SRID et les géométries sont alignées dans une grille. Dans QGIS, je peux parfaitement exécuter le processus de polygonisation des lignes au polygone.
Comme la demande de John, voici la table de ligne de ligne. https://drive.google.com/file/d/0B603y_m735jfS014S0EyVnpMUEU/view?usp=sharing
Réponses:
J'ai obtenu ce travail en utilisant d' abord ST_Node , en conjonction avec ST_Collect , pour convertir les lignes en un ensemble de chaînes de lignes inclinées dans une chaîne MultiLinestring .
Comme il est dit dans les documents pour ST_Node :
Cela signifie que toutes les chaînes de lignes sont combinées dans toutes les combinaisons possibles, de manière à constituer l'équivalent de l'anneau extérieur d'un polygone. Alors que si vous essayez de ST_Polygoniser un ensemble de LineStrings, dont aucun ne décrit à lui seul un polygone, vous récupérez simplement les LineStrings. Donc, cela fonctionne:
Si vous exécutez simplement la première partie de cela, c'est-à-dire le multi CTE, la sortie ressemble à:
Maintenant, lorsque vous alimentez maintenant cette MultiLinestring à ST_Polygonize, cela fonctionne comme prévu, par exemple,
Évidemment, le ST_AsText est juste à titre d'illustration, et vous devrez l'ajuster si vous voulez aussi l'ID du chemin.
Le point clé à retenir est que ST_Polygonize attend des chaînes de lignes qui décrivent déjà le contour d'un polygone , ce que fait ST_Node (ST_Collect (.... dans ce qui précède).
la source
ST_Polygonize()
dit qu'il faut des chaînes de ligne, ou quel est le cas d'utilisation pour cela sans appeler d'ST_Node()
abord