D3区域-确定当前是否在地图视图中出现纬度/经度点

问题描述 投票:0回答:1

所以我有一个带有许多基于纬度/经度的标记的choropleth。基于当前地图视图/缩放,我希望能够知道当前视图中的标记。我有点可以解决这个问题,但是,当这些点稍微靠近地图的边缘并且我不知道为什么时,这是不准确的。

JSFiddle带有一个有效的示例:https://jsfiddle.net/e39fgnjL/7/

example one

所以您可以看到有4个点,但是在用经纬度对数据点进行过滤之后,我只看到1。Output

一旦我的点接近边缘,它就会停止工作。

这就是我用来生成地图视图的经/纬度边界的地方。

function getScreenBounds() {
  return [getPoint(0,0), getPoint()];
}

function getPoint(x,y) {
  if (x == null) x = width;
  if (y == null) y = height;
  var container = svg.node();
  var pointContainer = container.ownerSVGElement || container;
  var point = pointContainer.createSVGPoint();
  point.x = x, point.y = y;
  point = point.matrixTransform(container.getScreenCTM().inverse());
  return projection.invert([point.x, point.y]);
}

有人帮我指出正确的方向,为什么它不起作用?

d3.js choropleth map-projections
1个回答
0
投票

由于纬度和经度投影到矩形上,因此确定这没有达到您的期望。

由于投影问题,您的矩形边缘未与北-南-东西线对齐(请查看北边界...以经/纬度表示,这是在固定纬度上的东西直线,但在您的地图中,它肯定会在边缘卷曲)

这意味着计算纬度/经度框中的点与计算投影到的矩形中的点不同。

一个简单的解决方法是检查每个点,以查看该点的projection是否在矩形的边界内

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.