Power Query Retravailler un fichier JSON avec PQ

Staple1600

XLDnaute Barbatruc
Bonjour

Pour faire suite à ma discussion : Carte choroplèthe, je cherche à manipuler un fichier *.json avec PowerQuery

J'arrive bien à faire les 1ères étapes
PowerQuery:
let
    Source = Json.Document(File.Contents("C:\Users\STAPLE\Documents\communes-france.json")),
    #"Converti en table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Column1 développé" = Table.ExpandRecordColumn(#"Converti en table", "Column1", {"geo_point_2d", "geo_shape", "year", "reg_code", "reg_name", "dep_code", "dep_name", "arrdep_code", "arrdep_name", "ze2020_code", "ze2020_name", "bv2012_code", "bv2012_name", "epci_code", "epci_name", "ept_code", "ept_name", "com_code", "com_current_code", "com_name", "com_name_upper", "com_name_lower", "com_area_code", "com_type", "ze2010_name", "ze2010_code", "com_cataeu2010_code", "com_cataeu2010_name", "com_uu2010_code", "com_uu2010_status", "com_au2010_code", "com_cateaav2020_code", "com_cateaav2020_name", "com_uu2020_code", "com_uu2020_status", "com_aav2020_code", "com_cv_code", "com_in_ctu", "com_siren_code", "com_is_mountain_area"}, {"Column1.geo_point_2d", "Column1.geo_shape", "Column1.year", "Column1.reg_code", "Column1.reg_name", "Column1.dep_code", "Column1.dep_name", "Column1.arrdep_code", "Column1.arrdep_name", "Column1.ze2020_code", "Column1.ze2020_name", "Column1.bv2012_code", "Column1.bv2012_name", "Column1.epci_code", "Column1.epci_name", "Column1.ept_code", "Column1.ept_name", "Column1.com_code", "Column1.com_current_code", "Column1.com_name", "Column1.com_name_upper", "Column1.com_name_lower", "Column1.com_area_code", "Column1.com_type", "Column1.ze2010_name", "Column1.ze2010_code", "Column1.com_cataeu2010_code", "Column1.com_cataeu2010_name", "Column1.com_uu2010_code", "Column1.com_uu2010_status", "Column1.com_au2010_code", "Column1.com_cateaav2020_code", "Column1.com_cateaav2020_name", "Column1.com_uu2020_code", "Column1.com_uu2020_status", "Column1.com_aav2020_code", "Column1.com_cv_code", "Column1.com_in_ctu", "Column1.com_siren_code", "Column1.com_is_mountain_area"}),
    #"Column1.geo_point_2d développé" = Table.ExpandRecordColumn(#"Column1 développé", "Column1.geo_point_2d", {"lon", "lat"}, {"Column1.geo_point_2d.lon", "Column1.geo_point_2d.lat"}),
    #"Column1.geo_shape développé" = Table.ExpandRecordColumn(#"Column1.geo_point_2d développé", "Column1.geo_shape", {"type", "geometry", "properties"}, {"Column1.geo_shape.type", "Column1.geo_shape.geometry", "Column1.geo_shape.properties"}),
    #"Column1.geo_shape.geometry développé" = Table.ExpandRecordColumn(#"Column1.geo_shape développé", "Column1.geo_shape.geometry", {"coordinates", "type"}, {"Column1.geo_shape.geometry.coordinates", "Column1.geo_shape.geometry.type"})
in
    #"Column1.geo_shape.geometry développé"
Mais dans le tableau structuré, j'ai plusieurs colonnes avec comme valeurs : [List]

Je n'arrive pas à trouver quelles actions je dois choisir dans le ruban pour avoir dans le tableau Excel le fichier JSON correctement "interprété".

Ci-dessous le lien pour télécharger le fichier JSON ( 3 837 Ko)
fichier JSON
 
Dernière édition:

mromain

XLDnaute Barbatruc
Bonjour à tous,

@Staple1600 :
Pour Saint-Malo, est-ce que cette carte peut t'aider ?
Malheureusement non... le fichier généré ne donne rien.

Par contre, avec la technique de @klin89, j'ai pu exporter un fichier geojson intéressant pour Saint-Malo en utilisant ce code dans le service mentionné :
Code:
[out:json][timeout:25];
area[name="Ille-et-Vilaine"]->.a;
rel(area.a)["admin_level"="8"]["boundary"="administrative"]["name"="Saint-Malo"];
out geom;
J'ai pu obtenir le fichier joint.

