Maison  >  Article  >  développement back-end  >  tutoriel python gdal : lire et écrire des données vectorielles avec ogr

tutoriel python gdal : lire et écrire des données vectorielles avec ogr

黄舟
黄舟original
2016-12-24 15:59:553544parcourir

Pourquoi utiliser l'open source ?

Avantages

1. Gratuit, adapté aux particuliers et aux petites entreprises

2. Outils de développement puissants, plus faciles à trouver des bugs

3. , Windows et Linux peuvent être utilisés

4.

Inconvénients

1. Pas de géoprocesseur intégré

2. Peu de gens l'utilisent

Module RS/GIS open source

. 1. Bibliothèque vectorielle OGR : lecture et écriture de données vectorielles simples, fait partie de GDAL

2 Bibliothèque d'abstraction de données géospatiales GDAL :

a) Lecture et écriture de données raster

. b) ArcGIS est également développé sur la base de GDAL

c) Bibliothèque C, mais vous pouvez utiliser python pour appeler

modules associés

1. , pour les données Raster est particulièrement important

2 NumPy : la prochaine génération de Numeric

3 Une bibliothèque SIG plus puissante http://www.gispython.org/

Importer la bibliothèque :

import ogr

ou :

depuis osgeo import ogr

La méthode universelle est :

essayez :

depuis osgeo import ogr

sauf :

import ogr

Pour lire un certain type de données, vous devez d'abord charger le pilote de données, c'est-à-dire initialiser un objet, lui faire "connaître" une certaine structure de données.

import ogr

driver = ogr.GetDriverByName('ESRI Shapefile')

La méthode open() du pilote de pilote de données renvoie un objet source de données

open(, )

où update est 0 pour la lecture seule et 1 pour l'écriture

Par exemple :

à partir de l'importation osgeo ogr

driver = ogr.GetDriverByName('ESRI Shapefile')

filename = 'C:/Users/gongwei/Documents/My eBooks/python_and_sage/GDAL python/test/ospy_data1/sites. shp'

dataSource = driver.Open(filename,0)

si dataSource est Aucun :

print 'impossible d'ouvrir'

sys.exit (1)

imprimer 'terminé !'

Notez que le nom de fichier doit être un chemin absolu !

Comme des chemins absolus doivent être utilisés, afin de simplifier le code, os.chdir() est souvent utilisé

Lire la couche de données

layer = dataSource.GetLayer( 0)

Généralement, les fichiers de formes ESRI sont remplis avec 0. S'ils ne sont pas remplis, la valeur par défaut est 0.

Regardez combien de points il y a dans cette couche de données ?

n = layer.GetFeatureCount()

imprimer 'feature count:', n

Lire les limites supérieure, inférieure, gauche et droite

extend = layer.GetExtent( )

print 'extent:', extend

print 'ul:', extend[0], extend[3]

print 'lr :', extend[1 ], extend[2]

Lire une certaine fonctionnalité d'élément (enfin aller droit au but), ce qui est lu ici est un point

feat = layer.GetFeature( 41)

fid = feat.GetField('id')

print fid

feat = layer.GetFeature(0)

fid = feat. GetField('id') #should be a different id

print fid

De plus, vous pouvez lire les fonctionnalités dans l'ordre et parcourir toutes les fonctionnalités

feat = layer. GetNextFeature() #Read Next

while feat:

feat = layer.GetNextFeature()

later.ResetReading() #Reset

Extraire la géométrie de la fonctionnalité

geom = feat.GetGeometryRef()

geom.GetX()

geom.GetY()

imprimer geom.

Libérer la mémoire

feature.Destroy()

Fermer la source de données, ce qui équivaut à fermer le fichier en fonctionnement du système de fichiers

dataSource.Destroy()

Parlons après avoir lu ceci Comment écrire

Créer un nouveau fichier

driver.CreateDataSource()

Mais ce fichier ne peut pas déjà exister , sinon une erreur se produira

Créer un nouveau calque

dataSource.CreateLayer(,CreateLayer(, geom_type=, [srs])

Par exemple :

ds2 = driver.CreateDataSource('test.shp')

layer2 = ds2.CreateLayer('test', geom_type=ogr.wkbPoint)

Pour supprimer un fichier shp

driver.DeleteDataSource('test.shp')

Pour ajouter un nouveau champ, il ne peut être ajouté que dans la couche, et il ne peut pas y avoir de données

Si le champ ajouté est une chaîne, définissez également la largeur

fieldDefn = ogr.FieldDefn('id', ogr.OFTString)

fieldDefn.SetWidth(4)

layer.CreateField(fieldDefn)

Pour ajouter une nouvelle fonctionnalité, vous devez d'abord terminer l'étape précédente et ajouter tous les champs

Lire ensuite le type de fonctionnalité correspondant dans le couche et créez la fonctionnalité

featureDefn = layer.GetLayerDefn()

feature = ogr.Feature(featureDefn)

Définir la géométrie

feature.SetGeometry( point)

Définir la valeur d'un champ

feature.SetField('id', 23)

Écrire la fonctionnalité dans la couche

layer.CreateFeature (fonctionnalité)

Ce qui précède est le tutoriel python gdal : utiliser ogr pour lire et écrire des données vectorielles. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn