Esempi di script Python per gli shapefile di geoprocessing senza usare arcpy


33

Vorrei usare uno script Python che non si basa su arcpy per fare cose come interrogare un file di forma in base agli attributi, creare un nuovo livello dalla selezione e calcolare aree di un poligono e convertire poligoni in punti.

Qualcuno ha qualche esempio di codice sull'uso di altri moduli o librerie Python? Sono in grado di farlo facilmente usando arcpy ma volevo esplorare altre opzioni.


geopandas è tuo amico per i file vettoriali. Rasterio per raster.
RutgerH,

Risposte:


54

È strano, come se la gente scoprisse improvvisamente il potere di Python (senza ArcPy che è solo un modulo Python tra gli altri), vedi ad esempio la domanda Visualizza lo shapefile in Python :

  • L'elaborazione geospaziale in Python ha una storia molto lunga, molto più antica di Arcpy (o arcgisscripting) -> non "imita" le capacità di ArcPy qui, come dice Paul, molti erano già lì prima di ArcPy.
  • il riferimento per i moduli Python è l' indice del pacchetto Python ( Pypi ) e c'è una sezione dedicata: Argomento :: Scientifico / Ingegneria :: GIS
  • puoi fare qualsiasi cosa con questi moduli ed è spesso più facile e veloce di ArcPy perché è puro Python (senza cursori ...).
  • Shapely è uno di questi moduli per l'elaborazione di geometrie geospaziali -> calcola le aree di un poligono e converte i poligoni in punti.
  • se vuoi elaborare livelli vettoriali, c'è osgeo / ogr , Fiona o Pyshp (e altri, meno usati) -> interroga un file di forma in base agli attributi, crea un nuovo livello dalla selezione, calcola le aree di un poligono, converti i poligoni in punti
  • per l'elaborazione di raster, lo standard è osgeo / gdal
  • per l'analisi spaziale, c'è Pysal
  • per il 3D, puoi usare altri moduli scientifici come numpy o scipy (algoritmi 3D, griglie, ma anche statistiche, geostatistica, 2D o 3D)
  • E non parlo di mapnik , matplotlib / basemap , Geodjango e ...

Puoi combinare tutti (Pysal con shapely, ...) e mescolarli con gli altri moduli scientifici.

Quindi, per esempi di script Python, cerca Pyshp Fiona, ogr, gdal o ben fatto in gis.stackexchange o in Internet (molti esempi, non solo in inglese).)
Uno di questi in francese (gli script e le figure sono universali!):
- Python: utilizzo di layer vettoriali e raster in una prospettiva geologica, senza software GIS
un altro in inglese:
- GIS con Python, Shapely e Fiona
e in spagnolo
- Determinazione di aree di poligoni irregolari usando le coordinate dei vertici
in gis.stackexchange
- Profilo altimetrico 10 km per lato di una linea
- Aggiornamento degli attributi tramite Pyshp
- Come creare un file di forma 3D da un raster?
- Python Script per ottenere la differenza di elevazione tra due punti
- ecc

La sceneggiatura presentata da Aaron può essere scritta più semplicemente con Fiona che utilizza solo dizionari Python:

import fiona
with fiona.open('sites.shp', 'r') as input:
    with open('hw1a.txt', 'w') as output:
       for pt in input:
           id = pt['properties']['id']
           cover = pt['properties']['cover']
           x = str(point['geometry']['coordinates'][0])
           y = str(point['geometry']['coordinates'][21])
           output.write(id + ' ' + x + ' ' + y+ ' ' + cover + '\n')

e se usi ben fatto in aggiunta:

from shapely.geometry import shape
with fiona.open('sites.shp', 'r') as input:
    with open('hw1a.txt', 'w') as output:
       for pt in input:
           id = pt['properties']['id']
           cover = pt['properties']['cover']
           x = str(shape(pt['geometry']).x)
           y = str(shape(pt['geometry']).y)
           output.write(id + ' ' + x + ' ' + y+ ' ' + cover + '\n')