En retouchant la requête du post #17 (ou #18) ainsi, la commune se dessine bien à partir de cet export.
Code:
let
    fnExtractShapesCoordinates = (list as list) =>
        let
            fnExtractPointsCoordinates = (list as list) => List.Transform(list{1}{0}, each [ShapeID = list{0}, Longitude=_{0}, Latitude=_{1}]),
            shapesList = let listCount = List.Count(list) in if listCount = 1 then {{1, list}} else List.Zip({{1 .. listCount}, list}),
            shapeCoordinates = List.Combine(List.Transform(shapesList, fnExtractPointsCoordinates)),
            toTable = Table.FromRecords(shapeCoordinates),
            changeTypes = Table.TransformColumnTypes(toTable,{{"ShapeID", Int64.Type}, {"Longitude", type number}, {"Latitude", type number}})
        in
            changeTypes,
    
    PathJson = Table.FirstValue(Excel.CurrentWorkbook(){[Name="Feuil1!Rng_PathJson"]}[Content]),
    Source = Json.Document(File.Contents(PathJson)),
    RecupData = Table.FromRecords({Source[features]{0}}),
    RecupProprietes = Table.ExpandRecordColumn(RecupData, "properties", {"name", "postal_code"}, {"name", "postal_code"}),
    RecupGeometries = Table.ExpandRecordColumn(RecupProprietes, "geometry", {"coordinates"}, {"coordinates"}),
    RecupShapesCoordinates = Table.TransformColumns(RecupGeometries,{{"coordinates", fnExtractShapesCoordinates, type table}}),
    ColonnesSelectionnees = Table.SelectColumns(RecupShapesCoordinates,{"coordinates", "postal_code", "name"}),
    ShapesCoordinatesDeveloppees = Table.ExpandTableColumn(ColonnesSelectionnees, "coordinates", {"ShapeID", "Longitude", "Latitude"}, {"ShapeID", "Longitude", "Latitude"}),
    ColonnesRenommées = Table.RenameColumns(ShapesCoordinatesDeveloppees,{{"postal_code", "com_code"}, {"name", "com_name"}})
in
    ColonnesRenommées

A+
 

Pièces jointes

  • SaintMalo.zip
    27.6 KB · Affichages: 3

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, @mromain

@mromain
Dans mon projet je me cantonne à l'Ille et Vilaine
Si j'ai bien compris le fonctionnement de OSM, il y a des calques
Donc de base j'ai besoin de de fichier geojson de base
• contour du département
• contour des communes
• contour des cantons
• contour des communautés de communes

En me basant sur ton example, avec ceci, j'obtiens les communes
[out:json][timeout:25];
area[name="Ille-et-Vilaine"]->.a;
rel(area.a)["admin_level"="8"]["boundary"="administrative"]["admin_level"="8"];
out geom;

Et dans Excel, on a besoin que de trois colonnes, non ?
ShapeIDLongitudeLatitude

En chargeant de PQ tel ou tel fichier JSON, on peut tenter d'avoir un code générique, non ?

PS: Je n'arrive avec overpass turbo à avoir le contour des communes sans les marqueurs

NB: test OK pour ST Malo avec ta requête PQ modifiée.
 

mromain

XLDnaute Barbatruc
Bonjour à tous,

Vous trouverez ci-joint une nouvelle version qui semble fonctionner quel que soit le fichier geojson généré à partir du service mentionné par @klin89.

Cette version utilise PowerPoint afin d'avoir une seule forme par commune (même celles avec plusieurs contours). La solution ayant été développée avec Office 2019, il faudra peut-être remettre la référence VBA de PowerPoint sur les versions antérieures d'Office.

La limite viendra de la taille du fichier geojson (par rapport au nombre de lignes gérées par Excel).
Pour exemple, l'export de l'Ille-et-Vilaine proposé dans le post #32 représente :
  • un fichier de 30 Mo
  • 333 communes
  • 384 267 coordonnées (et donc lignes Excel)
  • quasiment 5 minutes pour la génération des formes

@Staple1600
Et dans Excel, on a besoin que de trois colonnes, non ?
Il en faut au moins 4 :
  • le code identifiant de la commune (code INSEE)
  • le ShapeID
  • la latitude et la longitude
