Mapbox 将点(或类似点)转换为LngLat对象

Mapbox 将点(或类似点)转换为LngLat对象,mapbox,mapbox-gl-js,mapbox-gl,Mapbox,Mapbox Gl Js,Mapbox Gl,我有一个mapbox地图,我想添加一个固定的标记。对于“fixed”,我指的是map div容器的absoluteso固定方面的内容 例如: (0,0) (200,0) +-------------+ | | | | | | | * | | | | | | | +-------------+ (0,300)

我有一个mapbox地图,我想添加一个固定的标记。对于“fixed”,我指的是map div容器的
absolute
so固定方面的内容

例如:

(0,0)         (200,0)
+-------------+
|             |
|             |
|             |
|      *      |
|             |
|             |
|             |
+-------------+
(0,300)       (200, 300)
在这种情况下,标记*位于地图的中心,因此我可以使用:

.marker{
位置:绝对位置;
最高:50%;
左:50%
}
然后使用:

const lngLatObj=map.getCenter()
但是如果我想让标记不在中间,而是在20%的左边和90%的顶部

(0,0)         (200,0)
+-------------+
|             |
|             |
|             |
|             |
|             |
|             |
| *           |
+-------------+
(0,300)       (200, 300)
在这里,您可以看到地图容器和地图上的标记
*

假设我有
*
的像素坐标,我如何才能找到该点的经度和纬度

我想象的是:

const x=40
常数y=270
常量点=新mapboxgl.点(x,y)
常数lngLat=点。??
我没有鼠标或触摸事件。点是固定的,但用户可以缩放和平移地图

对于marker,我指的不是mapbox
marker
,而是一个简单的div元素

非常感谢



一个可再现的示例

如果您知道宽度和高度(以像素为单位)以及点的像素坐标,则可以基于wrt宽度/高度百分比计算相应的lat/lng值,并使用这些值偏移贴图框的坐标

根据所需的精度,简单的插值可能会做到:

var width = 200;
var height = 300;

var x = 40;
var y = 270;

var xPercentage = x / width;
var yPercentage = y / height;

var bounds = map.getBounds();

var long = bounds.getEast() + (xPercentage * (bounds.getEast() - bounds.getWest()));
var lat = bounds.getNorth() + (yPercentage * (bounds.getNorth() - bounds.getSouth()));
如果需要更高的精度,则必须使用球面计算,但方法相同。

我使用以下方法进行修复:

const boundsnort=new LatLon(bounds.getNorth(),bounds.getCenter().lng)
const boundsSouth=new LatLon(bounds.getSouth(),bounds.getCenter().lng)
const boundsEast=new LatLon(bounds.getCenter().lat,bounds.getEast())
const boundsWest=new LatLon(bounds.getCenter().lat,bounds.getWest())
常量lat=boundsNoth.intermediatePointTo(boundsSouth,yPercentage).lat
常数lng=边界st.中间点to(边界st.x百分比).lng

这可能会对您有所帮助。如果只需要该实现而不安装库,则可以找到所需的函数并检查实现。@CharanjitSingh我没有找到对我有用的函数。你能更好地解释你的想法吗?也许
lat
应该使用
yPercentage
而不是
xPercentage
?是的,我修正了答案。我测试了它。这似乎不起作用。为了计算lng,我使用
bounds.getWest()+xPercentage*(bounds.getEast()-bounds.getWest())
,但使用
bounds.getNorth()+yPercentage*(bounds.getNorth()-bounds.getSouth())似乎总是错误的。为什么?你说错是什么意思?我不是100%确定lat偏移在mapbox中是如何工作的,也许可以尝试
bounds.getSouth()-(…)
而不是
getNorth()+(…)
很高兴看到您找到了解决方案。如前所述,正确的球形计算做到了!:)