将 GeoJSON 加入另一个 GeoJSON
Joining GeoJSON to another GeoJSON
我有一些地理边界 have a GeoJSON endpoint for。
我还有一些变量存储在一个单独的 GeoJSON endpoint 中,它没有坐标,但确实有我想稍后使用 D3 对地图进行主题样式设置的变量。这是每周更新。
两个响应中有一个共同的 ID,称为 lga_name(地方政府区域名称),我正在尝试加入。似乎有很多关于如何将 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", 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];
});
任何人都可以给我一些指导来帮助我移动吗?只是想了解更多关于 D3 和 Javascript 的信息。
您的数据质量问题会引起一些麻烦:
- 特征的名称 (lga_name) 在一个 json 中全部大写,但另一个
- 功能名称包括 characters/phrases,例如“(”或“-”或 "Greater " 一个 json 但另一个不包括。
- 有些地图项有坐标但在其他地图项中没有条目 json(维克未合并)
- json 中似乎有重复值持有非地理属性(您已经声明要加入,而不是对任何数据求和,我的解决方案仅使用属性 [=58= 中的一个条目](没有坐标的那个))
您可以通过不同的方式实现您的目标(使用第二个 json 获得 "the variable that I want to later thematically style a map"),我将在这里使用两种不同的方法:
- 创建一个有效的地理位置json,其中包含您的所有功能和属性
- 根据坐标 json 创建特征,并根据属性 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.
我有一些地理边界 have a GeoJSON endpoint for。
我还有一些变量存储在一个单独的 GeoJSON endpoint 中,它没有坐标,但确实有我想稍后使用 D3 对地图进行主题样式设置的变量。这是每周更新。
两个响应中有一个共同的 ID,称为 lga_name(地方政府区域名称),我正在尝试加入。似乎有很多关于如何将 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", 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];
});
任何人都可以给我一些指导来帮助我移动吗?只是想了解更多关于 D3 和 Javascript 的信息。
您的数据质量问题会引起一些麻烦:
- 特征的名称 (lga_name) 在一个 json 中全部大写,但另一个
- 功能名称包括 characters/phrases,例如“(”或“-”或 "Greater " 一个 json 但另一个不包括。
- 有些地图项有坐标但在其他地图项中没有条目 json(维克未合并)
- json 中似乎有重复值持有非地理属性(您已经声明要加入,而不是对任何数据求和,我的解决方案仅使用属性 [=58= 中的一个条目](没有坐标的那个))
您可以通过不同的方式实现您的目标(使用第二个 json 获得 "the variable that I want to later thematically style a map"),我将在这里使用两种不同的方法:
- 创建一个有效的地理位置json,其中包含您的所有功能和属性
- 根据坐标 json 创建特征,并根据属性 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.