Dans les faits, j'en ai rajouté une cinquième : le nom de la commune pour nommer les formes.

A+

Edit (11/04/2023) :
Correction du calcul de "conversion Latitude/Longitude en Top/Left" dans la méthode CalculatePointsCoordinates de la classe Cls_Cities.
 

Pièces jointes

  • DrawGeojson.xlsm
    61.2 KB · Affichages: 3
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir mromain

C'est du code de haut vol :eek:👏
(Va me falloir du temps pour l'appréhender)

Sinon, je viens de procéder unilatéralement à redécoupage de mon département ! ;)
Du coup, je ne sais plus où j'habite ;)
Ouch.PNG

PS: Je ne sais plus où j'ai téléchargé le jeu de donnés qui produit ce nouveau département 35.
 

Staple1600

XLDnaute Barbatruc
Re

Avec ceci, je retrouve le contour "normal" du département
Code:
[out:json][timeout:25];
area[name="Ille-et-Vilaine"]->.a;
rel(area.a)["admin_level"="6"]["boundary"="administrative"]["admin_level"="6"];
// print results
out body;
>;
out skel qt;
Voir fichier joint

NB: Il y a quelque anomalies vers Saint-Malo.
 

Pièces jointes

  • 24323_b_export.zip
    277.1 KB · Affichages: 1

p56

XLDnaute Occasionnel
Bonjour à tous,
Peut être hors sujet mais si ça peut aider Staple, voici un jeu de cartes standardisées du 35 : dept, arrondissements, cantons, epci, communes et iris. En voici un exemple :
Capture d’écran 2023-03-24 130937.jpg

Un clic sur une shape indique sa dénomination et son n° (insee pour l'essentiel)
Méthode de lecture des json et méthode de dessin sont largement décrites sur mon site.
A noter : ces cartes sont toutes <500ko
Json issus de OpenDataSoft
P.

Edit : Heum, un mauvais copier/coller trop rapide entraine un mauvais zoom. Il convient d'inverser les valeurs de Margx et Margy dans la procédure Zoom (dans l'ensemble de ces fichiers du 35)
 

Pièces jointes

  • 35_arrdst.xlsm
    283.8 KB · Affichages: 2
  • 35_Cantons.xlsm
    468.2 KB · Affichages: 3
  • 35_communes.xlsm
    478.8 KB · Affichages: 3
  • 35_dept.xlsm
    258.2 KB · Affichages: 2
  • 35_epci.xlsm
    354.2 KB · Affichages: 2
  • 35-Iris.xlsm
    428.1 KB · Affichages: 2
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil

Merci p56 pour tes fichiers

Par curiosité et pour ma gouverne, je continue à explorer PQ
(pas évident ce langage M)

En prenant un des liens JSON utilisés par p56
J'obtiens un tableau sans erreur
PowerQuery:
let
 Source = Json.Document(Web.Contents("https://data.opendatasoft.com/api/explore/v2.1/catalog/datasets/canton_iev@rennes-metropole/exports/json?lang=fr&timezone=Europe%2FBerlin")),
    #"Converti en table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Column1 développé" = Table.ExpandRecordColumn(#"Converti en table", "Column1", {"geo_point_2d", "geo_shape", "gml_id", "code_canton", "nom_canton"}, {"Column1.geo_point_2d", "Column1.geo_shape", "Column1.gml_id", "Column1.code_canton", "Column1.nom_canton"}),
    #"Column1.geo_shape développé" = Table.ExpandRecordColumn(#"Column1 développé", "Column1.geo_shape", {"type", "geometry"}, {"Column1.geo_shape.type", "Column1.geo_shape.geometry"}),
    #"Column1.geo_shape.geometry développé" = Table.ExpandRecordColumn(#"Column1.geo_shape développé", "Column1.geo_shape.geometry", {"coordinates", "type"}, {"Column1.geo_shape.geometry.coordinates", "Column1.geo_shape.geometry.type"}),
    #"Column1.geo_shape.geometry.coordinates développé" = Table.ExpandListColumn(#"Column1.geo_shape.geometry développé", "Column1.geo_shape.geometry.coordinates"),
    #"Column1.geo_point_2d développé" = Table.ExpandRecordColumn(#"Column1.geo_shape.geometry.coordinates développé", "Column1.geo_point_2d", {"lon", "lat"}, {"Column1.geo_point_2d.lon", "Column1.geo_point_2d.lat"}),
    #"Column1.geo_shape.geometry.coordinates développé1" = Table.ExpandListColumn(#"Column1.geo_point_2d développé", "Column1.geo_shape.geometry.coordinates"),
    #"Column1.geo_shape.geometry.coordinates développé2" = Table.ExpandListColumn(#"Column1.geo_shape.geometry.coordinates développé1", "Column1.geo_shape.geometry.coordinates"),
    #"Valeurs extraites" = Table.TransformColumns(#"Column1.geo_shape.geometry.coordinates développé2", {"Column1.geo_shape.geometry.coordinates", each Text.Combine(List.Transform(_, Text.From), " "), type text}),
    #"Fractionner la colonne par délimiteur" = Table.SplitColumn(#"Valeurs extraites", "Column1.geo_shape.geometry.coordinates", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Column1.geo_shape.geometry.coordinates.1", "Column1.geo_shape.geometry.coordinates.2"}),
    #"Type modifié" = Table.TransformColumnTypes(#"Fractionner la colonne par délimiteur",{{"Column1.geo_shape.geometry.coordinates.1", type number}, {"Column1.geo_shape.geometry.coordinates.2", type number}})
