2

leaflet map在同一页面中显示两个不同的 s。在某个事件之后。我想出Polyline现在他们俩身上。如果可能的话,我想避免创建一个副本并保留两个不同的变量。

我正在尝试使用以下内容:

var line_coordinates = [[1,2],[3,4]];
var my_polyline = L.polyline(line_coordinates);
my_polyline.addTo(map1);
my_polyline.addTo(map2);

但是,如果我运行上面的代码,Polyline将只显示在map2.

之后,我需要再次将其坐标更改为 some new_line_coordinates,然后运行以下命令:

my_polyline.setLatLngs(new_line_coordinates);
my_polyline.redraw();

现在polyline应该显示已更新为新坐标。但是,同样,它只出现在map2.

我究竟做错了什么?是否有可能实现我想要做的事情?

4

2 回答 2

4

正如评论中提到的 geocodezip ,将折线添加到地图会设置折线对象的this._map实例变量。因此,无法按照当前实现的方式在两个地图上呈现对象。

您可以在此处查看相关源代码。

于 2013-08-15T15:32:52.087 回答
1

您不能将同一图层添加到多个 Leaflet 地图。但是我在使用更复杂的 GeoJSON 图层组时遇到了类似的问题,最终通过从图层中获取 GeoJSON 对象toGeoJSON()并使用它为第二张地图创建新图层来解决它。对于简单的折线,您可以使用getLatLngs(). 所以:

var line_coordinates = [[1,2],[3,4]];
var my_polyline = L.polyline(line_coordinates);
my_polyline.addTo(map1);
var new_polyline = L.polyline(line_coordinates);
new_polyline.addTo(map2);

应该可以工作,就像:

var line_coordinates = [[1,2],[3,4]];
var my_polyline = L.polyline(line_coordinates);
my_polyline.addTo(map1);
var my_polyline_latlngs = my_polyline.getLatLngs();
var new_polyline = L.polyline(my_polyline_latlngs);
new_polyline.addTo(map2);
于 2015-04-04T14:29:20.670 回答