首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >滤波d3墨卡托映射

滤波d3墨卡托映射
EN

Stack Overflow用户
提问于 2018-01-12 14:51:57
回答 1查看 721关注 0票数 1

我使用艾伦·麦康奇块作为d3中的基本墨卡托地图。我已经让它在当地发挥作用,但我正试图过滤地图以排除某些国家(例如南极洲)。

我不想简单地从json文件中删除它,以防我需要将它带回来,并且希望找到一个非破坏性的解决方案。根据我的研究,我认为有一种方法可以根据国家代码使用d3中的代码进行过滤,但根据我所使用的示例无法让它工作。我应该把过滤器放在哪里?在地图绘制之前?在数据加载之后?

是否有更好的移除国家的办法?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-12 14:56:50

Array.prototype.filter没有就地过滤:

filter()不会对调用它的数组进行变异。

你必须重新分配价值。例如:

代码语言:javascript
复制
geojson.features = geojson.features.filter(d => d.id !== "ATA");

这是改变的bl.ocks (不再是南极洲了):http://bl.ocks.org/anonymous/8ef6910d243e4f7a200cd6c231eb44f1/e63d0a10b4629cdee795660c9fc542207d7dc82f

然而,这将把南极洲从装载的数据中移除。当您想要一个非破坏性的解决方案时,首先做一个深度克隆,然后使用过滤器:

代码语言:javascript
复制
var filteredGeojson = JSON.parse(JSON.stringify(geojson));
filteredGeojson.features = filteredGeojson.features.filter(d => d.id !== "ATA");

最后,利用你的片段..。

代码语言:javascript
复制
.data(geojson.features.filter(d => d.id !== "ATA"))

..。顺便说一句,它工作得很好,您必须创建一个"enter“选择:

代码语言:javascript
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48228666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档