in
    #"Type modifié"
Evidemment si je change la source ca ne fonctionne plus à cause des noms de colonnes.

Je voudrais dans un premier temps piloter PQ manuellement
(avant de mixer PQ et VBA comme superbement fait mromain)
 
Dernière édition:

p56

XLDnaute Occasionnel
Bonjour à tous, Bonjour JM,

Alors pour continuer sur ma lancée, voici un fichier tout simplet à placer dans le même dossier que celui avec les fichiers "35_cartes" divers proposés plus haut.
Dans le fichier une liste déroulante, au choix d'un item la carte du fichier choisi se colle dans la feuille.
Ca permet d'afficher facilement et simplement la carte du 35 à divers granulations sans json, sans Pq ou autres méthodes.
Démo_.gif

Qu'en penses-tu?
P.

Edit : ajout d'un zip contenant toutes les cartes proposées plus haut (retravaillées pour diminuer le volume) + Fichier de choix
 

Pièces jointes

  • 35_au_choix.xlsm
    35.6 KB · Affichages: 3
  • 35_au_choix.zip
    925.1 KB · Affichages: 1
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour p56

@p56
C'est effectivement une solution qui a l'avantage d'être simple.
(Je la garde au chaud)

Ce qui titille actuellement mes neurones c'est PQ et les fichiers JSON.
Je continue donc mes expérimentations.

