¿Busca herramientas / módulos / complementos de Python para SIG?

31

Con ArcGIS 10, Python se ha convertido en el lenguaje de script de facto para ESRI. Mientras lidera software de código abierto como QGIS, GeoServer, PostGIS es compatible con Python. Por lo tanto, se hizo importante conocer / aprender Python para los desarrolladores de SIG y para los usuarios.

¿Alguien puede hacer una lista de tales herramientas / módulos / complementos en Python que son cruciales en SIG?

thelastray
fuente
10
Creo que esta pregunta es demasiado amplia y debería limitarse a los paquetes de Python que se pueden usar en cualquier SIG con soporte de Python.
oscuro
44
¿ArcPy es un verdadero módulo de Python?
Mapperz
2
@Mapperz en realidad es un paquete de sitio. El predecesor arcgisscriptinges un módulo. Ver help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//…
blah238
3
@underdark: creo que tener una buena pregunta amplia puede ser útil. En este caso, proporciona un recurso central que los motores de búsqueda encontrarán cuando alguien comience a buscar en Google qué conjunto de herramientas de Python usar.
GIS-Jonathan
2
+1 para demasiado amplio. Las respuestas más relevantes a la pregunta se encontrarán al final de una [tag:python] + [tag:my-software]búsqueda y se ordenarán a través de las pestañas de votos y preguntas frecuentes. Las respuestas aquí nunca pueden esperar igualar eso.
Matt wilkie

Respuestas:

38
  • NumPy : NumPy es el paquete fundamental para la computación científica con Python. Contiene entre otras cosas:

    • un poderoso objeto de matriz N-dimensional
    • funciones sofisticadas (de transmisión)
    • herramientas para integrar código C / C ++ y Fortran
    • Álgebra lineal útil, transformada de Fourier y capacidades de números aleatorios

    Además de sus usos científicos obvios, NumPy también se puede usar como un contenedor eficiente multidimensional de datos genéricos. Se pueden definir tipos de datos arbitrarios. Esto permite que NumPy se integre sin problemas y rápidamente con una amplia variedad de bases de datos.

  • SciPy : SciPy (pronunciado "Sigh Pie") es un software de código abierto para matemáticas, ciencias e ingeniería. También es el nombre de una conferencia muy popular sobre programación científica con Python. La biblioteca SciPy depende de NumPy, que proporciona una manipulación de matriz N-dimensional conveniente y rápida. La biblioteca SciPy está diseñada para funcionar con matrices NumPy y proporciona muchas rutinas numéricas fáciles de usar y eficientes, como rutinas para la integración y optimización numéricas. Juntos, se ejecutan en todos los sistemas operativos populares, se instalan rápidamente y son gratuitos. NumPy y SciPy son fáciles de usar, pero lo suficientemente potentes como para depender de algunos de los principales científicos e ingenieros del mundo. Si necesita manipular números en una computadora y mostrar o publicar los resultados, ¡pruebe SciPy!

  • Shapely : Shapely es un paquete Python con licencia BSD para la manipulación y el análisis de objetos geométricos planos. Se basa en las bibliotecas GEOS (el motor de PostGIS) y JTS (desde las cuales se transfiere GEOS), ampliamente implementadas. Esta dependencia de C se comercializa por la capacidad de ejecutarse con una velocidad increíble. Shapely no se preocupa por los formatos de datos o los sistemas de coordenadas, pero puede integrarse fácilmente con los paquetes que sí lo están.

  • Enlaces de Python de GDAL : este paquete y extensiones de Python son una serie de herramientas para programar y manipular la Biblioteca de abstracción de datos geoespaciales de GDAL .

  • GeoDjango: GeoDjango pretende ser un marco web geográfico de clase mundial. Su objetivo es facilitar lo más posible la creación de aplicaciones web SIG y aprovechar el poder de los datos habilitados espacialmente.
  • PyProj
  • SpatialPython : repositorio de github bien documentado.
