我有一些地理界限,我have a GeoJSON endpoint for.
我也有一些变量存储在一个单独的GeoJSON endpoint,它没有坐标,但确实有一个变量,我想稍后在主题上为地图设置样式,稍后用D3.这是每周更新.
我在尝试加入的两个响应中都有一个名为lga_name(本地政府区域名称)的公共ID.似乎有很多关于如何将GeoJSON与CSV连接的示例,而不是GeoJSON与GeoJSON的连接.
我试图尝试put together an app,但仍然在努力加入.
// 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",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];
});
谁能给我一些帮助让我感动的指示?只是想了解更多关于D3和Javascript的信息.
>功能的名称(lga_name)是一个json中的所有大写,而不是另一个
>功能名称包括字符/短语,例如一个json中的“(”或“ – ”或“更大”但不包括另一个.
>有一些功能有坐标但没有其他json的入口(Unincorporated Vic)
>在持有非地理属性的json中似乎存在重复值(您已声明要加入,而不是对任何数据求和,我的解决方案仅使用属性json中的一个条目(没有坐标的那个))
你可以实现你的目标(使用第二个json来获取“我想稍后用主题设计地图的变量”),不同的方法,我将在这里使用两种不同的方法:
>创建一个包含所有功能和属性的有效geojson
>从坐标json创建要素,并使用名称作为公共标识符,基于属性json对它们进行样式设置.
使用d3.map(),我们可以轻松添加非地理json的属性:
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;
});
现在你有一个geojson,它具有一个json的属性,以及另一个的坐标.
由于您的标识符不是标准化的,我创建了一个函数来标准化两个文件之间的名称以使数据工作.我还添加了一个检查,以确保给定功能的属性存在.见这block.
使用基于其他JSON的一个JSON和样式创建功能
您不需要实际加入数据来实现样式.使用d3.map()可以在样式设置时查找每个要素的属性.例如,您可以使用以下样式填充:
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);
})
同样,由于您的标识符不是标准化的,我创建了一个函数来标准化两个文件之间的名称.如上所述,还检查非地理json中是否存在特征(因此用于样式的属性).见block.