d3 mercator geo绑定到像素范围

时间:2014-03-30 11:04:13

标签: d3.js latitude-longitude pixel geo bounds

我想知道是否有D3-API调用将d3.geo.bounds()数组转换为给定地图宽度和高度的path.bounds像素数组?

我无法在API文档中找到这样的调用。我知道有一些预测可以解决问题,但是我没能从地理界限到达实际像素。

此外,是否存在计算一系列特征的纬度/长度质心的API实现?

我感谢任何帮助!

示例

假设用户想要将德国和波兰缩放到全屏。我的计算纬度 - 边界是:

lat:47.27148371456806 long: 5.850585058505857
(1321.6041604160416,246.58117844670664)
lat:55.06843452896922 long: 24.140414041404142
(1451.6651665166517,157.87336991900156) 

使用google-maps检查,lat-long坐标是正确的。但是,计算出的像素值(使用https://stackoverflow.com/a/14457180/974815的方法)对我来说似乎很奇怪。屏幕分辨率为2560x1258。

我想将纬度较长的边界转换为像素边界,以便计算墨卡托投影的偏移量:

var offset = [
               this.width - (bounds[0][0] + bounds[1][0])/2,
               this.height - (bounds[0][1] + bounds[1][1])/2
             ];   

return d3.geo.path().projection(
                                 d3.geo.mercator()
                                   .center(this.__computeCentroid(features))
                                   .scale(scale)                                
                                   .translate(offset)
                               );

最佳, 塞巴斯蒂安

1 个答案:

答案 0 :(得分:0)

使用可用的投影之一将要素的地理坐标转换为像素(投影)坐标。您可以使用投影将地理边界转换为投影边界,也可以直接使用path.bounds()来获取该信息。也就是说,不是将该功能传递给d3.geo.bounds(),而是将其传递给使用您投影的.bounds() d3.geo.path()方法。

没有计算一系列特征的质心的函数。您可以将要素组合成一个(最好使用GIS程序)并获得其质心,或者获取所有要素的质心,然后通过平均坐标来获得质心的质心。