坐标转换到屏幕上(和回来)像素

问题描述:

这是我在做什么: 点击地图上的标记,打开侧面板和中间的 标记的地图。侧面板占据屏幕右侧的3/4。坐标转换到屏幕上(和回来)像素

这就是我需要发生的事情: 根据面板打开后留下的视口的1/4来居中标记。

我可以获取标记的像素坐标,并在面板打开动画时计算需要转换的位置。问题是,flyTo()只接受LngLatLike对象,我无法将我的像素坐标转换为经度和纬度。 Leaflet.js有一个名为containerPointToLatLng()的函数,在我切换到Mapbox GL之前便派上用场。

鉴于Mapbox GL的柔软性,尽管其新颖性,我只能想象这是一种可能性。 但是如何?

projectunproject方法使这么多的逻辑可能。如果你有一定的lngLat点击,并且要在地图上的位置,使得地理位置水平居中,并在1/8标记,你可以:

  1. 采取的地理位置,使之成为与project
  2. 移像素位置的像素位置权由(1/2-1/8)= 4/8-1/8 = 3/8 = 0.375 * map._containerDimensions()[0],通过添加编号,以它
  3. 打开该移像素位置回到地理位置unproject

或者,您可能还可以通过在flyTo调用中使用offset option来轻松完成此操作。

+0

啊哈!我'项目'和'未计划'正是我一直在寻找的。 工作,但我现在意识到我没有提到,我正在放大到'flyTo'期间的固定缩放点,这只有当我停留在相同的缩放级别。任何想法如何适应? – Tomelower

+0

只需将一个'zoom'属性添加到您的选项对象。 [文件](https://www.mapbox.com/mapbox-gl-js/api/#map#flyto)。我喜欢在这里使用[offset](https://www.mapbox.com/mapbox-gl-js/api/#animationoptions)作为它的计算 - 只需传入[PointLike](https: //www.mapbox.com/mapbox-gl-js/api/#pointlike)value [x,y]。 – Roy