Карты Google: увеличение / уменьшение масштаба с панорамированием до определенной точки, как в контекстном меню maps.google.com - PullRequest
2 голосов
/ 27 сентября 2011

У меня есть проект с Google Maps. Я хочу эмулировать контекстное меню maps.google.com с действиями Zoom in и Zoom out.
google.maps.Map.setZoom() масштабирует карту до центральной точки, но на maps.google.com, когда вы щелкаете правой кнопкой мыши по определенной точке и выбираете действие Увеличение / Уменьшение, карта панорамируется, так что эта конкретная точка остается на том же месте.
Например, если я щелкну правой кнопкой мыши по точке в левом верхнем углу и выберу Zoom in в контекстном меню, этот шрифт останется под курсором после увеличения и не выйдет за границы карты.
Есть ли простой способ реализовать эту функцию?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2013

Была задана эквивалентная проблема: Увеличение в сторону мыши (например, Google maps) .

Мой подход к проблеме такой же, за исключением того, что пиксель моей картывсе координаты рассчитываются относительно центра карты (а не верхнего левого угла):

  1. Определите смещение в пикселах вашей конкретной точки относительно центра карты.Размеры прямоугольника карты в пикселях можно получить примерно так: map.getDiv (). GetClientRects () [0] , а центр - это просто центр прямоугольника.
  2. Рассчитайте, что новогосмещение в пикселах определенной точки будет после увеличения / уменьшения масштаба.Для Google Maps увеличение все смещения пикселей удваиваются (для одного шага масштабирования), поэтому, если ваша конкретная точка была [30, 40] от центра, она будет [60, 80] от картыЦентр после нормального увеличения (или это будет [15, 20] после обычного уменьшения .)
  3. Подсчитайте, сколько вам нужно настроить Центр карты после увеличения, так чтоКонкретная точка вернулась туда, где она началась.В приведенном выше примере после увеличения нам потребуется map.panBy (-30, -40), или после уменьшения нам потребуется map.panBy (15, 20).).
  4. Применение нормального map.setZoom (масштабирование) с последующим вычисленным map.panBy (dX, dY) к центру.
0 голосов
/ 27 сентября 2011

Вы можете справиться с этим с помощью маркеров. Я не знаю, является ли это наиболее эффективным способом.

Таким образом, вы добавляете маркер, в котором находится текущая позиция мыши (вы можете отслеживать курсор мыши, верно? В прошлый раз вы ничего не сделали с ним) Затем вы устанавливаете центр карты на этот маркер (я знаю, что для него есть функция) и просто удаляете маркер.

Редактировать: извините, наверное, я неправильно понял вашу проблему. Потому что это было бы так же, как двойной щелчок правой кнопкой мыши? Таким образом, вы хотите, чтобы расстояние между мышкой <-> top и mouse <-> на сцене оставалось таким же, как и у точки под ним, но на одну ступень больше увеличено / уменьшено?

...