Mappage thématique simple du fichier de formes en utilisant Python?

37

Je souhaite visualiser des données géographiques en Python, sans utiliser ArcGIS / ArcPy, et créer une carte.

Sur Internet, j'ai trouvé comment créer une carte thématique avec Python :

Voici du code que j'ai essayé:

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

Cependant, lorsque je lance ceci, cela me donne des couleurs aléatoires.

Si je veux visualiser une certaine colonne de mon fichier de formes, comment puis-je l'implémenter en utilisant un code similaire?

Ceci est très peu clair dans le lien fourni ci-dessus où il ne discute que de l'utilisation des couleurs ...

Est-ce que je peut - être besoin de modules supplémentaires pour ce faire , comme descartes et PySAL ?

NYannickske
la source

Réponses:

62

Je ne connais pas ArcPy, mais je travaille avec des fichiers de formes et de trames en Python depuis des années.

  1. Pour le traitement des fichiers de formes en Python, il existe de nombreux modules tels que osgeo / ogr , Fiona , Pysal ou Pyshp ( shpUtils est l’un d’eux et non le plus utilisé), et d’autres, voir Pypi: SIG et exemples sur gis.stackexchange et de nombreux exemples. le Web (pas seulement en anglais). La plupart d'entre eux sont beaucoup plus anciens qu'ArcPy (ou arcgisscripting) ...
  2. pour le traitement de la trame, vous pouvez utiliser osgeo / gdal , la norme
  3. Pour le traitement des géométries géospatiales, il est bien faite
  4. Pour tracer les géométries, vous pouvez utiliser matplotlib et éventuellement descartes , "extension" de matplotlib pour les zones, mais aussi de nombreux autres modules, voir Pypi: Tracer et des modules comme mayavi pour la représentation 3D (matplotlib également)
  5. Il existe également des modules tels que mapnik qui vous donnent directement les possibilités de 1) lire un fichier de formes et 4) de tracer avec le module Pycairo .

Après cela, c'est comme un SIG:

  • vous utilisez les modules 1) pour ouvrir, sauvegarder les fichiers de formes et effectuer les traitements avec d’autres modules tels que numpy ou scipy, si vous le souhaitez.
  • vous pouvez utiliser shapely pour manipuler et analyser les objets géométriques (tampon, etc.).
  • vous pouvez utiliser matplotlib pour tracer les géométries, mais matplotlib ne sait pas ce que vous voulez tracer. C'est votre travail avec les modules 1) ou 3) de spécifier ce qu'il faut tracer (attributs, etc.) et comment.

Si je veux visualiser une certaine colonne de mon fichier de formes, comment puis-je l'implémenter dans le code?

Donc, vous devez apprendre matplotib et les autres modules. Vous devez apprendre ArcPy, c'est pareil ... (il y a beaucoup d'excellents tutoriels sur le Web, en particulier pour matplolib, et c'est plus facile que ArcPy car c'est du pur Python).

Quelques exemples avec Python uniquement

entrez la description de l'image ici

Carte géologique (fichier de formes polygonales) avec des couleurs basées sur un attribut

entrez la description de l'image ici

Points 3D (fichier de forme PointZ) avec une couleur basée sur un attribut

entrez la description de l'image ici

Points 3D (fichier de formes Point avec attribut z) et ligne 3D (fichier de formes PolyLineZ) sur un DEM et sur une trame drapée sur la surface du DEM.

entrez la description de l'image ici

Profil topographique avec des valeurs z et des couleurs basées sur des attributs (formations géologiques = coupe transversale) du fichier de formes original (fichier de formes polyline)

entrez la description de l'image ici

DEM (GeoTIFF) avec le module Mayavi2

entrez la description de l'image ici

DEM (ESRI ascii grid, .asc) et fichiers de formes Point (avec z comme attribut) avec le module visvis

entrez la description de l'image ici

Forages (tampon 3D d'une polylineZ avec des couleurs basées sur un attribut (formations géologiques), avec une surface de grille calculée avec les modules numpy et matplotlib à partir d'un fichier de formes (avec z comme attribut), visualisé avec le module visvis

gène
la source
16

J'ai eu des problèmes similaires où je souhaitais visualiser rapidement les fichiers de formes et j'ai toujours trouvé la méthode Matplotlib assez longue pour accomplir une tâche aussi petite. Au lieu de cela, j'ai développé le module "Python Geographic Visualizer" , ou GeoVis en abrégé. Mise à jour: v0.2.0 est maintenant disponible avec de nombreuses nouvelles fonctionnalités.

Visualiser des fichiers de formes ne pourrait être plus simple:

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

Voila, votre carte apparaît en tant qu'image dans une fenêtre de Tkinter et vous pouvez également enregistrer la carte dans un fichier image. Vous pouvez également styler, colorier et ajouter plusieurs couches à une carte. Dans la version la plus récente, vous pouvez également classifier en fonction d'attributs et effectuer un zoom avant sur une région particulière. Dans la carte ci-dessous, geovis a chargé et coloré de manière catégorique toutes les provinces GADM du monde en environ 5 minutes. Vous pouvez télécharger GeoVis à partir d’ici , où vous pouvez également en savoir plus sur son utilisation.

entrez la description de l'image ici

L’objectif étant une installation aisée et facile à utiliser, GeoVis peut être utilisé par toute personne disposant de Python et ne nécessitant aucun autre module, car elle peut utiliser le canevas intégré Tkinter Canvas. Mais il est fortement recommandé de posséder ou d’obtenir Aggdraw, PIL ou PyCairo, qui peuvent également être utilisés comme moteurs de rendu et sont beaucoup plus rapides et de meilleure qualité.

Backdraw est que votre fichier de formes ne doit pas être projeté avec un système de coordonnées lat / long - il ne gère pas encore les projections ou les transformations.

Karim Bahgat
la source
14

Je suis tombé sur un certain nombre de tutoriels traitant de ce sujet que je voulais partager:

Vous pouvez également envisager d’utiliser R: Comment créer une carte choroplète attrayante dans R?

blah238
la source
1

En 2019 la façon la plus simple de faire une carte thématique d'un fichier de formes en python, est geopandas .

Un exemple tiré de la documentation: http://geopandas.org/mapping.html

import geopandas
world = geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres'))
world['gdp_per_cap'] = world.gdp_md_est / world.pop_est
world.plot(column='gdp_per_cap')
Davemfish
la source