6 votes

Joindre GeoJSON à un autre GeoJSON

J'ai des limites géographiques que je ont un point de terminaison GeoJSON pour .

J'ai aussi des variables qui sont stockées dans un fichier séparé. Point de terminaison GeoJSON qui n'a pas de coordonnées, mais qui a la variable avec laquelle je veux plus tard donner un style thématique à une carte avec D3. Ceci est mis à jour chaque semaine.

Il y a un identifiant commun dans les deux réponses appelé lga_name (Local Government Area Name) que j'essaie de joindre. Il semble y avoir beaucoup d'exemples sur la façon de joindre GeoJSON avec un CSV, mais pas GeoJSON avec GeoJSON.

J'ai essayé d'essayer de mettre en place une application mais j'ai encore du mal à faire la jonction.

// Load LGAs from ArcGIS Online (The GeoJSON with geoms)
d3.json("the url to the Geoms", function(error, data) {

// Load Crash Stats from ArcGIS Online (the total persons involved, summarised down to LGA names)
d3.json("the url to the table", function(error, data2) {

        var lga = data.features;
        var crashStats = data2.features;

        // Not working
        var joined =  lga.forEach(function(item) {
            item.properties.LGA_NAME = crashStats[item.properties.lga_name];
        });

Quelqu'un peut-il me donner quelques conseils pour m'aider à avancer ? J'essaie juste d'en apprendre un peu plus sur D3 et le Javascript en général.

4voto

Andrew Reid Points 16844

Vous avez des problèmes de qualité des données qui vont vous causer des soucis :

  1. Les noms (lga_name) des caractéristiques sont en majuscules dans un json, mais pas dans l'autre.
  2. Les noms des caractéristiques comprennent des caractères/phrases tels que "(" ou "-" ou "Greater" dans un json mais pas dans l'autre.
  3. Il y a des éléments qui ont des coordonnées mais pas d'entrée dans l'autre json (Unincorporated Vic).
  4. Il semble qu'il y ait des valeurs en double dans le fichier json contenant des propriétés non géographiques (vous avez indiqué que vous vouliez faire une jointure, pas une somme de données, ma solution n'utilise qu'une seule entrée du fichier json des propriétés (celle sans coordonnées)).

Vous pouvez atteindre votre objectif (utiliser le deuxième json pour obtenir "la variable avec laquelle je veux ensuite donner un style thématique à une carte") de différentes manières, je vais utiliser deux méthodes différentes ici :

  1. Créez un geojson valide qui contient toutes vos caractéristiques et propriétés.
  2. Créez les caractéristiques à partir des coordonnées json, et donnez-leur un style basé sur les propriétés json en utilisant le nom comme identifiant commun.

Créez un geojson valide qui contient toutes vos caractéristiques et propriétés.

Utilisation de d3.map() nous pouvons ajouter les propriétés du json non-géographique facilement :

var lookup = d3.map(data.features, function(d) { return d.properties.lga_name; });

geographic.features.forEach(function(d) {
  d.properties = lookup.get(d.properties.LGA_NAME).properties;
});

Maintenant vous avez un geojson qui a les propriétés d'un json, et les coordonnées de l'autre.

Comme vos identifiants ne sont pas normalisés, j'ai créé une fonction pour normaliser les noms entre les deux fichiers afin que les données fonctionnent. J'ai également ajouté une vérification pour s'assurer que les propriétés existent pour une caractéristique donnée. Voir ceci bloc .

Créer des fonctionnalités avec un JSON et un style basé sur l'autre JSON

Il n'est pas nécessaire de joindre les données pour obtenir ce style. Utilisation de d3.map() vous pouvez consulter les propriétés de chaque fonctionnalité lors de l'élaboration du style. Par exemple, vous pouvez styliser fill avec :

var lookup = d3.map(data.features, function(d) { return d.properties.lga_name; });

regions.attr("fill",function(d) { 
    return color(lookup.get(d.properties.LGA_NAME).properties.total_pers); 
    })

Encore une fois, puisque vos identifiants ne sont pas normalisés, j'ai créé une fonction pour normaliser les noms entre les deux fichiers. Comme ci-dessus, il y a aussi une vérification pour voir s'il y a une caractéristique dans le json non géographique (et donc des propriétés à utiliser avec le style). Voir ceci bloc .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X