【问题标题】:OpenLayers Adding an encoded polyline with OSMOpenLayers 使用 OSM 添加编码折线
【发布时间】:2013-10-29 04:13:00
【问题描述】:

我对打开图层比较陌生,但对 google maps api 非常熟悉。

我以前用谷歌地图做过以下事情。我基本上是在尝试使用开放图层/开放街道地图复制相同的功能。但是我遇到了一个难题。

map = new OpenLayers.Map("map");

wms = new OpenLayers.Layer.WMS( "OpenLayers WMS", "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
osm = new OpenLayers.Layer.OSM();

map.addLayer(wms);

epsg4326 =  new OpenLayers.Projection("EPSG:4326"); //WGS 1984 projection
projectTo = map.getProjectionObject(); //The map projection (Spherical Mercator)

var lonLat = new OpenLayers.LonLat(-71.3699930, 43.5412410).transform(epsg4326, projectTo);
var zoom=12;
map.setCenter (lonLat, zoom);

var vectorLayer = new OpenLayers.Layer.Vector("Overlay");
var encoded = "_p~iF~ps|U_ulLnnqC_mqNvxq`@";
var format = new OpenLayers.Format.EncodedPolyline({geometryType:"linestring"});
vectorLayer.addFeatures(format.read(encoded));
map.addLayer(vectorLayer);

目前编写代码的方式有效。它加载 WMS 地图、显示折线并正确居中地图。但这不是我想要的,我想要加载 OSM 地图。所以如果我改变这一行:

map.addLayer(wms);

到这里:

map.addLayer(osm);

osm 贴图加载正常,但折线未显示。我已经玩了很长时间了,但似乎无法使其正常工作。跟预测有关系吗?谢谢!

【问题讨论】:

  • 现在阅读一堆关于 SO 的相关主题,我确信我需要做一些事情来在我的折线上设置投影,但我不知道该怎么做。

标签: openlayers openstreetmap


【解决方案1】:

你需要做的是改变

vectorLayer.addFeatures(format.read(encoded));

到下面

vectorLayer.addFeatures(new OpenLayers.Feature.Vector(format.read(encoded).geometry.transform('EPSG:4326', 'EPSG:3857')));

我也遇到了同样的问题,我就是这样解决的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 2021-01-16
    • 2013-08-22
    • 2020-03-25
    • 1970-01-01
    • 2018-11-18
    • 2022-10-21
    相关资源
    最近更新 更多