Ejemplos de Python Script para geoprocesar archivos de forma sin usar arcpy

33

Me gustaría usar un script de Python que no se base en arcpy para hacer cosas como consultar un archivo de forma por atributos, crear una nueva capa a partir de la selección y calcular áreas de un polígono y convertir polígonos en puntos.

¿Alguien tiene algún ejemplo de código para usar otros módulos o bibliotecas de Python? Puedo hacer esto fácilmente usando arcpy pero quería explorar otras opciones.

sherpas
fuente
Geopandas es tu amigo para los archivos vectoriales. Rasterio para trama.
RutgerH

Respuestas:

54

Eso es extraño, como si la gente descubriera de repente el poder de Python (sin ArcPy, que es solo un módulo de Python entre otros), vea por ejemplo la pregunta Visualizar shapefile en Python :

  • El procesamiento geoespacial en Python tiene una historia muy larga, mucho más antigua que Arcpy (o arcgisscripting) -> no "imita" las capacidades de ArcPy aquí, como dice Paul, la mayoría ya estaban allí antes de ArcPy.
  • la referencia para los módulos de Python es el Índice de paquetes de Python ( Pypi ) y hay una sección dedicada: Tema :: Científico / Ingeniería :: SIG
  • puede hacer cualquier cosa con estos módulos y, a menudo, es más fácil y rápido que ArcPy porque es Python puro (sin cursores ...).
  • Shapely es uno de estos módulos para procesar geometrías geoespaciales -> calcular áreas de un polígono y convertir polígonos en puntos.
  • si desea procesar capas de vectores, hay osgeo / ogr , Fiona o Pyshp (y otros, menos utilizados) -> consultar un archivo de forma por atributos, crear una nueva capa a partir de la selección, calcular áreas de un polígono, convertir polígonos en puntos
  • para procesar rásteres, el estándar es osgeo / gdal
  • para el análisis espacial, hay Pysal
  • para 3D, puede usar otros módulos científicos como numpy o scipy (algoritmos 3D, cuadrículas, pero también estadísticas, geoestadística, 2D o 3D)
  • Y no hablo de mapnik , matplotlib / basemap , Geodjango y ...

Puede combinar todo (Pysal con bien proporcionado, ...) y mezclarlos con los otros módulos científicos.

Por lo tanto, para ejemplos de Python Script, busque Pyshp Fiona, ogr, gdal o shapely en gis.stackexchange o Internet (muchos ejemplos, no solo en inglés).)
Uno de ellos en francés (¡los scripts y las figuras son universales!):
- Python: uso de capas vectoriales y ráster en una perspectiva geológica, sin software SIG y
otro en inglés:
- SIG con Python, Shapely y Fiona
y en español
- Determinación de áreas de polígonos irregulares utilizando las coordenadas de los vértices
en gis.stackexchange
- Perfil de elevación 10 km a cada lado de una línea
- Actualización de atributos usando Pyshp
- ¿Cómo crear un archivo de forma 3D a partir de un ráster?
- Python Script para obtener la diferencia de elevación entre dos puntos
, etc.

El guión presentado por Aaron se puede escribir de manera más simple con Fiona que usa solo diccionarios 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')

y si usas bien además:

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')

También hay dos libros:

Desarrollo Geoespacial de Python de Eric Westra.

ingrese la descripción de la imagen aquí

Aprendizaje del análisis geoespacial con Python de Joel Lawhead

ingrese la descripción de la imagen aquí

Python también se usa como lenguaje de script en otras aplicaciones SIG como QGIS (Quantum GIS), GRASS GIS, gvSIG u OpenJump o modeladores 3D como Paraview (¡y Blender también!). Y puede usar la mayoría de los módulos geoespaciales en todas estas aplicaciones (vea Visualizar datos QGIS con Blender )

17 revoluciones
fuente
¿Qué es esto de Python de lo que hablas?)
Nathan W
Fiona parece estar arrojando un error de DLL en Windows.
multigoodverse
¿Cómo instalaste a Fiona? no hay problema para mí
gene
19

Recomiendo encarecidamente el sitio de USU Geoprocesamiento con Python utilizando Open Source GIS para comenzar. Utilizan principalmente la biblioteca GDAL / OGR a lo largo de los ejercicios. Instalar GDAL / OGR puede ser un desafío, por lo que esta entrada de blog puede ser útil para usted: Instalar GDAL (y OGR) para Python en Windows . Consulte también Alternativas al uso de Arcpy en GIS.SE.

El siguiente ejemplo de script de geoprocesamiento de código abierto (del sitio de la USU) se utiliza para extraer datos de atributos y escribirlos en un archivo de texto:

# 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()
Aaron
fuente
44
.Destroyes un nombre de método increíble: p
Jason
5

Te podría interesar GDAL / OGR .

GDAL se usa para procesar rásteres mientras que OGR se usa para vectores. Ambas son bibliotecas de código abierto.

Si está buscando eliminar alguna dependencia de ArcPy, puede imitar algunas capacidades leyendo la información en una matriz y ejecutando sus propios cálculos en Python puro.

Recientemente hice esto seleccionando puntos en un polígono, como se ve aquí . Utiliza el algoritmo de proyección de rayos para determinar si un punto se encuentra dentro de un polígono, dadas las coordenadas de los vértices del polígono.

Paul
fuente
1
incluya suficiente de la esencia de la solución que se puede comprender y comprender antes de visitar y leer la página. Con el tiempo, esa página probablemente no estará en esa dirección, lo que hace que esta respuesta no sea muy útil. :)
Matt Wilkie
1

Nunca he usado esto personalmente, pero a otros en la oficina les gusta usar bien: https://pypi.python.org/pypi/Shapely

Jason
fuente
¿Alguna posibilidad de que puedas publicar algunos códigos de muestra usando Shapely?
sherpas
55
Las respuestas de solo enlace no son útiles a largo plazo, ya que inevitablemente se rompen. Incluya suficiente información sobre el destino que a) se pueda redescubrir su nuevo hogar, yb) se pueda comprender y comprender la esencia de la solución antes de visitar y leer la página.
Matt Wilkie