Eu tenho um Shapefile grande com 200.000 polígonos, mas o arquivo é muito grande para o aplicativo que o usará. Eu gostaria de generalizar esses polígonos e criar um arquivo muito menor.
Eu tentei fazer isso no QGIS usando a ferramenta "Simplify Geometries". Eu tentei isso em uma parte muito pequena do meu Shapefile e estou feliz com os resultados, mas tenho um pequeno problema que não sei como resolver. Anexei a imagem para mostrar o problema.
Limites BRANCOS são limites antes da simplificação. Os limites do RED estão após a simplificação. As áreas problemáticas são circuladas com a cor laranja. Como você pode ver, os "limites simplificados" contêm algumas áreas que após a simplificação não pertencem a nenhum dos polígonos anteriores.
Como simplifico este Shapefile e mantenho limites comuns entre polígonos como uma única linha e elimino áreas que foram criadas após a simplificação?
INFORMAÇÃO ADICIONAL:
Depois de seguir as instruções sugeridas
- Converter polígonos em linhas
- Simplifique linhas
- Converter linhas novamente em polígonos
Eu recebo os seguintes resultados. Está um pouco melhor do que antes, mas ainda assim recebo áreas fora dos polígonos originais (consulte as áreas brancas na figura abaixo).
@ Andrew sugeriu que eu associasse cada linha ao polígono adjacente, mas não sei como fazê-lo no QGIS.
Ainda estou tentando concluir o processo de simplificação de polígonos. Segui as instruções sugeridas neste post e, quando achei que tinha resultados aceitáveis, mais um problema apareceu. Abaixo está o resumo do que fiz com imagens de resultados. Todas as etapas foram executadas usando a caixa de ferramentas PROCESSING no QGIS.
- Primeiro, converti polígonos em linhas
- Segundo, limpei as linhas usando v.clean com a opção break. Isso resultou em CAMADA LIMPADA DE VETOR e CAMADA DE ERRO. Camada de erro (pontos verdes na imagem fornecida) possui um ponto verde em cada interseção de linha. Eu não sei o que isso significa.
- Terceiro, simplifiquei as linhas usando a ferramenta "SIMPLIFY GEOMETRY" (resultam em linhas vermelhas nas imagens). Comparando linhas vermelhas simplificadas e linhas laranja originais, estou feliz com o resultado.
- Quarto, eu queria converter linhas de volta para polígonos usando a ferramenta "Poligonizar" em "PROCESSAMENTO" e obtive resultados que eu não esperava (segunda imagem com polígonos sombreados de cor verde-oliva escura). Parece que as interseções da camada de erro conectadas pelo polígono e criaram conjuntos de polígonos completamente diferentes, ignorando as linhas simplificadas.
Alguém poderia explicar o que deu errado aqui?
Por que linhas simplificadas vermelhas não foram convertidas corretamente em polígonos simplificados?
Como você pode ver, não sou especialista em GIS, mas preciso fazer isso sozinho. Não sei se estou muito longe da solução, mas é frustrante poder ver linhas simplificadas que achei aceitáveis para o que gostaria de fazer, mas não posso convertê-las em polígonos.
Aqui estão duas imagens com resultados das duas últimas etapas do processo:
v.generalize
é outra ótima opção. Espero que isto ajude.Respostas:
Eu obtive um bom resultado usando o GRASS v.generalize na Processing Toolbox usando valores padrão:
Algumas linhas permanecem intocadas.
fonte
Eu entrei nesse problema com o Qgis2.16, mas não consegui que o GRASS desse um resultado topologicamente correto como @AndreJ.
Uma boa solução é alterar a tolerância de snap ao v.in.ogr nos parâmetros avançados da ferramenta v.generalize.simplify . O padrão é -1, o que impede o snap no GRASS.
Ao colocar um pequeno valor aqui (como 1e-05 m), o snap é ativado e o GRASS reconhece as bordas compartilhadas dos polígonos. A simplificação fornece uma camada topologicamente correta, sem furos.
Nota: Ao definir a tolerância de snap a valores mais altos, é possível alterar os polígonos para que os mais finos possam ser excluídos, se você desejar. Siga essa operação com v.clean usando rmarea e um limite grande o suficiente para excluir as sobras pequenas, e pronto!
fonte
primeiro converta seu polígono em linhas
use v.clean para limpar sua topologia (com a opção "break")
então você simplifica suas linhas
Finalmente, você volta suas linhas para polígonos. (Usando polygonize)
EDIT: Para obter os atributos de seus polígonos, a melhor maneira, se você não tiver polígonos com várias partes no conjunto de dados original , é obter os centróides antigos e dos polígonos simplificados e juntá-los com base na localização mais próxima (os centróides devem não se mova muito se você modificar levemente seus limites)
fonte
Você pode resolver o problema com um modelo de processamento (ex-SEXTANTE) como este:
Versão do script:
Nota: a única restrição é que o campo comum deve estar
ID
dentroJoin attributes table
, porque é o único campo da saída deLines to polygons
. É por isso que o campo comum não é uma entrada variável do modelo. Portanto, umID
campo deve estar disponível na camada de polígono de entrada.fonte