使用 d3.js v3 时,我在使用 geoJSON 数据绘制地图时遇到问题。代码和生成的地图显示在:http://bl.ocks.org/73833ec90a8a77b0e29f http://bl.ocks.org/73833ec90a8a77b0e29f。此示例使用 d3.js v2 生成正确的地图。
- 我的数据已经投影(它们是荷兰国家电网/Rijksdriehoekstelsel 坐标)。为了弥补这一点,我编写了自己的投影函数,该函数仅将地图的坐标系转换为像素(例如缩放和平移)。
- d3.js v3 中的 d3.geo.path() 对数据进行重新采样。然而,重采样中生成的点似乎与我的地图不在同一坐标系中(我假设它们是经度、纬度坐标)。
我不想将地图的坐标转换为经度、纬度坐标,因为地图已经按照我想要的方式投影,而且据我所知,这不是一个简单的投影。
如果问题确实是由重采样引起的,我想禁用重采样。但是,在文档中我无法真正找到如何执行此操作。我可以传递一个流对象,而不是将投影函数传递给 d3.geo.path.projection()。我认为以下方法会起作用:
var projection = d3.geo.projection(function(x, y) {
return [ scale*(x-xmin), height-scale*(y-ymin) ];
}).precision(0);
但事实并非如此。可能也与我没有纬度、经度坐标有关。如何使用自定义投影函数禁用重采样?
或者当其他原因导致问题时,我想听听。
Thanks.
我最近遇到了同样的问题。
这样做的方法是明确告诉 d3 您不需要投影。
答案就在这link https://github.com/mbostock/d3/wiki/Geo-Paths.
"If projection is null, the path uses the identity transformation, where the input
geometry is not projected and is instead rendered directly in raw coordinates. This can be
useful for fast rendering of already-projected geometry, or for fast rendering of the
equirectangular projection."
所以你想拥有
var path = d3.geo.path().projection(null);
然后,像这样的事情
g.selectAll("path")
.data(json.features)
.enter().append("path")
.attr("d", path)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)