微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 将GeoJSON加入另一个GeoJSON

我有一些地理界限,我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对它们进行样式设置.

创建一个包含所有功能属性的有效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;
});

现在你有一个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.

原文地址:https://www.jb51.cc/js/429194.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