Estou mesclando alguns shapefiles e tive alguns problemas ao fazê-lo no QGIS, por isso estou usando ogr2ogr diretamente. Estou fazendo isso (em um lote):
ogr2ogr -overwrite %destination% %n1%
ogr2ogr -update -append %destination% %n2% -nln all_new
ogr2ogr -update -append %destination% %n3% -nln all_new
ogr2ogr -update -append %destination% %n4% -nln all_new
Funciona bem, mas agora preciso ter no shapefile resultante, um campo com os nomes dos shapefiles originais que mesclei. Não parece muito difícil, mas não estou conseguindo fazer isso.
Alguém pode ajudar? Obrigado!
Eu usaria a opção -sql e importaria o shapefile da seguinte maneira:
fonte
existem algumas maneiras de mesclar arquivos de forma.
e adicionar atributo ao shapefile @dango directon é bom. você pode usar layer.CreateField (field_name) para criar uma nova coluna que é preenchida a partir de
espero que ajude você ...
fonte
vascobnunes, eis como eu consegui esse problema usando um script Python para encadear várias instruções ogr2ogr juntas. Você pode facilmente convertê-lo em um script em lote, basicamente apenas concatenar as instruções ogr2ogr (
cmd
) e executá-las chamandoos.system(cmd)
, passando o comando ogr2ogr que eu concatenou.A arma secreta é ( como demonstrado pelo capooti ) aplicando OGR_SQL para impor o nome do arquivo como um valor constante do conjunto de dados de origem que você está anexando ao resultado da mesclagem.
No meu exemplo, a
-sql
flag lida com isso, no código é assim:Mas isso é confuso para ler porque eu preciso aplicar aspas simples e aspas duplas na concatenação resultante. Para fazer isso, preciso escapar das aspas simples (ou seja, \ ') para usá-las "de verdade". Portanto, para facilitar a leitura, ajuda a vê-lo sem variáveis e seqüências de escape. Se você fingir que o nome do arquivo era "roads1" para uma iteração específica, a concatenação resultante ficaria assim na sentença ogr2ogr:
Esse script .py é uma amálgama de três truques que eu roubei de matt wilkie (um clone vazio de um shapefile), j03lar50n (adicionando uma coluna a um shapefile usando ogrinfo e ogr_sql) e capooti (usando ogr_sql para impor um valor fixo da coluna em todos os registros em um shapefile). Então, aqui está o script completo:
fonte
Adicione coluna com o nome do arquivo de origem da pasta shapefiles. Requer GDAL 1.10dev, minha tentativa de descartar a extensão .shp não está funcionando - mas, no geral, funciona. - Eu imagino que poderia ser adicionado às linhas que se fundem com o OGR.
fonte
Oi, talvez este link ajude. Ele mostra como adicionar um campo a um shapefile usando as ligações pydal gdal.
fonte
Dentro do QGIS, você pode adicionar o plug-in Merge Shapefile. Existe uma opção para "Adicionar coluna com nome de arquivo"
fonte
Uma versão ligeiramente modificada da resposta do JaaKL. Observe que o -append foo.shp e -nln foo precisam corresponder. Além disso, observe o uso do dialeto SQLite (o GDAL aparentemente não aceita a palavra-chave 'Update', portanto o dialeto SQLite deve ser usado instaed) e a ausência da palavra-chave 'TABLE' após a palavra 'UPDATE' (não necessário ou aceito pelo SQLite).
fonte
Um pouco tarde para a discussão, mas agora também há ogrmerge
fonte