Suite

Comment lire/écrire une FeatureCollection depuis/vers un fichier json ?

Comment lire/écrire une FeatureCollection depuis/vers un fichier json ?


J'essaie de lire dans une FeatureCollection json (geojson 1.3.1) Python (2.7), ajoutez quelques propriétés et réécrivez-le dans un fichier json (ou une chaîne).

Je peux lire le fichier et modifier les propriétés, mais je me retrouve avec 2 objets FeatureCollection imbriqués :

{ "type": "FeatureCollection", "features": { "type": "FeatureCollection", "features": [ { "geometry": { "type": "Polygon", "coordinates": [ [ ] ] } , "type": "Feature", "properties": { "gval": 1.0, "hectares": 0.218681933167, "xid": 0, "id": 1.0, "area": ​​2186.81933167 } } ] } }

Et je pense avoir compris que je créais ma FeatureCollection de manière incorrecte :

path=r'd:	emp	est.json' with open(path) as data_file: data = json.load(data_file) print data feature_collection = FeatureCollection(data) print feature_collection

Lefeature_collectionse termine par des entités imbriquées, ce qui explique probablement pourquoi le fichier geojson.dumps résultant a la FeatureCollection imbriquée
{"caractéristiques": {"caractéristiques": [{"géométrie":

Je peux penser à un certain nombre de façons de le pirater, mais quelle est la bonne façon de créer cette FeatureCollection ? Modifier les attributs des fonctionnalités, puis les réécrire dans un fichier ?

Contenu du fichier test.json (moins les valeurs de coordonnées) :

{ "type": "FeatureCollection", "features": [ { "geometry": { "type": "Polygon", "coordinates": [ ] }, "type": "Feature", "properties": { " area": ​​2186.81933167, "id": 1.0, "xid": 0, "gval": 1.0 } } ] }

Version de geojson :

Metadata-Version : 2.0 Nom : geojson Version : 1.3.1 Résumé : Python bindings et utilitaires pour GeoJSON Home-page : https://github.com/frewsxcv/python-geojson Auteur : Corey Farwell Auteur-email : [email protected] org Licence : BSD Emplacement : c:python27arcgis10.2libsite-packages Nécessite : setuptools

Quel est votreFeatureCollectionobjet? Est-ce une classe personnalisée que vous avez créée ou à partir d'un package python open source ? Les objets JSON pour la collection de fonctionnalités deviennent des dictionnaires python afin qu'ils puissent être modifiés facilement.

Par exemple, si vous vouliez changer legvalvaleur du champ, vous pouvez parcourir les fonctionnalités comme ceci :

for feature in data['features']['features'] : # modifiez l'attribut gval feature['properties']['gval'] = 3.5 # Vous pouvez également accéder à la première entité par index feature1 = data['features' ]['caractéristiques'][0]

Pour enregistrer vos modifications dans json, vous pouvez simplement appeler json.dump() pour les enregistrer dans un fichier .json.


Voici un exemple d'édition aller-retour qui n'utilise pas la bibliothèque geojson.

importer os, json avec open(os.environ['HOME']+'/Desktop/f.json', 'r') en tant que data_file: data = json.load(data_file) print data['features'][0] ['properties']['gval'] data['features'][0]['properties']['gval'] = 2.2 print data['features'][0]['properties']['gval' ] outfile = open(os.environ['HOME']+'/Desktop/fnew.json', 'w+') outfile.write(json.dumps(data))

Et voici le fichier JSON de test (f.json)

{ "features": [ { "geometry": { "coordinates": [ [] ], "type": "Polygon" }, "properties": { "area": ​​2186.81933167, "gval": 2.2, "hectares" : 0.218681933167, "id": 1.0, "xid": 0 }, "type": "Feature" } ], "type": "FeatureCollection" }

les sorties:

bash : 1,0 bash : 2,2

J'ai accepté la réponse non-geojson, mais voici ce qui a fonctionné pour moi avec geojson FeatureCollection :

import sys from geojson import Feature, Point, FeatureCollection, Polygon import json import geojson from pprint import pprint #print(sys.version) path=r'd:	emp	est.json' with open(path,'r') as data_file: data = json.load(data_file) feature_collection = FeatureCollection(data['features']) print feature_collection