javascript - 过滤 d3 墨卡托 map

标签 javascript d3.js maps geojson

我正在使用 Alan McConchie's d3 中的基本墨卡托 map block 。我已经让它在本地工作,但我试图过滤 map 以排除某些国家(例如南极洲)。

我不想简单地从 json 文件中删除它以防万一我需要将它取回并且宁愿找到一个非破坏性的解决方案。根据我的挖掘,我认为有一种方法可以根据国家代码在 d3 中使用下面的代码进行过滤,但无法根据我正在使用的示例使其工作。我在哪里包括过滤器?在绘制 map 之前?数据加载后?

有没有更好的删除国家的解决方案?

.data(geo_data.features.filter(d => d.id !== "ATA))

最佳答案

Array.prototype.filter不就地过滤:

filter() does not mutate the array on which it is called.

您必须重新分配值。例如:

geojson.features = geojson.features.filter(d => d.id !== "ATA");

这是经过更改的 block (不再是南极洲):http://bl.ocks.org/anonymous/8ef6910d243e4f7a200cd6c231eb44f1/e63d0a10b4629cdee795660c9fc542207d7dc82f

但是,这将从加载的数据中删除南极洲。因为你想要一个非破坏性的解决方案,所以先做一个深度克隆,然后使用过滤器:

var filteredGeojson = JSON.parse(JSON.stringify(geojson));
filteredGeojson.features = filteredGeojson.features.filter(d => d.id !== "ATA");

最后,为了使用您的代码片段...

.data(geojson.features.filter(d => d.id !== "ATA"))

... 顺便说一句,它工作得很好,你必须创建一个“输入”选择:

svg.selectAll(null)
    .data(geojson.features.filter(d => d.id !== "ATA"))
    .enter()
    .append("path")
    .attr("d", function(d){
        return path(d)})
    });

如您所见,问题在于每个国家/地区将是一条单独的路径,我不确定这是否是您想要的:http://bl.ocks.org/anonymous/ae26c13f2ed863afbb905f598a48a0e3/3d7323cf9f016c0e19aa1c1d876e492715105819

关于javascript - 过滤 d3 墨卡托 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48228666/

相关文章:

javascript - 在 iframe 中使用脚本标签无限加载

Javascript 对象解构和默认参数相结合

javascript - 如何在 d3.js 中鼠标悬停时突出显示圆弧

javascript - 如何对D3中的节点进行排序,以使连接路径清晰明了?

javascript - Serverless NodeJS跳过https请求

json - 将 ctree 输出转换为 JSON 格式(用于 D3 树布局)

java - 将 CSV 文件解析为数组

google-maps - Google 静态 map - 画一个圆圈

google-maps - 从 geoJSON 获取 map 视口(viewport)中存在的要素

javascript - 为什么 node.js 无法定位其他 typescript React 组件