Слои KML и GeoRSS

  1. Обзор
  2. Параметры слоя KML
  3. Детали элементов KML

Слой KmlLayer выполняет визуализацию элементов KML и GeoRSS на мозаичном наложении Maps API V3.

Обзор

Google Maps API поддерживает форматы данных KML и GeoRSS для отображения географической информации. Эти форматы данных отображаются на карте с помощью объекта KmlLayer, конструктор которого использует URL общедоступного файла KML или GeoRSS.

Примечание. На странице Поддержка KML в документации по KML можно найти информацию о поддерживаемых элементах и ограничениях по размеру и сложности.

Maps API преобразует предоставленные географические данные XML в представление KML, которое отображается на карте с помощью мозаичного наложения V3. Слой KML выглядит как знакомые элементы наложения V3 (и иногда имеет аналогичное поведение). Элементы KML <Placemark> и GeoRSS point визуализируются как маркеры, например, визуализация элементов <LineString> выполняется в виде ломаных линий, а визуализация элементов <Polygon> выполняется в виде многоугольников. Элементы <GroundOverlay> визуализируются как прямоугольные изображения на карте. Следует отметить, что эти объекты не являются объектами Marker, Polyline, Polygon или GroundOverlay Google Maps API, а визуализируются в виде отдельного объекта на карте.

Объекты KmlLayer отображаются на карте, если для них установлено свойство map. Их можно удалить с карты, вызвав метод setMap() и передав ему значение null. Объект KmlLayer управляет визуализацией этих дочерних элементов, автоматически получая соответствующие элементы для заданных границ области на карте. При изменении границ автоматически выполняется визуализация элементов в текущей области просмотра карты.

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

Параметры слоя KML

Конструктор KmlLayer() может передавать ряд параметров KmlLayerOptions:

  • map – указывает объект Map для визуализации слоя KmlLayer. Вы можете скрыть слой KmlLayer, установив для этого параметра значение null с помощью метода setMap().
  • preserveViewport – указывает, что карту не следует подстраивать под границы содержимого KmlLayer при отображении слоя. По умолчанию при отображении слоя KmlLayer масштаб карты изменяется, а сама карта смещается так, чтобы все содержимое слоя отображалось полностью.
  • suppressInfoWindows – указывает, что поддерживающие нажатие элементы в слое KmlLayer не должны отображать объекты InfoWindow.

Кроме того, после визуализации слой KmlLayer имеет постоянное свойство metadata, которое содержит название слоя, описание, фрагмент текста и данные автора в литерале объекта KmlLayerMetadata. Эту информацию можно просмотреть с помощью метода getMetadata(). Поскольку для визуализации объекта KmlLayer требуется асинхронная связь с внешним сервером, вам понадобится отслеживать событие metadata_changed, указывающее на установку значения свойства.

В следующем примере создается слой KmlLayer по указанным данным GeoRSS:

function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 4,
    center: {lat: 49.496675, lng: -102.65625}
  });

  var georssLayer = new google.maps.KmlLayer({
    url: 'http://api.flickr.com/services/feeds/geo/?g=322338@N20&lang=en-us&format=feed-georss'
  });
  georssLayer.setMap(map);
}

Просмотр примера GeoRSS

В следующем примере создается слой KmlLayer по указанным данным KML:

function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 11,
    center: {lat: 41.876, lng: -87.624}
  });

  var ctaLayer = new google.maps.KmlLayer({
    url: 'http://googlemaps.github.io/js-v2-samples/ggeoxml/cta.kml',
    map: map
  });
}

Просмотр примера KML

Детали элементов KML

Поскольку слой KML может содержать большое количество элементов, вы не можете получить их данные непосредственно из объекта KmlLayer. Вместо этого вы можете использовать визуализированные элементы аналогично наложениям Maps API, поддерживающим нажатия. По умолчанию при нажатии отдельных элементов выводится объект InfoWindow, который содержит данные KML <title> и <description> соответствующего элемента. Кроме того, при нажатии элемента KML генерируется событие KmlMouseEvent, которое передает следующую информацию:

  • position – указывает координаты (широту и долготу), к которым будет привязан объект InfoWindow для данного элемента KML. Эта позиция обычно соответствует точке нажатия для многоугольников, ломаных линий и наземных наложений, либо реальному местоположению для маркеров.
  • pixelOffset – указывает смещение относительно вышеуказанных координат position для привязки "указателя" объекта InfoWindow. Для многоугольных объектов это смещение обычно равно 0,0, а для маркеров оно включает высоту маркера.
  • featureData – содержит структуру JSON данных KmlFeatureData.

Пример объекта KmlFeatureData приведен ниже:

{
  author: {
    email: "[email protected]",
    name: "Mr Nobody",
    uri: "http://example.com"
  },
  description: "description",
  id: "id",
  infoWindowHtml: "html",
  name: "name",
  snippet: "snippet"
}

В следующем примере при нажатии элемента KML отображается соответствующий ему текст <Description> в боковой панели <div>:

function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 12,
    center: {lat: 37.06, lng: -95.68}
  });

  var kmlLayer = new google.maps.KmlLayer({
    url: 'http://kml-samples.googlecode.com/svn/trunk/kml/Placemark/placemark.kml',
    suppressInfoWindows: true,
    map: map
  });

  kmlLayer.addListener('click', function(kmlEvent) {
    var text = kmlEvent.featureData.description;
    showInContentWindow(text);
  });

  function showInContentWindow(text) {
    var sidediv = document.getElementById('content-window');
    sidediv.innerHTML = text;
  }
}

Просмотр примера KML

Оставить отзыв о...

Текущей странице
Google Maps Javascript API
Google Maps Javascript API
Нужна помощь? Обратитесь в службу поддержки.