我有一组从GoogleEarth保存为KML文件的地方。我试图使用以下Js代码在一个简单的OpenLayer2地图上显示相同的位置:
var map;
function init() {
var bounds = new OpenLayers.Bounds();
bounds.extend( new OpenLayers.LonLat(0.2, 52.3).transform('EPSG:4326', 'EPSG:3857'));
bounds.extend( new OpenLayers.LonLat(1.9, 51.5).transform('EPSG:4326', 'EPSG:3857'));
map = new OpenLayers.Map('map', {
projection: 'EPSG:3857',
layers: [
new OpenLayers.Layer.Google(
"Google Streets", // the default
{ numZoomLevels: null, minZoomLevel: 1, maxZoomLevel: 16 }
),
],
controls: [ new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoomBar(),
],
center: new OpenLayers.LonLat( 1.0, 52.1)
// Google.v3 uses web mercator as projection, so we have to
// transform our coordinates
.transform('EPSG:4326', 'EPSG:3857'),
restrictedExtent: bounds,
zoom: 9,
});
var layer = new OpenLayers.Layer.Vector("KML", {
animationEnabled: true,
projection: map.displayProjection,
strategies: [new OpenLayers.Strategy.Fixed()],
protocol: new OpenLayers.Protocol.HTTP({
url: "/static/OL3Example/kml/locations.kml",
format: new OpenLayers.Format.KML({
extractStyles: true,
extractAttributes: true
})
})
}) ;
map.addLayer(layer);
map.addControl(new OpenLayers.Control.LayerSwitcher());
}
Restricted Extends使地图显示只有SUffolk,Uk,除了4个位置以外的所有地点都在Suffolk(所以应该在地图上)。查看KML数据,我可以确认KML中的位置是正确的Decimal Lon / Lat。
当我从地图中删除Restricted Extent时 - 我可以在全世界范围内平移,然后我可以在0 Lon,0 Lat看到一组图标。
我查看了文档 - 以及一些与stackoverflow相关的问题:例如OpenLayers not displaying kml layer,但没有人回答过这个问题。
我使用Firebug来调查地图对象及其图层 - 我可以确认该图层是可见的 - 并且已经绘制,并且图层上没有未渲染的特征 - 表明该图层正在加载 - 它是投射的东西 - 虽然令人困惑。