【发布时间】:2013-07-19 06:36:32
【问题描述】:
我遇到了一个问题,我已追踪到 d3.geo.bounds 函数中的意外行为。
var bounds = d3.geo.bounds(data);
对于仅包含点特征的 geoJSON FeatureCollection,不会返回正确的边界框:具体而言,似乎使用了集合中第一个和最后一个点的 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(如果是,我将如何解决这个问题),还是这是一个错误?
【问题讨论】:
标签: javascript d3.js geospatial