Клуб API Карт

Смещение объектов при масштабировании

Пост в архиве.
wfirer
5 ноября 2010, 08:46

Решил создать на своем сайте небольшую геоинформационную систему на базе Яндекс.Карты. Поскольку карты моего городка на Яндексе нет, сделал свою, порезал на тайлы при помощи программы "Подготовка слоя тайлов", закинул тайлы и автоматически сформированный программой html-файл на сервер.  Вот здесь.

Но возникло несколько проблем:

1. В html-файле есть такая строчка - mapCenter: new YMaps.GeoPoint(-173.49609375, 84.4939488698897). Откуда взялись эти координаты, и почему именно эти? Я не делал привязку своей карты к географическим координатам, в этом вроде нет необходимости. Если эти координаты меняешь, карта не отображается.

2. Создал на карте два объекта- метку и многоугольник, но при масштабировании карты они довольно сильно сдвигаются....

3. Может имеет смысл использовать собственную систему координат (удобнее было бы потом расставлять объекты по пикселам, а не по географ. координатам), как в примере с картинкой, или, наоборот, сделать привязку к географическим координатам?

4. В случае использования собственной системы координат можно попросить готовый пример, как встроить ее в мой файл, т.к. в javascript совсем не силен.

11 комментариев
1. Эти координаты были высчитаны автоматическии для вашей карты.  Возможно, что вы меняете слишком сильно центр и из-за этого нарезанная карта скрывается за областью просмотра. Попробуйте менять значения более плавно.

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

3. Да, вы правы. Вы можете изменить систему координат самостоятельно с географической на декартову. Это несложно сделать: http://api.yandex.ru/maps/jsapi/doc/dg/concepts/cs-built-in.xml#cartesian

4. http://api.yandex.ru/maps/articles/tasks/usermaps.xml

Если возникнут сложности или еще вопросы - смело задавайте.
Спасибо за ответ, но... Убрал полосы прокрутки, но проблема сохранилась - при изменении масштаба метка и многоугольник сдвигаются.
Кроме того, сделал второй вариант, просто вставив скрипт в материал, а не враппером, как в первом случае, но и тут та же проблема...
Вы все не правильно поняли - метка и  многоугольник не сдвигаются.
Это у подложки проблемы :)
Она четко разделелена на два этапа - зумы 1-2 и 3-4, между ними - малек смещение. Вы эти все зумы в один проход генерили?
Честно говоря, нет. Пробовал в один проход все зумы, но качество мне не  понравилось - на мелких масштабах все рябит, ничего не разглядишь.  Поэтому делал сначала картинку 9472х9472, резал ее, потом уменьшал до  4864х4864, снова резал, и так далее.
угу, вот какраз так делать и нельзя :)
а если и делать - то аккуратно. Вам надо изначальную картинку увеличить до размера 16,384 (либо уменьшить до 8,192 ).
Как говориться power-of-two. После чего это изображение опять же ровно на два делим и далее также как вы уже сделали..

Иначе - чисто математические приколы :)
Простите, не понял: 16,384 - это что? Сторона в пикселях? Почему именно столько? А мой вариант - 9472х9472 для максимального масштаба - почему не подходит?
подходит, для яндекс-разрезателя.
если вы у меньшаете разрешение сами - прийдется идти на уступки.
просто добавьте в свое изображение пустого места до 16384 пикселей. и режте его,
блин, эта автоотправка, простите :(
в общем смысл в том что этот ваш 9472 на два не делиться..
делим делим.. потом получаем 37, 18.5.. остаток 1.15
примерно такое вот неделение и может привести к сдвигу.
Вариант номер два хитрее, так как сдвиг только по Y
описывается он просто - яндекс карты по Y сжимаются не "ровно"
либо в деракторых сжимать надо, либо четко говорить создавателю тайлов, что и какой зум вы ему подсовываете
Дяденька дайте попить, а то так есть хочется, что переночевать негде!:-)
В общем, увеличил я карту до 16384х16384, сохранил в формате PNG (RGB  8bit). Загрузил в программу нарезки, а та выкидывает ошибку - "Не  удалось перевести изображение в режим RGBA (8 бит на канал)". Ладно,  сохранил в формате PNG (indexed color (256)) - та же ошибка! Пробовал на  двух разных машинах с Win7 32 и Win7 64.
Вот здесь лежит сама карта в формате PNG (архив 36 Mb), а здесь исходник в PSD  (архив 36 Mb). Может у кого-нибудь будет возможность  нарезать тайлы: мне нужно 5 уровней масштабирования, максимальный  масштаб - 10