Suite

API Ogr Python : définir des valeurs nulles dans la fonctionnalité

API Ogr Python : définir des valeurs nulles dans la fonctionnalité


J'essaie de convertir les géodonnées OGR d'un pilote à un autre, comme le fait l'outil de ligne de commande ogr2ogr, mais en utilisant l'API python. Mon problème est que les valeurs NULL dans les données d'entrée sont converties en chaîne "Aucun" dans les données de sortie.

La méthode Ogr SetField :

output_feature.SetField('linetype',Aucun)

ne définit pas l'attribut 'linetype' = None (ou null) dans l'entité en sortie, comme prévu, mais "None" comme chaîne. J'ai testé cela avec le pilote PostgreSQL et GeoJson, mais j'ai probablement affecté tous les pilotes.

Exemple de code complet à partir d'ici :

outDriver = ogr.GetDriverByName("GeoJson") outDataSource = outDriver.CreateDataSource('test.geojson') outLayer = outDataSource.CreateLayer("test_layer") # Ajouter un champ de nom idField = ogr.FieldDefn("nom", ogr.OFTString ) outLayer.CreateField(idField) point = ogr.Geometry(ogr.wkbPoint) point.AddPoint(1198054.34, 648493.09) # Créer l'entité et définir les valeurs featureDefn = outLayer.GetLayerDefn() #feature 1 feature_1 = ogr.Feature(featureDefn) feature_1.SetGeometry(point) feature_1.SetField("name", 'name_1') outLayer.CreateFeature(feature_1) #feature 2, l'attribut name doit être NULL mais est enregistré comme "Aucun" (chaîne) feature_2 = ogr.Feature(featureDefn ) feature_2.SetGeometry(point) feature_2.SetField("nom", Aucun) outLayer.CreateFeature(feature_2) # Fermer DataSource outDataSource.Destroy()

J'ai eu le même problème. Ma solution était de tester si la valeur est None avant d'utiliser la méthode SetField(). Cela évite des allers-retours pour définir et désactiver la valeur.

field_value = in_feature.GetField(self.fields_name[x]) sinon field_value == None : out_feature.SetField(self.fields_name[x], in_feature.GetField(self.fields_name[x]))

Voir la vidéo: GDALOGR Installation on Windows