Je me demandais si quelqu'un avait une certaine expérience dans l'obtention de données d'altitude à partir d'un raster sans utiliser ArcGIS , mais plutôt obtenir les informations sous forme de python list
ou dict
?
J'obtiens mes données XY sous forme de liste de tuples:
xy34 =[perp_obj[j].CalcPnts(float(i.dist), orientation) for j in range (len(perp_obj))]
Je voudrais parcourir la liste ou la passer à une fonction ou à une méthode de classe pour obtenir l'élévation correspondante pour les paires xy.
J'ai fait quelques recherches sur le sujet et l' API gdal semble prometteuse. Quelqu'un peut-il me conseiller sur la façon de procéder, les pièges, un exemple de code?
GDAL n'est pas une option car je ne peux pas modifier la variable de chemin d'accès système sur la machine sur laquelle je travaille!
Quelqu'un connaît-il une approche différente?
Réponses:
Voici une manière plus programmatique d'utiliser GDAL que la réponse de @ Aragon. Je ne l'ai pas testé, mais c'est surtout le code de plaque de chaudière qui a fonctionné pour moi dans le passé. Il s'appuie sur les liaisons Numpy et GDAL, mais c'est tout.
la source
mapToPixel()
etpixelToMap()
sont le bit important, tant que vous pouvez créer un tableau numpy (ou un tableau Python normal, mais ils ne sont généralement pas aussi efficaces pour ce genre de chose), et obtenir le cadre de délimitation géographique du tableau.gt
dans l'exemple) est fausse. Une matrice affine telle qu'utilisée dans CGAL (voir: gdal.org/gdal_datamodel.html ) est généralement inversible (sinon vous avez des valeurs d'échelle funky en cours). Donc, là où nous avons,g = p.A
nous pouvons également fairep = g.A^-1
Numpy.linalg est un peu lourd pour nos besoins - nous pouvons tout réduire à deux équations simples.Consultez ma réponse ici ... et lisez ici pour quelques informations. Les informations suivantes proviennent de Geotips:
Avec gdallocationinfo , nous pouvons interroger l'élévation en un point:
La sortie de la commande ci-dessus a la forme:
Cela signifie que la valeur d'élévation à la géolocalisation fournie est 1418.
la source
Voir par exemple ce code basé sur GDAL (et Python, aucun numpy nécessaire): https://github.com/geometalab/retrieve-height-service
la source
Le code python fourni extrait les données de valeur d'une cellule raster sur la base de coordonnées x, y données. Il s'agit d'une version légèrement modifiée d'un exemple de cette excellente source . Il est basé sur
GDAL
etnumpy
qui ne fait pas partie de la distribution standard de python. Merci à @Mike Toews d'avoir signalé les fichiers binaires non officiels de Windows pour les extensions Python pour rendre l'installation et l'utilisation rapides et faciles.la source