blah238
fuente
¡ Agregaría la biblioteca geopandas.org desarrollada activamente para cualquiera que esté mirando esta respuesta anterior!
clifgray
11

Para responder a mi propia pregunta, acabo de encontrar este módulo de Pythons. Aunque todavía no lo he usado, parece emocionante.

NetworkX es un paquete de software de lenguaje Python para la creación, manipulación y estudio de la estructura, dinámica y funciones de redes complejas.

Y

rtree - índice espacial para Python GIS

thelastray
fuente
10

vaya a Tema :: Científico / Ingeniería :: SIG y tenga todos los módulos de Python para SIG (para trabajar con shapefiles, rásteres, KML, GML, geocodificación GPX, etc.)

Ya se han citado los más importantes, pero también recomiendo a Fiona " Fiona proporciona una interfaz Python mínima y sin complicaciones para la biblioteca de acceso a geodatos más confiable de la comunidad GIS de código abierto y se integra fácilmente con otros paquetes Python GIS como pyproj, Rtree y Shapely " .

y para redes con shapefiles o Esri Feature Class con módulo Networkx Geoprocesamiento de red geométrica : " Por lo que puedo decir, ESRI no ha lanzado ninguna herramienta de geoprocesamiento para su red geométrica " o Alternativas a pgRouting o Python: cómo transformar un shapefile (o clase de entidad ESRI) en una red topológica (gráfico) (en francés)

import networkx as nx
G = nx.read_shp('pointshapefile.shp')
print(G.nodes())
# result [(1.0, 2.0), (3.0, 2.0), (0.0, 0.0), (3.0, 1.0), (4.0, 4.0), (2.0, 1.0), (2.0, 4.0), (1.0, 3.0), (2.0, 3.0), (1.0, 4.0), (4.0, 3.0), (4.0, 2.0), (3.0, 4.0), (1.0, 1.0)]
print(G.edges())
# result [((1.0, 2.0), (1.0, 1.0)), ((3.0, 2.0), (2.0, 1.0)), ((3.0, 1.0), (2.0, 1.0)), ((4.0, 4.0), (3.0, 4.0)), ((2.0, 1.0), (1.0, 1.0)), ((2.0, 4.0), (2.0, 3.0)), ((1.0, 3.0), (1.0, 2.0)), ((2.0, 3.0), (1.0, 2.0)), ((1.0, 4.0), (1.0, 3.0)), ((4.0, 3.0), (4.0, 2.0)), ((4.0, 2.0), (3.0, 2.0)), ((3.0, 4.0), (2.0, 3.0)), ((1.0, 1.0), (0.0, 0.0))]

# shortest path
print(nx.astar_path(H,(1.0, 4.0),(4.0, 2.0),dist))
# result [(1.0, 4.0), (1.0, 3.0), (1.0, 2.0), (2.0, 3.0), (3.0, 2.0), (4.0, 2.0)]

# and so with all the algorithms of Networkx module
# you can also export the results in shapefile format

Utilizo Shapely, Fiona, GDAL / OGR, Pyshp, Networkx y otros en QGIS y GRASS GIS sin problema (y con matplotlib o descartes para gráficos interactivos). A menudo tienen algoritmos más fáciles de usar para el tratamiento.

Algunos de estos módulos también se pueden usar en ArcPy con problemas porque ArcPy usa la versión 1.3 de Numpy, obsoleta (ahora versión 1.6.1 ...) y no puede actualizarla sin romper el módulo ArcPy.

7 revoluciones
fuente
7

Agregando a la lista:

PySAL - "biblioteca multiplataforma de código abierto de funciones de análisis espacial"

disponible en: http://code.google.com/p/pysal/

pyshp: un lector y escritor de archivos de forma de Python en Python puro

disponible en: http://code.google.com/p/pyshp/

Editar:

Alguien me mostró este módulo hoy, puede ser de algún interés para las personas. Muestra de datos de trama y vector SIG para uso en python:

