考虑俯仰角和方位角,如何获取mapbox-gl地图视口边缘坐标?

4

我不知道如何获取用户更改俯仰和方向后的地图视口坐标。

这是我的代码示例-https://jsfiddle.net/5uwdfhdp/6/, 我使用.getBounds()方法,但它似乎运行错误。

在用户旋转地图之前单击地图后,我得到正确的矩形,之后得到的结果却是荒谬的。

我可能会使用错误的坐标,但似乎Mapbox方法不按预期工作。

1个回答

7
问题在于,当你使用直角坐标的正交反射构建一个矩形时,你并没有考虑到旋转和俯仰。试着通过容器的像素坐标获取一个地理多边形:
const canvas = map.getCanvas()
const w = canvas.width
const h = canvas.height
const cUL = map.unproject ([0,0]).toArray()
const cUR = map.unproject ([w,0]).toArray()
const cLR = map.unproject ([w,h]).toArray()
const cLL = map.unproject ([0,h]).toArray()
const coordinates = [cUL,cUR,cLR,cLL,cUL]
const polygon = turf.polygon([coordinates])

https://jsfiddle.net/7vzyrx9d/

https://github.com/mapbox/mapbox-gl-js/issues/2375


我认为.getBounds()函数的目的是提供视口顶点的坐标,考虑到透视(正交反射),感谢TX的想法,我会在几天后尝试并更新问题的状态。 - Rantiev
3
一定要除以设备的像素比。否则,如果不是1:1,则bbox将不准确。const w = canvas.width / window.devicePixelRatio; const h = canvas.height / window.devicePixelRatio; - Stonetip

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接