所以我有一个带有许多基于纬度/经度的标记的choropleth。基于当前地图视图/缩放,我希望能够知道当前视图中的标记。我有点可以解决这个问题,但是,当这些点稍微靠近地图的边缘并且我不知道为什么时,这是不准确的。
JSFiddle带有一个有效的示例:https://jsfiddle.net/e39fgnjL/7/
所以您可以看到有4个点,但是在用经纬度对数据点进行过滤之后,我只看到1。
一旦我的点接近边缘,它就会停止工作。
这就是我用来生成地图视图的经/纬度边界的地方。
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]);
}
有人帮我指出正确的方向,为什么它不起作用?
由于纬度和经度投影到矩形上,因此确定这没有达到您的期望。
由于投影问题,您的矩形边缘未与北-南-东西线对齐(请查看北边界...以经/纬度表示,这是在固定纬度上的东西直线,但在您的地图中,它肯定会在边缘卷曲)
这意味着计算纬度/经度框中的点与计算投影到的矩形中的点不同。
一个简单的解决方法是检查每个点,以查看该点的projection是否在矩形的边界内
希望有帮助!