javascript - D3.geo.bounds 不返回边界框?

标签 javascript d3.js geospatial

我遇到了一个问题,我已追踪到 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]]

直接操作坐标生成bounds对象

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(如果是,我将如何解决这个问题),或者这是一个错误?

最佳答案

我认为这里的混淆是 d3.geo.bounds 期望要素具有纬度/经度值,而不是 x/y 值。因此您的输入被视为 % 360,并且您不会得到您期望的最大/最小值。

您可能需要将您的坐标转换为纬度/经度值才能使其正常工作 - 留作读者练习,因为我不知道您的坐标系是什么。

关于javascript - D3.geo.bounds 不返回边界框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17734567/

相关文章:

javascript - 为什么提取的数据没有显示在我的 HTML 中?

javascript - 为什么使用keys过滤器而不是columns.slice()?

r - 使用 PBSMapping 和 Shapefiles 帮助在 R 中绘制地理数据

sql - 在oracle上创建空间索引

geolocation - 地理空间坐标和距离(以公里为单位)

javascript - 带有拉斯维加斯背景幻灯片的 ASP MVC 网站在发布到服务器后不显示背景

javascript - 碰撞仅在西侧和北侧起作用

javascript - 在输入框中设置 "minimum"字符输入抛出 javascript

javascript - 基于具有固定标签的季节的 D3 圆环图

javascript - D3中的父子关系如何定义?