Ci sono anche due libri:

Python Geospatial Development di Eric Westra.

inserisci qui la descrizione dell'immagine

Apprendimento dell'analisi geospaziale con Python di Joel Lawhead

inserisci qui la descrizione dell'immagine

Python è anche usato come linguaggio di scripting in altre applicazioni GIS come QGIS (Quantum GIS), GRASS GIS, gvSIG o OpenJump o modellatori 3D come Paraview (e anche Blender !). E puoi usare la maggior parte dei moduli geospaziali in tutte queste applicazioni (vedi Visualizzazione dei dati QGIS con Blender )


Cos'è questa roba di Python di cui parli;)
Nathan W,

Fiona sembra lanciare un errore DLL su Windows.
multigoodverse

Come hai installato Fiona? nessun problema per me
gene

19

Consiglio vivamente il sito Geoprocessing USU con Python utilizzando GIS Open Source per iniziare. Utilizzano principalmente la libreria GDAL / OGR durante gli esercizi. L'installazione di GDAL / OGR può essere un po 'una sfida, quindi questo post di blog può essere utile per te: Installazione di GDAL (e OGR) per Python su Windows . Scopri anche Alternative all'utilizzo di Arcpy su GIS.SE.

Il seguente esempio di script di geoprocessing opensource (dal sito USU) viene utilizzato per estrarre i dati degli attributi e scriverli in un file di testo:

# import modules
import ogr, os, sys

# set the working directory
os.chdir('f:/data/classes/python/data')

# open the output text file for writing
file = open('hw1a.txt', 'w')

# get the shapefile driver
driver = ogr.GetDriverByName('ESRI Shapefile')

# open the data source
datasource = driver.Open('sites.shp', 0)
if datasource is None:
  print 'Could not open file'
  sys.exit(1)

# get the data layer
layer = datasource.GetLayer()

# loop through the features in the layer
feature = layer.GetNextFeature()
while feature:

  # get the attributes
  id = feature.GetFieldAsString('id')
  cover = feature.GetFieldAsString('cover')

  # get the x,y coordinates for the point
  geom = feature.GetGeometryRef()
  x = str(geom.GetX())
  y = str(geom.GetY())

  # write info out to the text file
  file.write(id + ' ' + x + ' ' + y + ' ' + cover + '\n')

  # destroy the feature and get a new one
  feature.Destroy()
  feature = layer.GetNextFeature()

# close the data source and text file
datasource.Destroy()
file.close()

4
.Destroyè un nome di metodo fantastico: p
Jason,

5

Potresti essere interessato a GDAL / OGR .

GDAL viene utilizzato per l'elaborazione di raster mentre OGR viene utilizzato per i vettori. Entrambe sono librerie open source.

Se stai cercando di rimuovere alcune dipendenze da ArcPy, puoi imitare alcune funzionalità leggendo le informazioni su un array ed eseguendo i tuoi calcoli in puro Python.

Di recente l'ho fatto selezionando punti in un poligono, come visto qui . Utilizza l'algoritmo di ray casting per determinare se un punto si trova all'interno di un poligono, date le coordinate dei vertici del poligono.


1
si prega di includere abbastanza dell'essenza della soluzione che può essere colta e compresa prima di visitare e leggere la pagina. Col tempo quella pagina probabilmente non sarà a quell'indirizzo rendendo questa risposta non molto utile. :)
matt wilkie,

1

Non l'ho mai usato personalmente, ma ad altri in ufficio piace usare ben fatto: https://pypi.python.org/pypi/Shapely


Qualche possibilità che tu possa pubblicare alcuni codici di esempio usando ben fatto?
Sherpas,


5
A lungo termine, le sole risposte non sono utili, poiché inevitabilmente si rompono. Si prega di includere informazioni sufficienti sulla destinazione che a) la sua nuova casa può essere riscoperta e b) l'essenza della soluzione può essere colta e compresa prima di visitare e leggere la pagina.
matt wilkie,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.