http://clubs.ya.ru/mapsap
Блог API Яндекс.Карт поделилось ссылкой i/replies.xml?item_no=808 9 Список вопросов и ответов на основе обсуждений клуба API Яндекс.Карт.В нашем клубе мы обсуждаем много различных вопросов и решаем интересные задачи. На многие вопросы были найдены ответы, которые могут пригодиться новым разработчикам. Для того, чтобы облегчить поиск готовых решений, мы решили подготовить список часто задаваемых вопросов и ответов на них.
Вопросы в этом списке были разбиты на категории для более быстрой и удобной навигации.
Приведенный ниже список будет переодически пополняться и обновляться. Мы надеемся, что он сослужит вам добрую службу.
Типы карт «Схема» и «Спутник не совпадают. Как это можно исправить?
У меня вместо карты отображается серый прямоугольник. Что делать?
Как получить список городов для которых есть подробная карта?
Как преобразовать географические координаты в тайловые и обратно?
Как определять местоположения пользователя в зависимости от IP?
Что делать если кнопки элемента управления обрезаны или смещены?
Как добавить свои кнопки на панель инструментов или удалить стандартные?
У балуна появились отступы, растянулся во всю ширину карты, съехала тень и др.
Сколько меток можно отображать на карте, чтобы не страдала производительность?
Как можно реализовать поиск по объектам, добавленным на карту?
Как задать содержимое значка метки при использовании своего шаблона?
Я записал в поле description новое значение, но в балуне эти изменения не отобразились.
Можно ли подключить слой развязок, панорам или видеокамер в API?
Как обновить все тайлы, отображенные в видимой области карты ?
Как получить доступ к результатам геокодирования/маршрутизатора?
Можно ли инициализировать карту результатами геокодирования?
Как получить список городов для которых есть подробная карта с точностью до дома?
Как установить карту на сайт?
http://api.yandex.ru/maps/jsapi/doc/dg/tasks/quick -start.xml Как разместить несколько карт на одной странице?
http://api.yandex.ru/maps/jsapi/doc/dg/tasks/map-b asics-examples.xml#how-to -add-multiple-maps Как сделать ссылку на текущий фрагмент карты?
http://api.yandex.ru/maps/jsapi/doc/dg/tasks/map-e vents-examples.xml#how-to -create-link-to-map-fragm ents
- Карта не инициализирована (необходимо вызвать метод setCenter()).
- Карта из скрытого контейнера (необходимо вызвать метод redraw() для перерисовки карты). Пример.
- Конфликт стилей css (например, если задать стиль img {width:100%}).
Если не смогли определить проблему, то задайте вопрос в клубе и обязательно дайте ссылку на страницу.
Как получить список городов для которых есть подробная карта?
Список городов для которых есть подробные карты и снимки на Яндекс.Картах можно увидеть здесь http://maps.yandex.ru/?indexКак вставить карту в блог?
Большая часть блогхостеров запрещают использовать JavaScript, поэтому интерактивную карту вставить скорее всего не получится. Однако, вы можете воспользоваться StaticAPI и вставить изображение карты в блог. Подробную информацию о Static API можно найти в разделе Документация, а также воспользоваться инструментом «Конструктор схем проезда», который позволяет в визуальном режиме создать такую карту.
Как преобразовать географические координаты в тайловые и обратно?
Сделать подобные преобразования поможет класс YMaps.TileCoordinates. С помощью метода fromCoordPoint координатной системы можно получить пиксельные координаты точки, которые потом нужно передать в метод fromPixels() класса YMaps.TileCoordinates.
Экземпляры классов YMaps.TileCoordinates и YMaps.ICoordSystem содержатся в полях tileCoordinates и coordSystem объекта карты. var googlePoint = new GLatLng(37.4419, -122.1419), // Геоточка в Google MapsПорядок longlat используется в большинстве GIS систем. Связано это с тем, что в связке широта и долгота, долгота является горизонтальной осью, т.е x, а широта – осью y, и если привести к стандартным (x, y) получится (долгота, широта).
yandexPoint = new YMaps.GeoPoint(-122.1419, 37.4419,); // Геоточка в Яндекс.Картах
KML использует порядок долгота/широта (KML Reference).coordinates>...</coordinates> <!-- lon,lat[,alt] -->У нас, как и у всех, используется проекция EPSG:4326, по спецификации порядок – latlong, но в большей части GIS мира используется longlat. В мире GIS систем нет строго определения порядка следования координат: используют и долгота/широта, и широта/долгота.
...
A geographic location defined by longitude, latitude, and (optional) altitude.Ссылки по теме:
http://geoserver.org/display/GEOSDOC/2.+WFS±+Web+F eature+Service#2.WFS-WebF eatureService-Theaxisorde rissue
http://www.postgis.org/documentation/manual-svn/ST _AsGML.html Как рассчитать расстояние между двумя точками на карте?
Для расчета расстояния между точками на карте необходимо воспользоваться методом distance() координатной системы, используемой на карте. Например, метод distance() географической координатной системы.
Также измерить расстояние можно с помощью инструмента «Линейка».Как определять местоположения пользователя в зависимости от IP?
В API такого функционала в настоящее время нет.
Вам необходимо иметь соответствующую базу данных соответствия IP какой-нибудь локации на карте.
Есть бесплатные базы (у них точность малая, пример использования здесь) и есть платные (которые более точны).
Также существуют бесплатные сервисы, которые предоставляют сервис получения информации по IP-адресу, например, Smart-IP API.
var toolbar = new YMaps.ToolBar([YMaps.ToolBar.MoveButton, YMaps.ToolBar.MagnifierButton]); // Создание панели инструментов без кнопки "Линейка"Добавлять и удалять кнопки можно после создания панели инструментов с помощью методов add() и remove() соотвественно. Подробнее можно прочитать в Руководстве разработчика.Как изменить текст в SearchControl'e?
В настоящее время этого сделать нельзя.
Как отключить замену img на div в IE 6?
В метод setBaloonContent можно передать свой макет (ILayout), внутри которого все в вашей власти.
Посмотрите пример использования.Сколько меток можно отображать на карте, чтобы не страдала производительность?
Мы рекомендуем отображать не более 100 меток на карте.
В случае большого количества меток воспользуйтесь Диспетчером объектов, который позволяет скрывать метки вне видимой области карты, давая тем самым выйгрыш в производительности.
Если же количество объектов исчисляется сотнями, то без разработки серверных скриптов не обойтись. Например, создайте скрипт, который будет в качестве параметров принимать масштаб и область просмотра карты и генерировать YMapsML-документ/JSON с объектами, которые попали в данную область. Таким образом пользователям будет отдавать лишь часть данных, а не все сразу.
Пример реализации: http://probki.avtoradio.ru.Как можно реализовать поиск по объектам, добавленным на карту?
Добавьте объекты в группу, а затем отфильтруйте необходимые с помощью метода filter().Как задать содержимое значка метки при использовании своего шаблона?
Для этих целей можно воспользоваться текстовыми шаблонами или макетами. Преимущество макетов в том, что они позволяют задать поведение шаблонам. Таким образом содержимое значка метки можно будет задавать с помощью стандартного метода setIconContent().
Посмотрите пример с использованием шаблона и макета.Как сделать меню и связать его с объектами на карте?
Подробно процесс создания меню описан в примере по созданию элемента управления «Путеводитель по офисам» и «Как использовать плавное перемещение центра карты». var pl = new YMaps.Placemark(map.getCenter());
pl.setBalloonContent('pl');
map.addOverlay(pl);
var pl2 = new YMaps.Placemark(map.getCenter());
pl2.setBalloonContent('pl2');
map.addOverlay(pl2);
var pl3 = new YMaps.Placemark(map.getCenter());
pl3.setBalloonContent('pl3');
map.addOverlay(pl3);Таким образом щелкнуть можно будет только на pl3.
Я записал в поле description новое значение, но в балуне эти изменения не отобразились.§
При изменении содержимого полей name и description, необходимо вызывать метод update(), чтобы изменения вступили в силу.
Как обновить все тайлы, отображенные в видимой области карты ?
Необходимо изменить шаблон урла в tileDataSource (например, добавить какой-нибудь GET-параметр со случайным числом) и вызвать метод карты update().Как создать свой слой карты и нарезать правильно тайлы?
Вам необходимо изображения карты нужно разрешения порезать на тайлы, соблюдая нумерацию, принятую на картах Яндекса, либо свою. Во втором случаем Вам придется переопределить метод getTileUrl(). За более подробной информацией обращайтесь в раздел Пользовательские карты.
Для нарезки тайлов можно воспользоваться специальной программой.Как менять порядок слоев, используя z-index?
У слоя есть метод getContainer(). Манипулируя z-index-ом HTML-элемента, который возращает этот метод, Вы можете переставлять слои. По умолчанию все добавленные пользователем слои имеют одинаковый z-index, значение которого хранится в константе YMaps.ZIndex.MAP_LAYER. var myData = new YMaps.TileDataSource("http://mt.gmapuploader.com/tiles/FVSH1JsvdT/", true, true);В итоге на 3 масштабе поверх карты будет отображаться дополнительный слой. Осталось этот слой добавить на карту:
myData.getTileUrl = function (tile, zoom) {
if (zoom == 3) {
return this.getTileUrlTemplate() + "/tile-" + zoom + "-" + (tile.y * Math.pow(2, zoom) + tile.x) + ".jpg";
}
}map.addLayer(new YMaps.Layer(myData));Можно поступить по-другому: слушать событие Update карты и при необходимом значении коэффициента масштабирования добавлять слой на карту, в противном случае – удалять его с карты. В этом случае никаких дополнительных условий в методе getTileUrl() прописывать не надо.var myLayer = new YMaps.Layer(myData);
YMaps.Events.observe(map, map.Events.Update, function () {
if (map.getZoom() == 3 && !myLayer.getMap()) {
map.addLayer(myLayer);
} else if (myLayer.getMap()) {
map.removeLayer(myLayer);
}
});Как нанести сетку на слой, который не будет двигаться?
Создайте свой слой, реализовав интерфейс ILayer. Посмотриет пример слоя, который располагает в центре карты зеленый квадратик.
Как получить доступ к результатам геокодирования/маршрутизатора?
Геодирование и маршрутизация – это асинхронные процессы, поэтому необходимо слушать соответствующие события окончания загрузки. Например, для геокодирования это события Load и Fault. Пример.Можно ли получить список домов по заданной улице/области?
Нет, через API такое сделать нельзя.Как реализовать множественное геокодирование объектов?
Стандартного инструмента в API нет. Геокодер может обрабатывать только один адрес (или геоточку, если используется обратное геокодирование).
Важно! Если при отображении карты геокодировать множество адресов, то информация будет доступна только через некоторое время. Лучше все адреса геокодировать (например, с помощью http-геокодера), закэшировать и отображать объекты по координатам, а не по адресу.
Множественное геокодирование можно реализовать на любом из серверных языков программирования, использую http-геокодер. Также можно это сделать и с использованием javascript-геокодера. Пример реализации можно посмотреть тут.Можно ли инициализировать карту результатами геокодирования?
Да, такое возможно сделать. Пример.Как получить список городов для которых есть подробная карта с точностью до дома?
см. Как получить список городов для которых есть подробная карта?Как заставить искать геокодер в определенной стране/городе?
При создании объекта класса YMaps.Geocoder можно указать в параметр boundedBy (область на карте, где предположительнонаходится искомый объект) и флаг strictBounds (искать только в области, определенной в параметре boundedBy). Тогда поиск будет идти именно в этой области. Подробнее можно почитать в статье «Как ограничить область поиска». var ml = new YMaps.YMapsML('http://api.yandex.ru/maps/ymapsml/examples/parents tyleobject.xml');
map.addOverlay(ml);
YMaps.Events.observe(ml, ml.Events.Load, function () {
ml.get(0).forEach(function (obj) {
alert(obj.description);
});
});Также есть метод filter(), который поможет Вам выбрать объекты, отвечающие некоторым условиям. В руководстве разработчика приведен фрагмент кода.
[страна] – Росиия; Украина
[область, республика, край] – Московская область; республика Дагестан; Алтайский край
[район внутри области] – Орехово-Зуевский район
[Город] – Москва; Нижний Новгород; Киев
[район города] – Москва, ЦАО
[город внутри города] – Москва, Зеленоград
[микрорайн, квартал] – Зеленоград, 16-й микрорайон
[улица] – Костромская улица
[километр] – МКАД, 18-ый километр
[дом, строение, корпус, объект] – Москва, ул. Самокатная, дом 1, строение 21; станция Андроновка
Список вопросов и ответов на основе обсуждений клуба API Яндекс.Карт.