Как получить экран XY из Google Maps (V3) LatLng? - PullRequest
4 голосов
/ 29 марта 2011

У меня есть полилиния на моей карте.Я хочу знать xy-координаты пикселя (экрана), когда пользователь нажимает полилинию.Событие Click возвращает только объект LatLng, поэтому кто-нибудь знает, как получить координаты пикселей из latLng?

Я был бы очень признателен, если бы кто-нибудь мог мне помочь!

1 Ответ

3 голосов
/ 04 декабря 2013

Если у вас есть объект LatLng, вы можете использовать объект проекции карты Google, чтобы преобразовать его в координаты плитки, а затем в пиксельные координаты:

Для документов по классу проекции: https://developers.google.com/maps/documentation/javascript/reference#Projection

Пример Google, объясняющий, как преобразовать LatLng в пиксельную координату: https://developers.google.com/maps/documentation/javascript/examples/map-coordinates?csw=1

Есть одна загвоздка. Вышеприведенное даст вам пиксельные координаты внутри div карты Google (который может потребоваться в зависимости от ваших потребностей). Если вы хотите, чтобы пиксели относились к верхнему левому углу экрана, есть еще один шаг. Вы должны сделать ту же проекцию в верхнем левом углу окна просмотра и вычесть их. Это даст вам пиксельные координаты точки 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
)
...