D3.js d3世界地图--计算缩放时的地理边界

D3.js d3世界地图--计算缩放时的地理边界,d3.js,topojson,D3.js,Topojson,我正在尝试调整Mike Bostock的受限缩放示例以满足我的需要。(). 缩放地图时,是否有方法计算投影的地理边界(长/宽)。d3.geo.bounds()方法需要一个“特性”——我真的不想放大任何特定的特性。我想要的只是投影可见区域的地理边界 提前感谢,, Kishore我不知道有任何内置功能可以给出一组功能的界限,但这里有一个非常简单的函数可以做到这一点: function boundingExtent(features) { var boundExtent = [[0,0],[0,0

我正在尝试调整Mike Bostock的受限缩放示例以满足我的需要。(). 缩放地图时,是否有方法计算投影的地理边界(长/宽)。d3.geo.bounds()方法需要一个“特性”——我真的不想放大任何特定的特性。我想要的只是投影可见区域的地理边界

提前感谢,,
Kishore

我不知道有任何内置功能可以给出一组功能的界限,但这里有一个非常简单的函数可以做到这一点:

function boundingExtent(features) {
  var boundExtent = [[0,0],[0,0]];
  for (var x in features) {
    thisBounds = d3.geo.bounds(features[x]);
    boundExtent[0][0] = Math.min(thisBounds[0][0],boundExtent[0][0]);
    boundExtent[0][1] = Math.min(thisBounds[0][1],boundExtent[0][1]);
    boundExtent[1][0] = Math.max(thisBounds[1][0],boundExtent[1][0]);
    boundExtent[1][1] = Math.max(thisBounds[1][1],boundExtent[1][1]);
  }
  return boundExtent;
}

这样,您就可以将特征数组传递给boundingExtent(featureArray),它将为您的整个集合返回一个边界框。

我的另一个答案是对问题的误读,但我将把它留在那里,以防其他人以同样的方式误读问题

要在屏幕上找到地图可视区域的边界框,只需使用projection.invert()函数并将其输入SVG的左上角和右下角。如果您有一个500x500 SVG,则如下所示:

 projection.invert([0,0])
 projection.invert([500,500])
这是屏幕的边界框,以lat-long(或您使用的任何坐标系)表示


之后,您可以获取特征的边界,并测试它们是否完全包含或相交,或者它们的质心是否在这些边界内。我不打算在这里解释如何做到这一点,因为这是一个不同的问题,有许多不同的答案,取决于你对“在这些范围内”的定义

这个问题可能会有帮助(或者更重要的是其中的链接)。谢谢您的回复。但是,有没有办法知道放大后投影的可见区域中有哪些特征?啊,我误解了你的问题。是的,我会给你第二个答案。再次感谢你的回复。我试过了,无论缩放比例如何,我都从projection.invert()方法中得到了相同的值。在我使用()的示例中,svg边界框的尺寸是(600340)。当我调用projection.invert(600340)方法时,无论缩放比例如何,我总是得到值[360,-86.74356437364693]。我试图找出一个看似神奇的公式,来计算平移坐标和缩放因子,从而获得可见区域的正确横向边界,但迄今为止运气不佳。