@Aux afficionados de PQ ;)
Je rappelle l'idée que j'essaie de suivre
Sur plusieurs sites liés à OSM, on peut personnaliser des cartes existantes
C'est donc ce que j'essaie de faire adapter à mes besoins des cartes (toutes relatives au département 3)
Une fois ces modifications faites, exporter le fichier JSON (ou utiliser l'URL) et l'exploiter dans PQ.

Actuellement selon les fichiers JSON, j'ai des erreurs
• Exemple
Avec deux jeux de fichiers issus de data.opendatasoft
Les requêtes sont quasi-identiques
Mais si j'intervertis les URL alors les requêtes sont en erreur.
Code:
let
    Source =Json.Document(Web.Contents("https://data.opendatasoft.com/api/explore/v2.1/catalog/datasets/canton_iev@rennes-metropole/exports/json?lang=fr&timezone=Europe%2FBerlin")),
    Source1 = Source{0},
    geo_shape = Source1[geo_shape],
    geometry = geo_shape[geometry],
    coordinates = geometry[coordinates],
    coordinates1 = coordinates{0},
    #"Converti en table" = Table.FromList(coordinates1, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Column1 développé" = Table.ExpandListColumn(#"Converti en table", "Column1"),
    #"Valeurs extraites" = Table.TransformColumns(#"Column1 développé", {"Column1", each Text.Combine(List.Transform(_, Text.From), " "), type text}),
    #"Fractionner la colonne par délimiteur" = Table.SplitColumn(#"Valeurs extraites", "Column1", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Column1.1", "Column1.2"}),
    #"Type modifié" = Table.TransformColumnTypes(#"Fractionner la colonne par délimiteur",{{"Column1.1", type number}, {"Column1.2", type number}})
in
    #"Type modifié"


let
    Source =Json.Document(Web.Contents("https://data.opendatasoft.com/api/explore/v2.1/catalog/datasets/geo-communes-departement35-fd@keolis-rennes/exports/json?lang=fr&timezone=Europe%2FBerlin")),
    Source1 = Source{0},
    geo_shape = Source1[geo_shape],
    geometry = geo_shape[geometry],
    coordinates = geometry[coordinates],
    #"Converti en table" = Table.FromList(coordinates, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Column1 développé" = Table.ExpandListColumn(#"Converti en table", "Column1"),
    #"Valeurs extraites" = Table.TransformColumns(#"Column1 développé", {"Column1", each Text.Combine(List.Transform(_, Text.From), " "), type text}),
    #"Fractionner la colonne par délimiteur" = Table.SplitColumn(#"Valeurs extraites", "Column1", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Column1.1", "Column1.2"}),
    #"Type modifié" = Table.TransformColumnTypes(#"Fractionner la colonne par délimiteur",{{"Column1.1", type number}, {"Column1.2", type number}})
in
    #"Type modifié"
 

mromain

XLDnaute Barbatruc
Bonjour Staple, bonjour le forum,

Je n'ai pas encore eu le temps de regarder ton fichier du post #36.

Je reviens juste sur ton dernier souci concernant les 2 requêtes quasiment identiques.
Une solution qui marche pour les deux URLs est la suivante :
Code:
let
    Source =Json.Document(Web.Contents("https://data.opendatasoft.com/api/explore/v2.1/catalog/datasets/canton_iev@rennes-metropole/exports/json?lang=fr&timezone=Europe%2FBerlin")),
    Source1 = Source{0},
    geo_shape = Source1[geo_shape],
    geometry = geo_shape[geometry],
    coordinates = let res = geometry[coordinates] in if List.Count(res{0})>1 then res else res{0},
    #"Converti en table" = Table.FromList(coordinates, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Column1 développé" = Table.ExpandListColumn(#"Converti en table", "Column1"),
    #"Valeurs extraites" = Table.TransformColumns(#"Column1 développé", {"Column1", each Text.Combine(List.Transform(_, Text.From), " "), type text}),
    #"Fractionner la colonne par délimiteur" = Table.SplitColumn(#"Valeurs extraites", "Column1", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Column1.1", "Column1.2"}),
    #"Type modifié" = Table.TransformColumnTypes(#"Fractionner la colonne par délimiteur",{{"Column1.1", type number}, {"Column1.2", type number}})
in
    #"Type modifié"

Après, je ne connais pas assez le sujet pour te dire que ça marchera sur toutes les URLs...

Bonne journée
 

Staple1600

XLDnaute Barbatruc
Bonjour mromain

Merci pour ta correction.

J'ai vraiment du mal à appréhender ce langage M

Ici, je ne comprends pas pour je dois développer 3 fois
PowerQuery:
let
    Source =Json.Document(Web.Contents("https://data.opendatasoft.com/api/explore/v2.1/catalog/datasets/canton_iev@rennes-metropole/exports/json?lang=fr&timezone=Europe%2FBerlin")),
    #"Converti en table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Column1 développé" = Table.ExpandRecordColumn(#"Converti en table", "Column1", {"geo_point_2d", "geo_shape", "gml_id", "code_canton", "nom_canton"}, {"geo_point_2d", "geo_shape", "gml_id", "code_canton", "nom_canton"}),
    #"geo_point_2d développé" = Table.ExpandRecordColumn(#"Column1 développé", "geo_point_2d", {"lon", "lat"}, {"lon", "lat"}),
    #"geo_shape développé" = Table.ExpandRecordColumn(#"geo_point_2d développé", "geo_shape", {"geometry"}, {"geometry"}),
    #"geometry développé" = Table.ExpandRecordColumn(#"geo_shape développé", "geometry", {"coordinates", "type"}, {"coordinates", "type"}),
  #"coordinates développé" = Table.ExpandListColumn(#"geometry développé", "coordinates"),
#"coordinates développé1" = Table.ExpandListColumn(#"coordinates développé", "coordinates"),
#"coordinates développé2" = Table.ExpandListColumn(#"coordinates développé1", "coordinates"),
    #"Valeurs extraites" = Table.TransformColumns(#"coordinates développé2", {"coordinates", each Text.Combine(List.Transform(_, Text.From), " "), type text}),
    #"Fractionner la colonne par délimiteur" = Table.SplitColumn(#"Valeurs extraites", "coordinates", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"coordinates.1", "coordinates.2"}),
    #"Type modifié" = Table.TransformColumnTypes(#"Fractionner la colonne par délimiteur",{{"coordinates.1", type number}, {"coordinates.2", type number}})
in
    #"Type modifié"
Si je ne le fais pas je n'obtiens pas les coordonnées en colonne coordinates.1 et coordinates.2
Je n'arrive pas non plus à comprendre dans celle circonstance on peut utiliser cette commande
PQ_JSON.png
 
Dernière édition:

mromain

XLDnaute Barbatruc
Rebonjour Staple,

J'ai vraiment du mal à appréhender ce langage M
Pour ce point, je ne peux que te conseiller la looongue série Power Query M Primer de Ben Gribaudo dont la première partie est disponible ici.
Pour moi, ça a été mon vrai point d'entrée.

Ici, je ne comprends pas pour je dois développer 3 fois
Ce point-là vient plutôt de la structure du fichier json que tu attaques...

Je n'arrive pas non plus à comprendre dans celle circonstance on peut utiliser cette commande
N'ayant jamais utilisé cette commande, je ne pourrai pas te conseiller sur ce point...

Bonne lecture ;)
 

