D3.js d3墨卡托地理边界到像素边界

D3.js d3墨卡托地理边界到像素边界,d3.js,latitude-longitude,pixel,geo,bounds,D3.js,Latitude Longitude,Pixel,Geo,Bounds,我想知道是否有一个D3-API调用可以在给定贴图宽度和高度的情况下将D3.geo.bounds()数组转换为path.bounds像素数组 我在API文档中找不到这样的调用。我知道有些投影应该与技巧有关,但我未能从地理边界获得实际的像素边界 此外,是否有计算一系列功能的横向/纵向质心的API实现 谢谢你的帮助 示例 假设用户希望将德国和波兰缩放到全屏。我的计算lat长边界为: lat:47.27148371456806 long: 5.850585058505857 (1321.60416041

我想知道是否有一个D3-API调用可以在给定贴图宽度和高度的情况下将D3.geo.bounds()数组转换为path.bounds像素数组

我在API文档中找不到这样的调用。我知道有些投影应该与技巧有关,但我未能从地理边界获得实际的像素边界

此外,是否有计算一系列功能的横向/纵向质心的API实现

谢谢你的帮助

示例

假设用户希望将德国和波兰缩放到全屏。我的计算lat长边界为:

lat:47.27148371456806 long: 5.850585058505857
(1321.6041604160416,246.58117844670664)
lat:55.06843452896922 long: 24.140414041404142
(1451.6651665166517,157.87336991900156) 
通过谷歌地图检查,lat-long坐标是正确的。然而,计算出的像素值(使用来自的方法)对我来说似乎很奇怪。屏幕分辨率为2560x1258

我想将lat-long边界转换为像素边界,以便计算墨卡托投影的偏移:

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)
                               );
最好的,
Sebastian

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


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

感谢您的回复!我知道path.bounds(),但我遇到的问题是,为了不失去精度,我必须计算多个特征的统一边界,也就是说,我有两个特征的地理边界,现在我需要将这个边界转换为像素边界,以便计算墨卡托投影的偏移量,以适应屏幕分辨率的边界!这是否意味着我必须手工翻译特定的(组合的)边界?您可以这样做,也可以使用投影边界。不管怎样,最终你还是要进行投影,你不应该因此而失去精度——可能这里或那里有一个像素,但这并不重要,除非你的屏幕真的很小。例如,如果你想将一组只在运行时才知道的功能与任何屏幕分辨率相匹配,你就不能真正使用投影边界,因为对于初始投影,你必须用一些初始比例进行第一次猜测。当然,世界地图中存在小于默认比例的岛屿,因此投影边界将返回无穷大(因为单个像素可能太小,无法显示小于150比例的岛屿)。我想我得手工做。好的,我明白你的意思。在这种情况下,只需使用投影来投影计算出的边界。是的,我似乎无法做到这一点。假设有两个坐标为lat-long的边界点。我需要将它们转换为屏幕上高度为y_h,宽度为x_w的像素坐标。我必须按照这里描述的那样做吗:(我已经检查过了,我计算的lat-long边界是正确的,但是使用链接公式的像素边界是奇怪的)?有D3路吗?