Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#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

 

Pied de page des forums

Powered by FluxBB