Vous avez des problèmes de qualité des données qui vont vous causer des soucis :
- Les noms (lga_name) des caractéristiques sont en majuscules dans un json, mais pas dans l'autre.
- Les noms des caractéristiques comprennent des caractères/phrases tels que "(" ou "-" ou "Greater" dans un json mais pas dans l'autre.
- Il y a des éléments qui ont des coordonnées mais pas d'entrée dans l'autre json (Unincorporated Vic).
- 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 :
- Créez un geojson valide qui contient toutes vos caractéristiques et propriétés.
- 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 .