我使用艾伦·麦康奇块作为d3中的基本墨卡托地图。我已经让它在当地发挥作用,但我正试图过滤地图以排除某些国家(例如南极洲)。
我不想简单地从json文件中删除它,以防我需要将它带回来,并且希望找到一个非破坏性的解决方案。根据我的研究,我认为有一种方法可以根据国家代码使用d3中的代码进行过滤,但根据我所使用的示例无法让它工作。我应该把过滤器放在哪里?在地图绘制之前?在数据加载之后?
是否有更好的移除国家的办法?
.data(geo_data.features.filter(d => d.id !== "ATA))
发布于 2018-01-12 14:56:50
Array.prototype.filter没有就地过滤:
filter()不会对调用它的数组进行变异。
你必须重新分配价值。例如:
geojson.features = geojson.features.filter(d => d.id !== "ATA");这是改变的bl.ocks (不再是南极洲了):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"))..。顺便说一句,它工作得很好,您必须创建一个"enter“选择:
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
https://stackoverflow.com/questions/48228666
复制相似问题