Использование файлов KMZ с OpenLayers

У меня есть файл .kmz, и я хочу отобразить данные на карте.
Если я разархивирую файл, извлеку файл .kml и использую его, я смогу заставить карту отображать данные. Однако, поскольку файл .kmz находится где-то еще, мне нужно прочитать этот файл, и в идеале мне не придется анализировать его локально при каждом обновлении.

Мой образец для разбора файла .kml:

var phase1 = new OpenLayers.Layer.Vector("phase1", {
    projection: new OpenLayers.Projection("EPSG:4326"),
    strategies: [new OpenLayers.Strategy.Fixed()],
    protocol: new OpenLayers.Protocol.HTTP({
        url: "data.kml",
        format: new OpenLayers.Format.KML({
            extractStyles: true,
            extractAttributes: true
        })
    })
});

Есть ли что-то в приведенном выше, что нужно изменить, чтобы прочитать файл .kmz?

Я знаю, что Google Maps может напрямую использовать файл .kmz для отображения данных, но возможно ли, чтобы OpenLayers использовал файл .kmz напрямую? Или необходимо каким-то образом проанализировать файл .kmz, чтобы извлечь .kml для отображения?


person Beast-a-tron    schedule 29.10.2014    source источник
comment
Файл kmz — это просто файл kml, который был заархивирован. Таким образом, вам нужно будет создать класс, расширяющий OpenLayers.Format.KML, который добавляет дополнительный шаг, заключающийся в предварительном распаковывании файла.   -  person John Powell    schedule 30.10.2014


Ответы (1)


Сначала нужно разархивировать файл.

  • Либо сделайте это на сервере (что и делают Google Maps).
  • Или используйте что-то вроде JSZip, чтобы сделать это на стороне клиента. Возможно, вам потребуется написать собственный формат для этого.
person lexicore    schedule 01.11.2014
comment
одна из проблем заключается в том, что когда вы распаковываете его, кажется, что многие ссылки теряются. есть ли какие-либо руководства по редактированию kml внутри или умному распаковыванию файлов в правильные места - person Phil; 29.03.2019