¿Mapeo temático simple de shapefile usando Python?

34

Deseo visualizar datos geográficos en Python, sin usar ArcGIS / ArcPy, y hacer un mapa.

En Internet encontré cómo hacer un mapa temático usando Python :

Aquí hay un código que probé:

import shpUtils
import matplotlib.pyplot as plt

shpRecords = shpUtils.loadShapefile('C:\Users\shapefile.shp')

for i in range(0,len(shpRecords)):
    x = []
    y = []
    for j in range(0,len(shpRecords[i]['shp_data']['parts'][0]['points'])):

    tempx = float(shpRecords[i]['shp_data']['parts'][0]['points'][j]['x'])
    tempy = float(shpRecords[i]['shp_data']['parts'][0]['points'][j]['y'])
    x.append(tempx)
    y.append(tempy)
    plt.fill(x,y)

plt.axis('equal')
plt.title("Testing")
plt.show()

Sin embargo, cuando ejecuto esto, me da colores al azar.

Si quiero visualizar una determinada columna de mi shapefile, ¿cómo puedo implementar esto usando un código similar?

Esto no está muy claro en el enlace que se proporciona más arriba, donde solo analiza el uso de los colores ...

Tal vez necesitaría módulos adicionales para lograr esto, como descartes y PySAL ?

    
pregunta NYannickske 25.05.2013 - 17:13

3 respuestas

58

No conozco ArcPy, pero trabajo con shapefiles y raster en Python durante años

  1. Para procesar shapefiles en Python, hay muchos módulos como osgeo / ogr , Fiona , Pysal o Pyshp ( shpUtils es uno de ellos y no es el más usado), y otros, consulte Pypi: GIS y ejemplos en gis.stackexchange y muchos ejemplos en la Web (no solo en inglés). La mayoría de ellos son mucho más antiguos que ArcPy (o arcgisscripting) ...
  2. para procesar el ráster, puede utilizar osgeo / gdal , el estándar
  3. Para procesar geometrías geoespaciales, hay shapely
  4. Para trazar las geometrías puede usar matplotlib y posiblemente descartes ," extensión "de matplotlib para áreas, pero también muchos, muchos otros módulos, consulte Pypi: Plotting y módulos como mayavi para la representación 3D ( matplotlib también)
  5. También hay módulos como mapnik que le ofrecen directamente las posibilidades de 1) leer un shapefile y 4) trazar con el módulo Pycairo .

Después de eso, es como un SIG:

  • utiliza los módulos 1) para abrir, guardar los shapefiles y realizar los tratamientos con otros módulos como numpy o scipy, si lo desea.
  • puede usar bien para la manipulación y el análisis de los objetos geométricos (búfer, etc.).
  • puede usar matplotlib para trazar las geometrías, pero matplotlib no sabe qué quiere trazar. Es su trabajo con los módulos 1) o 3) especificar qué trazar (atributos, etc.) y cómo.
  

Si quiero visualizar una determinada columna de mi shapefile, ¿cómo puedo implementar esto en el código?

Por lo tanto, debe aprender matplotib y los otros módulos. Tienes que aprender ArcPy, es lo mismo ... (hay muchos tutoriales excelentes en la web, especialmente para matplolib, y es más fácil que ArcPy porque es Python puro).

Algunos ejemplos solo con Python

Mapageológico(archivodeformadepolígono)concoloresbasadosenunatributo

Puntos 3D (archivo de forma PointZ) con color basado en un atributo

Puntos3D(puntodearchivodeformaconzcomoatributo)ylínea3D(archivodeformaPolyLineZ)enunDEM,yenunrástersobrelasuperficiedelDEM.

Perfil topográfico con valores z y colores basados en atributos (formaciones geológicas = sección transversal) del shapefile original (polyline shapefile)

DEM(GeoTIFF)conelmóduloMayavi2

DEM (ESRI ascii grid, .asc) y Point shape (con z como atributo) con el módulo visvis

Agujeros(búfer3DdeunapolilíneaZconcoloresbasadosenunatributo(formacionesgeológicas),conunasuperficiedecuadrículacalculadaconlosmódulosnumpyymatplotlibdesdeunshapefiledepuntos(conzcomoatributo),visualizadaconelmódulo visvis

    
respondido por el gene 25.05.2013 - 18:29
14

He tenido problemas similares en los que quiero visualizar shapefiles rápidamente, y siempre he encontrado que Matplotlib es una forma bastante larga de realizar una tarea tan pequeña. En vez de eso, desarrollé el "Visualizador Geográfico Python" módulo , o GeoVis para abreviar. Actualización: v0.2.0 ahora está disponible con muchas nuevas funcionalidades.

Con él visualizar archivos de forma no podría ser más fácil:

import geovis
geovis.ViewShapefile("C:/yourshapefile.shp")

Voila, tu mapa aparece como una imagen en una ventana de Tkinter y también puedes guardar el mapa en un archivo de imagen. También es posible diseñar, colorear y agregar múltiples capas a un mapa, y en la versión más reciente también puede clasificar en función de los atributos y hacer zoom en una región en particular. En el siguiente mapa, los geovis cargaron y colorearon categóricamente todas las provincias GADM del mundo en aproximadamente 5 minutos. Puede descargar GeoVis desde aquí , donde también puedes leer más sobre cómo usarlo.

El objetivo es la instalación fácil y la facilidad de uso, por lo que GeoVis puede ser utilizado por cualquier persona que tenga Python y no necesite ningún otro módulo, ya que puede usar el Tkinter Canvas integrado como renderizador. Pero es muy recomendable que tenga u obtenga Aggdraw, PIL o PyCairo, que también se puede usar como renderizadores y son mucho más rápidos y de mayor calidad.

Backdraw es su shapefile que no debe proyectarse con un sistema de coordenadas de latitud larga, aún no maneja proyecciones ni transformaciones.

Espero que ayude.

    
respondido por el Karim Bahgat 21.02.2014 - 10:35

Lea otras preguntas en las etiquetas