Staple1600

XLDnaute Barbatruc
Re

@mromain
Merci pour le lien
(Et egde fait de drôle de choses quand on lui demande de traduire ces pages
Je vais voir si G. translate s'en sort mieux ;)

PS: Sur mon PC avec Excel 2019, j'ai installé Power BI Desktop (outil gratuit) qui lui sait combiner les PDF.
Alors qu'Excel 2019 ne sait pas !!!
Va comprendre Charles! ;)
 

klin89

XLDnaute Accro
Re,:)

Je suis avec intérêt toutes vos interventions et je dois avouer que je suis un peu largué.
Mais, je reviens sur la question posée par Staple1600 au post #32
Je n'arrive pas avec overpass turbo à avoir le contour des communes sans les marqueurs

CSS:
[out:json][timeout:25];
// Recherche de la relation correspondante à la ville de Rennes
area[name="Rennes"]->.a;
rel(area.a)["admin_level"="8"]["boundary"="administrative"]["name"="Rennes"];
// Extraction des limites de la relation
out geom;
{{style:
  node {
    width: 0;
    opacity:0;
    fill-opacity:0;
  }
}}

Voilà ce que j'ai trouvé pour cacher les marqueurs, c'est bien des points que l'on retrouve au centre de chaque forme dont tu parles ? Visible au posts #27 et #29
Rennes35.jpg


Dans le code généré par la requête overpass turbo, on retrouve cette partie ,

CSS:
{
      "type": "node",
      "ref": 26686526,
      "role": "admin_centre",
      "lat": 48.1113387,
      "lon": -1.6800198
    },
qui définit le marqueur, et il n'y a qu'un seul noeud ici.
Je commence à piger 😊
Lors de l'importation du fichier JSON dans Power Query, il n'y a plus qu'à supprimer cette ligne d'enregistrement et garder tout le reste si j'ai bien compris.

En fait, il ne faut garder que ces blocs générés dans le fichier JSON.
CSS:
{
      "type": "way",
      "ref": 460056390,
      "role": "outer",
      "geometry": [
         { "lat": 48.1208185, "lon": -1.7243622 },
         { "lat": 48.1205694, "lon": -1.7244482 },
         { "lat": 48.1204794, "lon": -1.7244559 },
         { "lat": 48.1203777, "lon": -1.7244818 },
         { "lat": 48.1200399, "lon": -1.7245381 },
         { "lat": 48.1198051, "lon": -1.7245668 },
         { "lat": 48.1193657, "lon": -1.7245797 },
         { "lat": 48.1193075, "lon": -1.7245880 },
         { "lat": 48.1191503, "lon": -1.7246183 },
         { "lat": 48.1189982, "lon": -1.7246610 },
         { "lat": 48.1188635, "lon": -1.7247115 },
         { "lat": 48.1187351, "lon": -1.7247759 },
         { "lat": 48.1183170, "lon": -1.7250315 },
         { "lat": 48.1178962, "lon": -1.7253305 },
         { "lat": 48.1170186, "lon": -1.7259087 }
      ]
    },

klin89
 
Dernière édition: