Pages: 1
- Sujet précédent - QGIS 3: pyqgis - transformer une chaine geojson en vector layer - Sujet suivant
#1 Wed 24 March 2021 19:10
- nico-29
- Participant assidu
- Lieu: Brest
- Date d'inscription: 2 Jun 2006
- Messages: 185
QGIS 3: pyqgis - transformer une chaine geojson en vector layer
Bonjour,
J'ai une chaine qui définit un geojson, de la forme :
Code:
{"type": "FeatureCollection", "features": [{"type": "Feature", "properties": {"NameKey": "5476", "code": "code1", "FOID": "1705794684060"}, "geometry": {"type": "Point", "coordinates": [-4.612, 48.0738]}}, {"type": "Feature", .....}]}
Je voudrais via pyqgis en faire un QgsVectorlayer. Comment faire, pour avoir la geometrie, mais aussi les attributs?
Idem pour un geojson de type MultiLinestring, et de type MultiPolygon?
Merci, Nico
Hors ligne
#2 Thu 25 March 2021 09:34
- nico-29
- Participant assidu
- Lieu: Brest
- Date d'inscription: 2 Jun 2006
- Messages: 185
Re: QGIS 3: pyqgis - transformer une chaine geojson en vector layer
La réponse:
Code:
fcString = json.dumps(mon_geojson) codec = QTextCodec.codecForName("UTF-8") fields = QgsJsonUtils.stringToFields(fcString, codec) feats = QgsJsonUtils.stringToFeatureList(fcString, fields, codec) vl = QgsVectorLayer('Point', mon_layer, "memory") dp = vl.dataProvider() for f in fields.names(): dp.addAttributes( [ QgsField(f, QVariant.String)]) vl.updateFields() dp.addFeatures( feats ) dp.addAttributes(fields) vl.updateExtents()
Hors ligne
#3 Fri 26 March 2021 08:03
- antonio.andrade
- Participant occasionnel
- Date d'inscription: 9 Feb 2021
- Messages: 17
Re: QGIS 3: pyqgis - transformer une chaine geojson en vector layer
Bonjour,
Merci pour ce partage. L'itération sur la collection de champs (QgsField) n'est pas nécessaire. Une version simplifiée du code exécutable dans la console Python de QGIS est :
Code:
import json mon_geojson = { "type": "FeatureCollection", "features": [ { "type": "Feature", "properties": { "NameKey": 5476, "code": "code1", "FOID": 1705794684060, "result": 12.34 }, "geometry": { "type": "Point", "coordinates": [-4.612, 48.0738] } } ] } mon_layer = "Couche point" fcString = json.dumps(mon_geojson) codec = QTextCodec.codecForName("UTF-8") fields = QgsJsonUtils.stringToFields(fcString, codec) feats = QgsJsonUtils.stringToFeatureList(fcString, fields, codec) vl = QgsVectorLayer('Point', mon_layer, "memory") dp = vl.dataProvider() dp.addAttributes(fields) vl.updateFields() dp.addFeatures(feats) vl.updateExtents() QgsProject.instance().addMapLayer(vl)
Hors ligne
Pages: 1
- Sujet précédent - QGIS 3: pyqgis - transformer une chaine geojson en vector layer - Sujet suivant