Клуб API Карт

Проекция hotspot.Layer API 2.1.5

spiner2002
24 февраля 2014, 13:21

Здравствуйте, возникла проблема.
Есть прозрачные тайлы построенные с в проекции Spherical Mercator. Есть ObjectSource, который отдает для хотспотов информацию по тайлам относительно той же проекции.
При на карте в итоге получается, что слой хотспотов и картиночный не соответвуют дргу другу.

Пробовал утановить  'projection':ymaps.projection.sphericalMercator и для самой карты, но к каким-либо видимым результатам это не привело. В документации возможности указания типа проекции для самого хотспота и или ресурса я не нашел. Возникает вопрос как можно заставить барть хотспоты в нужной проекции сразу, либо как конвертировать запрос на стороне сервера?

    var imgLayer = new ymaps.Layer('/tiles/%z/%x/%y.png',
        {
            'projection': ymaps.projection.sphericalMercator,
            'tileTransparent':true
        }
    );
    var tileUrlTemplate = '/hotspots/%z/%x/%y/',
        keyTemplate = 'testCallback_tile_%c',
        objSource = new ymaps.hotspot.ObjectSource(tileUrlTemplate, keyTemplate),
        hotspotLayer = new ymaps.hotspot.Layer(objSource);
   map.layers.add(hotspotLayer);
   map.layers.add(imgLayer);

 

6 комментариев
Подписаться на комментарии к посту

Нужно точно так же задать проекцию для хотспотного слоя

hotspotLayer = new ymaps.hotspot.Layer(objSource, {

    projection: ymaps.projection.sphericalMercator

});

Первое что попробовал. Этот параметр не документирован, и судя по всему ничего не меняет, места подсвета по прежнему  остаются со сдвигом.

Забыл упомянуть API 2.1.5

Можете дать ссылку на стенд?

К сожалению нет возможности.

Могу дать код на питоне, который формирует координаты точек относительно тайла:

 

def convert_point(lon,lat,tz,tile):

    mercator = GlobalMercator()

    tx, ty = mercator.GoogleTile(tile[0],tile[1], tz)

    mx, my = mercator.LatLonToMeters(lat, lon)

    px, py = mercator.MetersToPixels(mx, my,tz)

    return int(px- tx*256),int(py- ty*256)


предварительно из PostGis делается выборка по объектам попадающим в этот тайл:

tx, ty = mercator.GoogleTile(tile[0],tile[1], tz)

minLat, minLon, maxLat, maxLon = mercator.TileLatLonBounds(tx,ty, tz)


используемая библиотека http://www.maptiler.org/google-maps-coordinates-tile-bounds-projection/

Проблема в том, что на моих стендах задание проекции хотспотному слою работает корректно. Поэтому без ссылки на вашу страницу или без кода я не смогу понять, что работает не так.

Спасибо,

Копнул глубже и нашел проблему у себя в функции конвертации точек. Немного сбило с толку отсутсвие проекций у хотспота в документации.

Теперь возникла другая проблема, при подсветке областей способом из примера взятого здесь http://clubs.ya.ru/mapsapi/replies.xml?item_no=43876 , созданые полигоны мерцают от движения мыши по ним. Похоже на многократный вызов mouseenter. 

var currentPolygon = null;

hotspotLayer.events.add('mouseenter', function (e) {

    var activeShape = e.get('activeShape');

    currentPolygon = new ymaps.Polygon(activeShape.getGeometry(), null, {interactivityModel: 'default#transparent'});

   map.geoObjects.add(currentPolygon);

});

hotspotLayer.events.add('mouseleave, function (e) {

   map.geoObjects.remove(currentPolygon);

  currentPolygon = null;

});