gisdata - http://pypi.python.org/pypi/gisdata/0.3.3

Zero Qualms
fuente
5

Utilizo y recomiendo ReportLab Toolkit , la biblioteca PDF de código abierto para crear documentos mediante programación en formato PDF. Como se anuncia en sus páginas, es una solución robusta, flexible, probada en el tiempo y sólida en la industria. Es un software gratuito de código abierto escrito en Python, pero su sintaxis no es la más fácil con la que he tratado :-)

En ArcGIS 10.0 es invaluable para escribir informes en formato PDF desde clases de entidad y tablas, aunque parte de esta funcionalidad puede no ser tan necesaria en 10.1 cuando el acceso a informes PDF desde el escritor de informes ArcGIS esté disponible para ArcPy.

PolyGeo
fuente
¿Usas el pdfgenpaquete o platypus? Necesito generar informes con jpegs y texto, nada demasiado elegante.
Chad Cooper
Utilizo ornitorrinco, y solo he tenido requisitos para generar tablas con texto en sus celdas (sin imágenes).
PolyGeo
4

En el mundo de Django:

  • formatos vectoriales (para dividir nuestro geojson como geodjango no lo admite de forma nativa);
  • Geraldo (para informes, usa ReportLab);
George Silva
fuente
2

Aún hay más:

GRASS - Puedes llamar a GRASS con Python.

FMEObjects : si tiene una licencia FME, también tienen un módulo de Python que le permite llamar a algunos de sus geniales transformadores.

GIS-Jonathan
fuente
De Verdad? FMEObjects, que yo sepa, no tiene enlaces de Python para llamar a transformadores. Realmente desearía que lo hiciera. Si sabe que lo hace y sabe cómo acceder a esa API, háganoslo saber. Haría mi vida mucho más fácil en este momento.
celticflute
1

La distribución de paquetes Enthought tiene muchos de los paquetes enumerados anteriormente agrupados en una plataforma cohesiva. Incluso se han asegurado de que se pueda configurar fácilmente para que funcione desde el indicador de Python de ArcGIS y que arcpyse pueda usar desde el indicador de Python. Usamos esto en nuestras oficinas. De nuestra wiki interna:

La mejor manera de conectar ArcGIS y EPD es instalar ambos y vincularlos utilizando archivos .pth para que Python sys.path incluya los módulos del otro sistema. El archivo "zzEPD.pth" le permite a ArcGIS Python acceder a los módulos EPD, y "zzArcGIS.pth" le permite a EPD Python acceder a arcpy. (El prefijo "zz" está ahí para garantizar que los paquetes "foráneos" sean los últimos en sys.path para evitar conflictos potenciales para los módulos que existen en ambas instalaciones de Python). Si se encuentra con conflictos de ArcGIS, simplemente cambie el nombre del archivo. txt ("zzEPD.pth.txt") y reinicie ArcGIS y ArcGIS ya no "verá" los módulos EPD (no estarán en sys.path).

* zzEPD.pth: colocar en la carpeta \ Python27 \ Desktop10.1 \ lib \ site-packages *

# zzEPD.pth 
# Path to Enthought modules
C:\Python27\epd32\lib\site-packages

* zzArcGIS.pth: colocar en la carpeta \ Python27 \ epd32 \ lib \ site-packages *

# zzArcGIS.pth 
# copy of \Python27\Desktop10.1\lib\site-packages\ArcGIS.pth
C:\ArcGIS\Desktop10.1\bin
C:\ArcGIS\Desktop10.1\arcpy
C:\ArcGIS\Desktop10.1\ArcToolbox\Scripts
Roland
fuente
1

No es específico para SIG, pero para depurar Python, IPDBes sorprendente. https://pypi.python.org/pypi/ipdb

Para usarlo, simplemente coloque las siguientes líneas en su código:

import ipdb
ipdb.set_trace()

Luego, en su shell de Python, puede colocar cualquier código e interactuar con todas las variables en ese estado actual.

revs djq
fuente