È 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.
Apprendimento dell'analisi geospaziale con Python di Joel Lawhead
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 )