Vous cherchez des outils / modules / compléments Python pour SIG?


31

Avec ArcGIS 10, Python est devenu le langage de script de facto pour ESRI. Tout en leader des logiciels open source comme QGIS, GeoServer, PostGIS prend tous en charge Python. Il est donc devenu important de connaître / apprendre Python pour les développeurs SIG ainsi que pour les utilisateurs.

Quelqu'un peut-il dresser une liste de ces outils / modules / compléments en Python qui sont cruciaux dans les SIG?


10
Je pense que cette question est trop large et devrait être limitée aux packages python qui peuvent être utilisés dans n'importe quel SIG avec support Python.
underdark

4
ArcPy est-il un vrai module Python?
Mapperz

2
@Mapperz c'est en fait un package de site. Le prédécesseur arcgisscriptingest un module. Voir help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//…
blah238

3
@underdark - Je pense qu'avoir une belle question large peut être utile. Dans ce cas, il fournit une ressource centrale que les moteurs de recherche trouveront lorsque quelqu'un commencera à googler pour quel ensemble d'outils python utiliser.
GIS-Jonathan

2
+1 pour trop large. Les réponses les plus pertinentes à la question seront trouvées à la fin d'une [tag:python] + [tag:my-software]recherche et triées via les onglets votes et faq . Les réponses ici ne peuvent jamais espérer correspondre à cela.
matt wilkie

Réponses:


38
  • NumPy : NumPy est le package fondamental pour le calcul scientifique avec Python. Il contient entre autres:

    • un puissant objet tableau N-dimensionnel
    • fonctions sophistiquées (diffusion)
    • outils d'intégration de code C / C ++ et Fortran
    • algèbre linéaire utile, transformée de Fourier et capacités de nombres aléatoires

    Outre ses utilisations scientifiques évidentes, NumPy peut également être utilisé comme un conteneur multidimensionnel efficace de données génériques. Des types de données arbitraires peuvent être définis. Cela permet à NumPy de s'intégrer de manière transparente et rapide à une grande variété de bases de données.

  • SciPy : SciPy (prononcé "Sigh Pie") est un logiciel open source pour les mathématiques, les sciences et l'ingénierie. C'est aussi le nom d'une conférence très populaire sur la programmation scientifique avec Python. La bibliothèque SciPy dépend de NumPy, qui fournit une manipulation de tableau N dimensionnelle pratique et rapide. La bibliothèque SciPy est conçue pour fonctionner avec les baies NumPy et fournit de nombreuses routines numériques conviviales et efficaces telles que des routines pour l'intégration et l'optimisation numériques. Ensemble, ils fonctionnent sur tous les systèmes d'exploitation courants, sont rapides à installer et gratuits. NumPy et SciPy sont faciles à utiliser, mais suffisamment puissants pour être utilisés par certains des plus grands scientifiques et ingénieurs du monde. Si vous devez manipuler des nombres sur un ordinateur et afficher ou publier les résultats, essayez SciPy!

  • Shapely : Shapely est un package Python sous licence BSD pour la manipulation et l'analyse d'objets géométriques planaires. Il est basé sur les bibliothèques GEOS (le moteur de PostGIS) et JTS (à partir desquelles GEOS est porté) largement déployées. Cette dépendance C est échangée contre la possibilité de s'exécuter à une vitesse fulgurante. Shapely ne s'intéresse pas aux formats de données ou aux systèmes de coordonnées, mais peut être facilement intégré aux packages qui le sont.

  • Liaisons GDAL Python : ce package et ces extensions Python sont un certain nombre d'outils pour programmer et manipuler la bibliothèque d' abstraction de données géospatiales GDAL .

  • GeoDjango: GeoDjango se veut un framework Web géographique de classe mondiale. Son objectif est de simplifier au maximum la création d'applications Web SIG et d'exploiter la puissance des données spatialisées.
  • PyProj
  • SpatialPython : Dépôt github bien documenté.

J'ajouterais la bibliothèque geopandas.org activement développée pour quiconque regarde cette ancienne réponse!
clifgray

11

Pour répondre à ma propre question, je viens de trouver ce module Pythons. Bien que je ne l'ait pas encore utilisé, il semble passionnant.

NetworkX est un progiciel en langage Python pour la création, la manipulation et l'étude de la structure, de la dynamique et des fonctions de réseaux complexes.

Et

rtree - index spatial pour Python SIG


10

allez à Sujet :: Scientifique / Ingénierie :: SIG et vous avez tous les modules Python pour SIG (pour travailler avec des fichiers de formes, des rasters, KML, GML, géocodage GPX, etc.)

Les plus importants ont déjà été cités, mais je recommande également Fiona " Fiona fournit une interface Python minimale et simple à la bibliothèque d'accès aux géodonnées la plus fiable de la communauté SIG open source et s'intègre facilement avec d'autres packages SIG Python tels que pyproj, Rtree et Shapely. "

