将GeoJSON加入另一个GeoJSON

Sim*_*mon 5 javascript esri geospatial geojson d3.js

我有一些地理边界,我有一个GeoJSON端点.

我还有一些变量存储在一个单独的GeoJSON端点上,该端点没有坐标,但确实有一个变量,我想稍后在主题上为地图设置样式,稍后再使用D3.这是每周更新.

我在尝试加入的两个响应中都有一个名为lga_name(本地政府区域名称)的公共ID.似乎有很多关于如何将GeoJSON与CSV连接的示例,而不是GeoJSON与GeoJSON的连接.

我试图整理一个应用程序,但仍然在努力加入.

// 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];
        });
Run Code Online (Sandbox Code Playgroud)

谁能给我一些帮助让我感动的指示?只是想了解更多关于D3和Javascript的信息.

And*_*eid 4

您存在数据质量问题,这会导致一些麻烦:

  1. 功能名称 (lga_name) 在一个 json 中全部大写,但在另一个 json 中则不然
  2. 功能名称在一个 json 中包含字符/短语,例如“(”或“-”或“Greater”,但在另一个 json 中则不包含这些字符/短语。
  3. 有些功能有坐标,但在其他 json 中没有条目(Unincorporated Vic)
  4. json 中似乎存在包含非地理属性的重复值(您已经声明要加入,而不是对任何数据求和,我的解决方案仅使用属性 json 中的一个条目(没有坐标的条目))

您可以通过不同的方式实现您的目标(使用第二个 json 来获取“我想要稍后以主题方式设置地图样式的变量”),我将在这里使用两种不同的方法:

  1. 创建一个有效的 geojson 来保存您的所有功能和属性
  2. 从坐标 json 创建要素,并根据属性 json 使用名称作为公共标识符来设置它们的样式。

创建一个有效的 geojson 来保存您的所有功能和属性

使用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;
});
Run Code Online (Sandbox Code Playgroud)

现在您有了一个 geojson,它具有一个 json 的属性和另一个 json 的坐标。

由于您的标识符未标准化,因此我创建了一个函数来标准化两个文件之间的名称以使数据正常工作。我还添加了一项检查以确保给定功能存在属性。看到这个

使用一种 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); 
    })
Run Code Online (Sandbox Code Playgroud)

同样,由于您的标识符没有标准化,我创建了一个函数来标准化两个文件之间的名称。如上所述,还检查非地理 json 中是否存在某个功能(以及用于样式设置的属性)。看到这个