我遇到了一个问题,该问题已跟踪到d3.geo.bounds
函数中的意外行为。
var bounds = d3.geo.bounds(data);
对于仅包含点要素的geoJSON FeatureCollection,不会返回适当的边界框:具体地说,似乎使用了集合中第一个点和最后一个点的x值,而不是点组的最小和最大x值。这可以在http://jsbin.com/icosof/4/edit处看到。
因此,返回的边界框坐标包括最小和最大y值,但不包括最大和最小的x值。相反,这些似乎是从集合的第一个和最后一个功能中获取的:
[[6113.30166221, -6663.98951731], [5153.32052977, -77.3529517971]]
通过直接操纵坐标来生成边界对象
xvalues = [];
$.each(data.features, function(i,el){
xvalues.push(el.geometry.coordinates[0]);
});
yvalues = [];
$.each(data.features, function(i,el){
yvalues.push(el.geometry.coordinates[1]);
});
console.log([[Math.min.apply(null,xvalues),Math.min.apply(null,yvalues)],
[Math.max.apply(null,xvalues),Math.max.apply(null,yvalues)]]);
产生期望的结果:
[[3397.33954824, -6663.98951731], [6504.18296202, -77.3529517971]]
d3.geo.bounds
是否期望按x坐标排序的FeatureCollection(如果可以,我将如何解决此问题),或者这是一个bug? 最佳答案
我认为这里的困惑是d3.geo.bounds
期望要素具有纬度/经度值,而不是x / y值。因此,您的输入被视为% 360
,您将无法获得期望的最大/最小。
您可能需要将坐标转换为纬度/经度值才能正常工作-留给读者练习,因为我不知道您的坐标系是什么。
关于javascript - D3.geo.bounds不返回边界框吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17734567/