Основываясь на запросе, опубликованном недавно здесь:
Использование файла KMZ в Leaflet Map
Я попадаю в репозиторий GitHub:
https://github.com/engrabid411/kmzol3
откуда я использовал код для своих собственных файлов.
В основном код вообще не работает в репозитории, показывая только пустую карту.
Однако даже если вы реализуете свой собственный файл, он не изменится.
Код выглядит следующим образом:
var map = new ol.Map({
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
controls: ol.control.defaults({
attributionOptions: /** @type {olx.control.AttributionOptions} */ ({
collapsible: false
})
}),
target: 'map',
view: new ol.View({
center: [0, 0],
zoom: 2
})
});
var nestedKMZData = new Array();
var nestedKMZLinks = new Array();
var hasOwnProperty = Object.prototype.hasOwnProperty;
function isEmpty(obj) {
if (obj == null)return true;
if (obj.length > 0)return false;
if (obj.length === 0)return true;
for (var key in obj) {
if (hasOwnProperty.call(obj, key)) return false;
}
return true;
}
var deferred = $.Deferred();
function readKMZ( url , callback){
if (!/^(?:f|ht)tps?\:\/\//.test(url)) {
url = "http://" + url;
}
JSZipUtils.getBinaryContent(
'proxy/index.php?url='+url,
function(err, data) {
if(err) {
throw err;
}
var zip = new JSZip(data);
for(f in zip.files){
var extractData = zip.files[f].asText();
if (window.DOMParser) {
parser=new DOMParser();
xmlDoc=parser.parseFromString(extractData,"text/xml");
} else { // Internet Explorer
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.loadXML(extractData);
}
var NetworkLink = xmlDoc.getElementsByTagName('NetworkLink');
if(isEmpty(NetworkLink) == true){
nestedKMZData.push(extractData);
deferred.resolve(nestedKMZData);
}
for(var L in NetworkLink){
if(typeof NetworkLink[L] === "object" ){
deferred.notify();
var Link = NetworkLink[L].getElementsByTagName('Link');
var href = Link[0].getElementsByTagName('href')[0].innerHTML;
readKMZ(href);
}
}
}
});
return deferred.promise();
}
var data = readKMZ('http://xjubier.free.fr/download/GE/en/TSE_2001_06_21.kmz');
data.done(function(d){ console.log(d);});
После запуска консоль сообщает:
Доступ к XMLHttpRequest в «http://xjubier.free.fr/download/GE/en/TSE_2001_06_21.kmz' из источника» http://localhost' заблокирован политикой CORS: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin».
а также:
Uncaught Ошибка: InvalidStateError: Не удалось прочитать свойство 'responseText' из 'XMLHttpRequest': значение доступно только в том случае, если 'responseType' объекта '' 'или' text '(was' arraybuffer)«). в XMLHttpRequest.xhr.onreadystatechange (jszip-utils.js: 93)
По моему скромному мнению, ошибка здесь:
function readKMZ( url , callback){
if (!/^(?:f|ht)tps?\:\/\//.test(url)) {
url = "http://" + url;
}
JSZipUtils.getBinaryContent(
'proxy/index.php?url='+url,
function(err, data) {
if(err) {
throw err;
}
, где я не понимаю 'proxy/index.php?url='+url,
. Есть ли какое-то решение, чтобы этот код работал? Я также спрашиваю с точки зрения файлов .kmz, размещенных на моем локальном хосте вместо веб-сервера.