Клуб API Карт

Преобразование координат с Hotspots

max.zolotyh
4 июля 2011, 08:15

Доброго времени суток!

Я использую слой активных областей из примера:

http://api.yandex.ru/maps/jsapi/doc/mod/tasks/how-to-create-hotspots-layer.xml



В JavaScripte тайла содержится следующий код:

...

{
                "data" : { "name": "Севастополь" },
                "base": new YMaps.GeoPoint(33.558616,44.585098),
                "geometry":[
                    [-10,-5,10,33]
                ]
            },
...

Но к сожалению использовать геграфические координаты у меня нет возможности. Координаты объектов мне известны как пиксели карты (например х=700917,  у=322732, масштаб 12) Каким образом задать параметр base в пиксельных координатах?

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

Перевести в геокоординаты.

map.coordSystem.toCoordPoint

map.tileCoordinates.scale

toCordPoint возвращает какие-то страшные значения типа -59 градусов. Возможно у меня ошибка с входными данными - через пару часов проверю.

 

А чисто принципиально - для отображения на карте программа использует пиксельные координаты, а входной параметр объекта - геокоординаты. Получается что я буду преобразовывать пиксельные координаты в геокоординаты, что бы потом вернуть их обратно в пиксельные. Помоему совершенно напрасное расходование вычислительных ресурсов.... (((

Нет варианта указать входные координаты по-другому? В конце-концов в качестве параметра в скрипт передаются именно тайловые координаты - почему нельзя активную область спозиционировать относительно прорисовываемого тайла?

Не принципиально - GeoPoint-ы используются не в движке хотспотов, а в формате обмена данными.

Можете придумать свой формат и создавать напрямую YMaps.Hotspots.NPolyShape-ы - как раз в тех самых пикселах на текущем масштабе.

Нашёл решение проблемы:

 

if(window.map) alert(window.map.coordSystem.toCoordPoint(window.map.tileCoordinates.scale(new YMaps.Point(700917,322732))).toString());

- возвращает правильные координаты (точки соответствуют 12 масштабу карты, который должен быть включен в момент выполнения).

Ошибка была в том, что для карты максимальный масштаб - 18, но оказывается это не максимальный))) Как только убрал параметр maxzoom в scale - заработало.

В tileCoordinates.scale нужно указывать максимальный масштаб координатной системы (map.coordSystem.getMaxZoom()) - 23. 18 - это масштаб, до которого у Яндекса есть данные, он не является предельным и зависит от конкретной точки.