Estou tentando dividir um polígono em polígonos menores de uma linha, mas acho que não posso usar a função st_split. O que eu preciso é criar pequenos polígonos dentro de um grande, usando a grade de cadeia de linhas.
Eu tentei algumas maneiras, mas não consigo obter o resultado. O que eu tentei:
Divida um polígono de um LineString usando st_split ()
De um polígono de limite.
E tabela de cadeia de linhas:
Eu precisaria dos seguintes polígonos:
Problema : Não consigo dividir um polígono de várias linhas, nem um polígono de uma cadeia de linhas múltiplas.
O outro método que estou tentando é criar polígonos a partir das linhas com st_polygonize () O SQL que estava tentando é:
SELECT
g.path[1] as gid,
g.geom::geometry(polygon, 22033) as geom
FROM
(SELECT
(ST_Dump(ST_Polygonize(geom))).*
FROM linestable
) as g;
Extraído de Criando polígonos a partir de segmentos de linha usando PostgreSQL e PostGIS
Problema : só consigo obter um polígono (o limite).
Alguém pode me dizer qual seria a melhor maneira de obter os polígonos da cadeia de linhas ou se estou perdendo alguma coisa?
Nota: As tabelas estão no mesmo SRID e as geometrias são ajustadas em uma grade. No QGIS, eu posso executar o processo de poligonização de linhas para polígono perfeitamente.
Conforme a demanda de John, aqui está a tabela de cadeia de linhas. https://drive.google.com/file/d/0B603y_m735jfS014S0EyVnpMUEU/view?usp=sharing
Respostas:
Comecei esse trabalho usando ST_Node primeiro, em conjunto com ST_Collect , para converter as linhas em um conjunto de cadeias de linhas nodeadas dentro de uma MultiLinestring .
Como diz a documentação para ST_Node :
O que isso significa é que todas as cadeias de linhas são combinadas em todas as combinações possíveis, de modo a formar o equivalente ao anel externo de um polígono. Considerando que, se você tentar ST_Polygonize um conjunto de LineStrings, nenhum dos quais por si só descreve um polígono, basta recuperar os LineStrings. Então, isso funciona:
Se você acabou de executar a primeira parte disso, ou seja, o CTE multi, a saída será semelhante a:
Agora, quando você alimentar este MultiLinestring para ST_Polygonize, ele funcionará conforme o esperado, por exemplo,
Obviamente, o ST_AsText é apenas para ilustração, e você precisará ajustar, se quiser o ID do caminho também.
O principal argumento é que ST_Polygonize espera cadeias de linhas que já descrevem o contorno de um polígono , que é o que ST_Node (ST_Collect (.... faz acima).
fonte
ST_Polygonize()
diz que leva cordas de linha, ou o que o caso de uso é para isso sem chamarST_Node()
primeiro