OpenLayers使用OSM添加编码多段线

OpenLayers使用OSM添加编码多段线,openlayers,openstreetmap,Openlayers,Openstreetmap,我对开放层比较陌生,但对谷歌地图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

我对开放层比较陌生,但对谷歌地图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贴图加载良好,但不显示多段线。我已经玩了很长一段时间,似乎无法让这个工作。这与预测有关吗?谢谢

你需要做的是改变

vectorLayer.addFeatures(format.read(encoded))

以下

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

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

你需要做的就是改变

vectorLayer.addFeatures(format.read(encoded))

以下

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

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

现在,我阅读了一系列相关的主题,我确信我需要做些什么来设置多段线上的投影,但是我不知道该怎么做。现在我通读了一系列关于SO的相关主题,我确信我需要做些什么来在我的多段线上设置投影,但我不知道该怎么做。