Como escrevo SQL (para PostGIS no PostgreSQL) para remover polígonos de faixas (incluindo faixas longas e estreitas e alguns pequenos polígonos irregulares que foram 'lacunas' erradas no conjunto de dados original) do meu conjunto de dados, mesclando um polígono adjacente com a borda mais longa?
Eu tenho um conjunto de dados (tablename: "Vegetation" contendo vários milhares de polígonos identificados como uma tira ou um polígono 'real' em uma coluna de descrição (nome da coluna: "desc") como "sliver" ou "main". para importar meu conjunto de dados para o PostGIS, limpei-o importando para o GRASS (que também converti todas as lacunas em pequenos polígonos, que posteriormente foram mescladas com o conjunto de dados principal. Descobri se aumentei a tolerância de snap e a área mínima anterior ' 1 'na importação GRASS, comecei a perder os recursos desejados.]
Meu entendimento é que posso precisar das seguintes etapas:
- Identifique o polígono (Vegetation.desc = "main") adjacente a cada faixa (Vegetation.desc = "sliver") que compartilha a borda mais longa.
- Identifique a aresta entre cada fita e seu polígono principal adjacente, compartilhando a aresta mais longa identificada na Etapa 1. (Possivelmente usando ST_Relate)
- Remova a aresta entre cada fita e seu polígono principal adjacente, compartilhando a aresta mais longa usando o identificador de aresta retornado na Etapa 2. (Possivelmente usando ST_RemEdgeModFace)
Eu tenho apenas um entendimento muito básico do SQL e o processo acima está além da minha capacidade.
fonte
Respostas:
Eu uso isso ao agregar as formas do conjunto de dados GADM2 no SQL Server:
Os
reduce()
limpa fora os artefatos estendidos e acelera as coisas por um fator de 100 vezes - um pouco áspero, mas bom para aproximações.fonte