Eu tenho um script Python que adiciona um campo de atributo a um Shapefile, se não existir. Isso é fácil de fazer com o ArcGIS (graficamente ou via Python), mas estou procurando algo que não dependa do ArcGIS.
Tentei isso sem sucesso com o OGR, pois meu Shapefile contém recursos .
Eu olhei para o pyshp , mas da mesma forma não há como modificar o esquema depois que ele foi criado. Não experimentei o shapefile (para Python) , mas não vejo esse recurso anunciado. Também não consigo ver como isso pode ser feito alterando o arquivo DBF via dbfpy .
Alguém tem alguma idéia?
Respostas:
você deve dar uma olhada nessas perguntas, pois elas já foram respondidas: Como adicionar atributos de recursos personalizados ao Shapefile usando Python?
/programming/4215658/adding-custom-feature-attributes-to-esri-shapefile-with-python
Se você quiser como resultado, apenas um shapefile, apenas exclua seus arquivos de entrada no final do seu script.
fonte
Aqui está uma solução. Antes tarde do que nunca:
http://geospatialpython.com/2013/04/add-field-to-existing-shapefile.html?m=1
fonte
Graças a um formato de morte cerebral denominado DBF, a adição de campos aos shapefiles com dados de atributos existentes não é possível sem reescrever ou adicionar preenchimento ao DBF. Não conheço uma solução pronta, mas o que eu faria é escrever um script para criar um novo shapefile com base em um existente e adicionar campos extras ao novo shapefile. Em seguida, copie os dados da geometria / atributo do antigo para o novo shapefile. E como etapa final, remova o antigo shapefile e renomeie o novo. Tudo isso é facilmente realizado usando ligações OGR python.
Como alternativa, você pode usar o dbfpy para fazer o acima com apenas o arquivo DBF. A ordem das etapas permanece a mesma:
Você não precisa fazer alterações no próprio shapefile (.shp) ou em qualquer outro arquivo, pois eles não fazem referência às informações de atributo contidas no DBF. No entanto, é necessário manter a ordem dos registros exatamente igual no DBF antigo e no novo.
fonte
DBFpy deve funcionar para isso. Você já viu o exemplo nesta página:
http://dbfpy.sourceforge.net/
Verifique se o shapefile não está sendo editado por nenhum outro aplicativo, incluindo o ArcGIS, no momento, pois isso pode causar problemas através do bloqueio.
fonte
from dbfpy import dbf; db = dbf.Dbf('my.dbf'); db.addField(("FOO", "C", 15))
Encontrei uma solução usando o OGR e obrigado por ajudar de uma pergunta anterior . Aqui está um exemplo completo:
Meu problema era que eu usei
layer_defn.AddFieldDefn(new_field)
e nãolayer.CreateField(new_field)
. Muito obrigado pela ajuda e desculpe-me por não ter verificado completamente a outra pergunta semelhante.fonte