Gostaria de saber se é possível olhar para o conteúdo de um shapefile usando Python sem ter uma licença do ArcMap. A situação é que você pode criar shapefiles a partir de muitos aplicativos diferentes, não apenas do software ESRI. Eu gostaria de criar um script Python que verifique a referência espacial, o tipo de recurso, os nomes e definições de atributos e o conteúdo dos campos em um shapefile e os compare a um conjunto de valores aceitáveis. Eu gostaria que esse script funcionasse mesmo se a organização não tiver nenhuma licença ESRI. Para fazer algo assim, você precisa usar o ArcPy ou pode cavar em um shapefile sem usar o ArcPy?
40
Respostas:
Eu recomendaria familiarizar-se com a API Python GDAL / OGR para trabalhar com dados vetoriais e rasterizados. A maneira mais fácil de começar a usar o GDAL / OGR é através de uma distribuição python como python (x, y) , Anaconda ou OSGeo4W .
Mais detalhes sobre o uso do GDAL para suas tarefas específicas:
Além disso, eu recomendaria o seguinte tutorial da USU para você começar.
Tomando emprestado os exemplos acima, o script a seguir usa as ferramentas do FOSS para executar as seguintes ações:
fonte
inFeature = None
. O livro de receitas GDAL / OGR não faz parte ou foi escrito pela equipe principal do GDAL / OGR.Existem muitos módulos para ler shapefiles no Python, mais antigos que o ArcPy, consulte o Python Package Index (PyPi): shapefiles . Também existem muitos exemplos no GIS SE (procure por [Python] Fiona , por exemplo)
Todos podem ler a geometria, os campos e as projeções.
Mas outros módulos como o PySAL: a Biblioteca de Análise Espacial do Python , Cartopy (que usa pyshp ) ou o Matplotlib Basemap também podem ler shapefiles, entre outras coisas.
O mais fácil de usar é o Fiona , mas se você conhece apenas o ArcPy, use o pyshp , porque o osgeo e o Fiona exigem a instalação da biblioteca GDAL C / C ++, o GeoPandas precisa do módulo Pandas e o PySAL é muito grande (muitos, muitos outros tratamentos)
Se você deseja apenas ler o conteúdo de um shapefile, não precisa de coisas complexas, basta usar o protocolo de interface geográfica (GeoJSON) também implementado no ArcPy ( ArcPy: AsShape )
Com Fiona (como dicionários Python):
Com pyshp (como dicionários Python)
Com osgeo / ogr (como dicionários Python)
Com o GeoPandas (como dataframe do Pandas)
* observação sobre geopandas Você deve usar versões mais antigas do Fiona e GDAL com ele ou ele não será instalado. GDAL: 1.11.2 Fiona: 1.6.0 Geopandas: 0.1.0.dev-
Existem muitos tutoriais na Web e até livros ( Desenvolvimento Geoespacial de Python , Aprendendo Análise Geoespacial com Python e Geoprocessamento com Python , no prelo)
De maneira mais geral, se você deseja usar o Python sem o ArcPy, veja o mapeamento temático simples do shapefile usando o Python?
fonte
The kinds of data in GIS are roughly divided into rasters representing continuous scalar fields (land surface temperature or elevation, for example) and vectors representing discrete entities like roads and administrative boundaries. Fiona is concerned exclusively with the latter
Além do ArcPy, existem bibliotecas geoespaciais de Python que fornecerão essas habilidades. Aqui estão dois exemplos:
A Biblioteca de Shapefile do Python (pyshp)
GeoPandas
Se você estiver interessado em outras bibliotecas, este post sobre bibliotecas geoespaciais essenciais do Python é um bom lugar para procurar.
fonte