Este é um seguimento da pergunta anterior . Você verá que eu sou um novo usuário do PostGIS.
Examinei a validade da topologia em meus dados e localizei cerca de 1700 problemas de topologia no conjunto de dados de cobertura de terra (polígono). Estes são todos "Ring Self_intersection".
Usando algumas informações úteis nesta apresentação de Paul Ramsay (página 20), tentei armazenar meus dados em buffer de acordo:
UPDATE schema.data SET the_geom = buffer (the_geom, 0.0) WHERE isvalid (the_geom) = false e isvalid (buffer (the_geom, 0.0)) = true;
Mas eu recebo a resposta:
AVISO: Toque em auto-interseção no ponto ou próximo (editado) ERRO: a nova linha da relação "sgm_buffer" viola a restrição de verificação "enforce_geotype_the_geom"
********** Erro **********
ERRO: a nova linha da relação "sgm_buffer" viola a restrição de verificação "enforce_geotype_the_geom" Estado SQL: 23514
Eu também tentei apenas:
UPDATE csgn.sgm_buffer SET the_geom = buffer (the_geom, 0.0)
e pegue:
ERRO: a nova linha da relação "sgm_buffer" viola a restrição de verificação "enforce_geotype_the_geom"
********** Erro **********
ERRO: a nova linha da relação "sgm_buffer" viola a restrição de verificação "enforce_geotype_the_geom" Estado SQL: 23514
Então, assumo que essa técnica de buffer não funcionará nos meus problemas? Ou estou fazendo algo errado?
Ramsay prossegue no mesmo documento sugerindo uma técnica adicional para lidar com polígonos de "número 8". Eu não entendo completamente como escrever isso na íntegra no código (ou o que está fazendo e se isso vai me ajudar):
SELECT ST_BuildArea (ST_Union ('LINESTRING VAZIO', ST_ExteriorRing ('POLYGON ((...))')
Então .... alguém pode ajudar? Isso está provando um verdadeiro pesadelo com meus prazos apertados e habilidades limitadas no PostGIS.
ST_Multi()
para forçar todos os polígonos para ser MULTIPOLYGON
s (esta é uma suposição)