Отображение файлов KMZ за защищенными сетями

Я пытаюсь отобразить файл KMZ, который находится в папке, защищенной паролем и имеет порт, отличный от 80. Он выглядит так:

http://localhost:8080/assets/data/3641

Это вернет файл KMZ с допустимым типом MIME, и я смогу сохранить и открыть его в Google Планета Земля, если получу доступ к этой ссылке в браузере.

API Google Планета Земля имеет следующие способы отображения KMZ/KML:

  • KmlNetworkLink - вы указываете URL KMZ/KML, а затем присоединяете этот объект к экземпляру GE
  • parseKml() - вы предоставляете ей строку KML, она возвращает вам KmlFeature для присоединения
  • fetchKml() - вы предоставляете ему URL для KML/KMZ, он прикрепляет его для вас
  • Еще один удобный метод - displayKml() из библиотеки служебных программ Google Earth API, который использует fetchKml ()

fetchKml ()

Моя первая попытка состояла в том, чтобы использовать fetchKml, но это не дает ответа - молча происходит сбой. Я удивлен, что плагин считает это нормальным поведением (почему он не генерирует исключение или не предоставляет второй обратный вызов для обработки ошибок?). Этот метод работает нормально, если я приведу пример кмз в виде:

http://localhost/somefile.kmz

Я считаю, что проблема заключается в том, что мой первый URL-адрес защищен паролем - он будет перенаправлен на экран входа в систему, если сеанс входа в систему отсутствует, и я подозреваю, что плагин Google Планета Земля не использует тот же сеанс браузера, что и браузер, поэтому он выходит на экран входа в систему и дает сбой, потому что он получает файл HTML вместо KMZ/KML.

parseKml ()

Нажав на undeterred, я создал другой метод API, чтобы разархивировать KMZ на стороне сервера и вернуть строку KML:

http://localhost:8080/assets/data/unzip/3641

Прелесть этого метода в том, что я пишу свой собственный JavaScript для выполнения запроса GET - он не проходит через Google Планета Земля, поэтому открываемый сеанс входа в систему используется и KMZ можно загрузить. Недостатком является то, что KMZ могут содержать изображения и музыку, на которые может ссылаться файл KML. Они не могут быть переданы вместе со строкой KML, что касается документации.

KmlNetworkLink

Моей последней попыткой было использовать KmlNetworkLink и KmlLink. Это имеет тот же эффект, что и fetchKml - ничего не происходит.

ОБНОВЛЕНИЕ: Кроме того, он не будет работать при использовании "https" без действительного сертификата.

1 ответ

Да, проблема в том, что URL защищен паролем. Ты можешь получить fetchKml() дать некоторое указание на ошибку, если вы используете ее так:

google.earth.fetchKml(ge, 'http://localhost:8080/assets/data/3641
', finishFetchKml);

function finishFetchKml(kmlObject) {
  // check if the KML was fetched properly
  if (kmlObject) {
    // add the fetched KML to Earth
    currentKmlObject = kmlObject;
  } else {
    // setTimeout prevents a deadlock in some browsers
    setTimeout(function() {
      alert('Bad or null KML.');
    }, 0);
  }
}

Kml предназначен для свободного открытого формата - если вы хотите использовать его в защищенной системе для частного использования, вам следует рассмотреть возможность использования корпоративной версии плагина Google Планета Земля.

Другие вопросы по тегам