Клуб API Карт

geoXml как слой

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

Всем привет скажите можно ли загружать KML фал на карту как слой?

10 комментариев

правельный ли это вариант?

roadsURL = "http://openflights.org/demo/openflights-sample.kml";

_Road = ymaps.geoXml.load(roadsURL)

    .then(function (res) {

        myMap.geoObjects.add(res.geoObjects);

    });

 

myMap.layers.add(_Road);

Последняя строчка лишняя, а так все в порядке

использование geoXml.load - это и есть создание и наложение слоя?

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

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

load - это загрузка данных

а вот map.geoObjects.add... - это их добавление на карту

как пример опишу что я бы хотел сделать, может посоветуете сделать по другому. У меня есть KML файл с дорогами например америки я хочу их все выгрузить на карту что бы сравнить с теми что есть у яндекса, пологаю что выгрузка из файла будет довольно долго проходить т.к какждую линию прийдется рисовать.

 

это только через geoXml.load ?

1. Вы можете использовать kml, это самое простое решение, но если объектов много, то это будет долго и карта будет тормозить

2. Вы можете делать то же самое, но предварительно отсеивать объекты, которые не попадают в видимую область карты

3. Вы можете генерировать на сервере хотспотные тайлы и отображать эти дороги через хотспоты. Но это потребует серверной разработки.

хм 2 вариан заинтересовал меня, есть пример кода подобного функционала?

неужели нет примера, в песочнице ничего подобного не нашел

Сколько геообъектов (ломаных) в вашем файле?
Я думаю что вариант 2, предложенный   в случае ломаных мало чем поможет.

Я бы рекомендовал 3-й вариант

Можно попробовать провернуть это через geoQuery. Есть тонкость, что geoQuery умеет работать только с объектами, добавленными на карту. Поэтому можно попробовать так.

1. Берем коллекцию и добавляем ее в geoQuery

2. Выставляем всем элементам visible: false

3. Добавляем объекты на карту

4. Отсеиваем объекты через метод searchInside(map)

5. У отсеянных объектов выставляем опцию visible: false