Клуб API Карт

Подгон под масштаб

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

Привязал карту (с 4 уровнями масштаба) с gmapuploader.com, центр карты указал, но масштаб не соотвествует.

Сейчас действует с 1 по 4 пункт в яндекс линейки, а нужно сделать с 11 по 15 уровень масштаба.

Пытался задать здесь map.setType(new YMaps.MapType([new YMaps.MapLayer(myData)], 'Карта', {minZoom:2, maxZoom:15})); , но это не то.

Каким образом можно привязать масштаб к нужным пунктам линейки зумирования?

6 комментариев
Sergey Konstantinov
28 января 2016, 08:39
Вам нужно изменить механизм формирования урла тайла. Если Вы брали пример из клуба, то вот в этой функции:
myData.getTileUrl = function (tile, zoom) {
return this.getTileUrlTemplate() + "/tile-" + zoom + "-" + (tile.y * Math.pow(2, zoom) + tile.x) + ".jpg";
}
Нужно заменить zoom на (zoom - 11).toSting(). Тогда Ваша карта будет жить на масштбах начиная с 11
Да я брал пример с клуба, но при замене zoom на (zoom - 11).toSting() карта перестает загружаться, менял во всех местах среди этих строк, перепробывал разные варианты, но без результатно, twirl-team немогли бы вы привести пример строк с уже примененым кодом? Заранее вам спасибо.
Sergey Konstantinov
28 января 2016, 08:39
Дайте лучше Ваш пример.
Вот сама карта: http://uralsk.info/i/g1.htm
А вот код:
myData.getTileUrl = function (tile, zoom) {
                return this.getTileUrlTemplate() + "/tile-" + zoom + "-" + (tile.y * Math.pow(2, zoom) + tile.x) + ".jpg";
Sergey Konstantinov
28 января 2016, 08:39
Если Вы переведете свой скрипт на версию АПИ 1.1 (в частности, YMaps.MapLayer надо заменить на YMaps.Layer), то Ваша проблема решаема следующим образом:

1. Необходимо создать объект YMaps.CartesianCoordSystem:

var cs = new YMaps.CartesianCoordSystem(
  new YMaps.Point(10, 10), // здесь надо подставить координаты левого нижнего угла Вашей карты
  new YMaps.Point(20, 20), // правый верхний угол
  // это масштаб изображения, вместо fi надо подставить среднюю широту
  new YMaps.Point(111100, 111100 * Math.cos(fi)),
  4 // Максимальный масштаб
);

2. Передать его в конструктор карты:
map = new YMaps.Map(document.getElementById("YMapsID"), { coordSystem: cs});

3. Использовать везде вместо YMaps.GeoPoint объекты YMaps.Point.

Sergey Konstantinov
28 января 2016, 08:39
Кроме того, в контроле YMaps.Zoom Вы сможете задать собственные тексты всплывающих подсказок:

map.addOverlay(new YMaps.Zoom({ customTips: [
 { index: 1, value: 'Город' },
 { index: 3, value: 'Улица' }
]}));