Zastanawiałem się, czy można przeglądać zawartość pliku shapefile przy użyciu Pythona bez posiadania licencji ArcMap. Sytuacja polega na tym, że możesz tworzyć pliki shapefile z wielu różnych aplikacji, nie tylko z oprogramowania ESRI. Chciałbym utworzyć skrypt w języku Python, który sprawdza odniesienie przestrzenne, typ funkcji, nazwy atrybutów i definicje oraz zawartość pól w pliku kształtu i porównuje je z zestawem dopuszczalnych wartości. Chciałbym, aby ten skrypt działał, nawet jeśli organizacja nie ma żadnych licencji ESRI. Aby zrobić coś takiego, czy musisz użyć ArcPy, czy możesz zagłębić się w plik kształtu bez korzystania z ArcPy?
40
Odpowiedzi:
Polecam zapoznanie się z interfejsem API Python GDAL / OGR do pracy z danymi wektorowymi i rastrowymi. Najłatwiejszym sposobem na rozpoczęcie korzystania z GDAL / OGR jest dystrybucja pytona, taka jak python (x, y) , Anaconda lub OSGeo4W .
Dalsze szczegóły dotyczące korzystania z GDAL do określonych zadań:
Ponadto polecam następujący samouczek od USU, aby zacząć.
Pożyczając z powyższych przykładów, poniższy skrypt używa narzędzi FOSS do wykonywania następujących czynności:
źródło
inFeature = None
. Książka kucharska GDAL / OGR nie jest częścią ani nie jest napisana przez podstawowy zespół GDAL / OGR.Istnieje wiele modułów do odczytu plików kształtów w Pythonie, starszych niż ArcPy, spójrz na Indeks pakietów Python (PyPi): pliki kształtów . Istnieje również wiele przykładów w GIS SE (na przykład wyszukaj [Python] Fiona )
Wszyscy mogą odczytać geometrię, pola i rzuty.
Ale inne moduły, takie jak PySAL: biblioteka Python Spatial Analysis Library , Cartopy (które używają pyshp ) lub Matplotlib Basemap mogą również odczytywać pliki shapefile .
Najłatwiejszy w użyciu jest Fiona , ale jeśli znasz tylko ArcPy, użyj pyshp , ponieważ osgeo i Fiona wymagają zainstalowania biblioteki GDAL C / C ++, GeoPandas potrzebuje modułu Pandas , a PySAL jest zbyt duży (wiele, wiele innych zabiegów)
Jeśli chcesz tylko czytać zawartość pliku shapefile, nie potrzebujesz skomplikowanych rzeczy, po prostu użyj protokołu interfejsu geo (GeoJSON) również zaimplementowanego w ArcPy ( ArcPy: AsShape )
Z Fiona (jako słowniki Python):
Z pyshp (jako słowniki Python)
Z osgeo / ogr (jako słowniki Python)
Z GeoPandas (jako ramka danych Pandas)
* uwaga na geopandas Musisz używać z nim starszych wersji Fiony i GDAL, inaczej się nie zainstaluje. GDAL: 1.11.2 Fiona: 1.6.0 Geopandy: 0.1.0.dev-
W sieci istnieje wiele samouczków, a nawet książek ( Python Geospatial Development , Learning Geospatial Analysis with Python i Geoprocessing with Python , in press)
Mówiąc bardziej ogólnie, jeśli chcesz używać Pythona bez ArcPy, spójrz na Proste tematyczne mapowanie pliku kształtu za pomocą Pythona?
źródło
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
Oprócz ArcPy istnieją geoprzestrzenne biblioteki Pythona, które dają te możliwości. Oto dwa przykłady:
Biblioteka kształtów Python (pyshp)
GeoPandy
Jeśli interesują Cię inne biblioteki, ten post na temat podstawowych bibliotek geoprzestrzennych Pythona jest dobrym miejscem do obejrzenia.
źródło