KML位置文件 - 在GoogleEarth中正确显示,但在GoogleMap Base Layer上的OpenLayers2中无法显示

时间:2016-03-13 00:52:50

标签: javascript google-maps-api-3 openlayers kml

我有一组从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来调查地图对象及其图层 - 我可以确认该图层是可见的 - 并且已经绘制,并且图层上没有未渲染的特征 - 表明该图层正在加载 - 它是投射的东西 - 虽然令人困惑。

0 个答案:

没有答案