我在地图上有一条折线。当用户点击折线时,我想知道像素(屏幕)xy坐标。点击事件只返回LatLng对象,那么有没有人知道如何从latLng获取像素坐标呢?
如果有人能帮助我,我将不胜感激!
我在地图上有一条折线。当用户点击折线时,我想知道像素(屏幕)xy坐标。点击事件只返回LatLng对象,那么有没有人知道如何从latLng获取像素坐标呢?
如果有人能帮助我,我将不胜感激!
var numTiles = 1 << map.getZoom();
var projection = map.getProjection();
var worldCoordinate = projection.fromLatLngToPoint(latLng);
var pixelCoordinate = new google.maps.Point(
worldCoordinate.x * numTiles,
worldCoordinate.y * numTiles);
var topLeft = new google.maps.LatLng(
map.getBounds().getNorthEast().lat(),
map.getBounds().getSouthWest().lng()
);
var topLeftWorldCoordinate = projection.fromLatLngToPoint(topLeft);
var topLeftPixelCoordinate = new google.maps.Point(
topLeftWorldCoordinate.x * numTiles,
topLeftWorldCoordinate.y * numTiles);
return new google.maps.Point(
pixelCoordinate.x - topLeftPixelCoordinate.x,
pixelCoordinate.y - topLeftPixelCoordinate.y
)
来自@Bryan Johnson的答案是正确的,但在某些情况下还不够,所以我在这里记录下来,供需要的人(或将来的我)参考:
因此,为了始终获得正确的坐标,您需要创建一个自定义的OverlayView,并在draw函数中处理投影变化。
我在这里做了一个示例:
jsfiddle
https://jsfiddle.net/tienketnoi/x4610Lsb/33/