Клуб API Карт

Yandex maps для touch screen

Пост в архиве.

На смартфоне карта не скрулиться, пришлось добавить контрол smallZoomControl, теперь думаю как перемещать карту подобно тому как это происходит с помощью мыши.

Решил сделать кнопки: вверх, вниз, влево, вправо.

При клике на кнопки создается событие. Так вот как двигать карту пропорционально зуму. Т.е. тупо двигать с приращением центра на n координат наверно не подходит, потому-что каждый раз будт двигаться на разные расстояния, или вводить коэфициент масштабирования.

Может быть в апи есть готовые методы для этого?

12 комментариев

сделал так  

myMap = new ymaps.Map("map", {

   center: [56.030562, 54.761586],

   zoom: 8,

})

myMap.controls.add("smallZoomControl");

var left = new ymaps.control.Button({

  data:{

      content:\'

   }

},{

   selectOnClick: false

}) 

left.events.add("click",function(e){

   var cntr = myMap.getCenter()

   cntr[0]+=0.10*(1/myMap.getZoom())

   myMap.setCenter(cntr)

})

myMap.controls.add(left)

хотя с коэфициентами еще нужно наверно поэксперементировать

Алексей Yarrr!
28 января 2016, 03:41

Вам не проще переводить в пиксельные координаты и двигать по ним?

Это, практически, проекция земного шара на плоскость, все формулы уже готовые и привычные.

ну а как это сделать?

Алексей Yarrr!
28 января 2016, 03:41

Оч просто. Через текущий projection. Получается так:

var proj = map.options.get('projection')

А дальше:

proj.fromGlobalPixels (vector, zoom) - из пикселей в latlang

proj.toGlobalPixels (point, zoom) - назад в пиксели

 

Если я правильно помню, то для гео карт используется меркатор: http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/projection.wgs84Mercator.xml

Но особой разницы нет, и другие проекции работают аналогично. В любом случае, пиксельные координаты (на экране) всегда должны будут соотносится по каким-то правилам с координатами карты.

Вы не могли бы уточнить, что за устройство? Не андроид ли на нем 4.0.1?

я тестирую на эмуляторе opera mini(mobile) на компьютере, там возможности что-то скролить или перемещать нет. Перемещается только страница а не карта, пробовал зажатой клавишой не помогает.

У самого андроид 2.x на нем в та же история

Какой вообще механизм взаимодействия на тачскринах? 

Опера мини так поддерживает javascript что лучше использовать StaticAPI

на мобайле таже история

Слушаются touch-события на карте и преобразуются в их мышиные аналоги. Если интересно подробнее, у нас есть доклад про тач-события http://events.yandex.ru/talks/118/.

Посмотрим, что не так на 2.х.

А какой версией API Вы пользуетесь? И какое устройство?

Алексей Yarrr!
28 января 2016, 03:41

судя по коду, версия 2.0.х

Спасибо :-) Ну про устройство вопрос в любом случае актуален. Если 2.0.х, странно, что не работает.