Причина, по которой ваша локальная копия sundials.kml
не будет отображаться, заключается в том, что вы используете OpenLayers.Protocol.HTTP
, который не будет загружать адрес вида file://directory/file.kml
.
Но я 'Я не знаю, почему ваш размещенный код не отображается.В настоящее время я борюсь с той же проблемой.Все, что я могу вам сказать, это то, что еще не работает.
Документация Openlayers объясняет, как слой GML можно использовать для загрузки слоя KML.К сожалению, фрагмент кода, который они приводят в документации, не соответствует их фактическому примеру , который использует векторный слой, как и большинство их других примеров KML (и GML).
Я скопировалкод примера в любом случае, но изменил векторный слой на var layer = new OpenLayers.Layer.GML("GML", "gml/polygon.xml");
согласно документации.Затем я сделал локальные копии Openlayers.js, polygon.xml и .css таблиц стилей и изменил URL, чтобы они указывали на мои локальные копии.Так что все локально.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>GML Doesn't Render</title>
<link rel="stylesheet" href="defaultstyle.css" type="text/css">
<link rel="stylesheet" href="examplesstyle.css" type="text/css">
<script src="OpenLayers.js"></script>
<script type="text/javascript">
var map;
function init(){
map = new OpenLayers.Map('map');
var wms = new OpenLayers.Layer.WMS(
"OpenLayers WMS", "http://vmap0.tiles.osgeo.org/wms/vmap0",
{layers: 'basic'}
);
var layer = new OpenLayers.Layer.GML("GML", "gml/polygon.xml");
map.addLayers([wms, layer]);
map.zoomToExtent(new OpenLayers.Bounds(
-3.92, 44.34, 4.87, 49.55
));
}
</script>
</head>
<body onload="init()">
<div id="map" class="smallmap"></div>
</body>
</html>
Это не работает.
Я также попробовал предложение из документации:
var layer = new OpenLayers.Layer.GML("KML", "kml/lines.kml", {
format: OpenLayers.Format.KML,
formatOptions: {
'extractStyles': true
}
});
Это не работает.
Существует даже конкретный пример загрузки «локально хранящихся векторных данных GML на базовой карте».Он использует тот же код, что и документация, поэтому, разумеется, он не работает.Я не могу гиперссылку на нее, потому что у меня пока недостаточно репутации, чтобы создать три гиперссылки, но вы можете найти ее, если поищете в примерах «GML».
Openlayers имеет функцию безопасности, которая усложняет задачу.загружать данные и javascript из совершенно разных мест (и обходной путь, называемый proxyhost, если вам действительно нужно это сделать).Но я не понимаю, как это могло бы быть связано, когда все URL-адреса указывают на localhost.
Пожалуйста, будьте осторожны, это мой первый пост!
РЕДАКТИРОВАТЬ: Оказывается, что а)это функция безопасности браузера, а не OpenLayers, и б) она не позволяет скрипту на локальном хосте загружать любые другие файлы на локальный хост, даже если вы не в сети.Chrome / Chromium имеет параметр командной строки -allow-file-access-from-files.Используя этот параметр, приведенные выше примеры работают.Другие обходные пути (Google их) кажутся хитрыми.