et pour la mise en réseau avec des fichiers de formes ou la classe d'entités Esri avec le module Networkx Géotraitement de réseau géométrique : " Pour autant que je sache , ESRI n'a pas publié d'outils de géotraitement pour leur réseau géométrique " ou Alternatives à pgRouting ou Python: comment transformer un fichier de formes (ou classe d'entités ESRI) dans un réseau topologique (graphique )

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

J'utilise Shapely, Fiona, GDAL / OGR, Pyshp, Networkx et autres dans QGIS et GRASS GIS sans problème (et avec matplotlib ou descartes pour un graphique interactif). Ils ont souvent des algorithmes plus faciles à utiliser pour le traitement.

Certains de ces modules peuvent également être utilisés dans ArcPy avec des problèmes car ArcPy utilise la version 1.3 de Numpy, obsolète (maintenant la version 1.6.1 ...) et vous ne pouvez pas le mettre à jour sans casser le module ArcPy.



7

Ajout à la liste:

PySAL - "bibliothèque open source multiplateforme de fonctions d'analyse spatiale"

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

pyshp - un lecteur et écrivain de fichiers de formes python en python pur

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

Modifier:

Quelqu'un m'a montré ce module aujourd'hui, peut intéresser les gens. Exemples de données vectorielles et raster SIG pour l'utilisation de python:

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


5

J'utilise et recommande ReportLab Toolkit , la bibliothèque PDF Open Source pour créer par programmation des documents au format PDF. Comme annoncé sur ses pages, il s'agit d'une solution robuste, flexible et éprouvée dans le temps. C'est un logiciel gratuit et open-source écrit en Python mais sa syntaxe n'est pas la plus simple que j'ai jamais traitée :-)

Dans ArcGIS 10.0, il est inestimable pour écrire des rapports au format PDF à partir de classes d'entités et de tables, bien que certaines de ces fonctionnalités puissent ne pas être nécessaires à la version 10.1 lorsque l'accès aux rapports PDF à partir du rédacteur de rapports ArcGIS devient disponible pour ArcPy.


Utilisez-vous le pdfgenpackage ou platypus? J'ai besoin de générer des rapports avec des jpegs et du texte, rien de trop sophistiqué.
Chad Cooper

J'utilise l'ornithorynque - et je n'ai eu que des exigences pour produire des tableaux avec du texte dans leurs cellules (pas d'images).
PolyGeo


2

Il y a encore plus:

GRASS - Vous pouvez appeler GRASS avec Python.

FMEObjects - Si vous avez une licence FME, ils ont aussi un module python qui vous permet d'appeler certains de leurs transformateurs sympas.


Vraiment? À ma connaissance, FMEObjects n'a pas de liaisons Python pour appeler des transformateurs. Je souhaite vraiment que ce soit le cas. Si vous savez que c'est le cas et que vous savez comment accéder à cette API, veuillez nous en informer. Cela me faciliterait beaucoup la vie à l'heure actuelle.
celticflute

1

La distribution de packages Enthought a beaucoup de packages répertoriés ci-dessus regroupés dans une plate-forme cohérente. Ils se sont même assurés qu'il peut être facilement configuré pour fonctionner à partir de l'invite python d'ArcGIS et qu'il arcpypeut être utilisé à partir de son invite python. Nous utilisons cela dans nos bureaux. Depuis notre wiki interne:

La meilleure façon de connecter ArcGIS et EPD consiste à installer les deux et à les lier à l'aide de fichiers .pth afin que Python sys.path inclue les autres modules du système. Le fichier "zzEPD.pth" permet à ArcGIS Python d'accéder aux modules EPD et "zzArcGIS.pth" permet à EPD Python d'accéder à arcpy. (Le préfixe "zz" est là pour garantir que les packages "étrangers" sont les derniers dans sys.path pour éviter les conflits potentiels pour les modules qui existent dans les deux installations Python.) Si vous rencontrez des conflits ArcGIS, renommez simplement le fichier en. txt ("zzEPD.pth.txt") et redémarrez ArcGIS et ArcGIS ne "verra" plus les modules EPD (ils ne seront pas dans sys.path).

* zzEPD.pth - place dans le dossier \ Python27 \ Desktop10.1 \ lib \ site-packages *

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

* zzArcGIS.pth - place dans le dossier \ 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

1

Non spécifique au SIG, mais pour le débogage de python, IPDBc'est incroyable. https://pypi.python.org/pypi/ipdb

Pour l'utiliser, placez simplement les lignes suivantes dans votre code:

import ipdb
ipdb.set_trace()

Ensuite, dans votre shell Python, vous pouvez déposer dans n'importe quel morceau de code et interagir avec toutes les variables à cet état actuel.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.