Leaflet - 如何显示标记而不是折线

时间:2015-02-10 07:46:51

标签: javascript leaflet polyline

我目前使用javascript和mySQL有一组很好地声明的纬度/经度点数组,当我使用这组数组作为折线显示它是成功的。

var polyline = L.polyline(xxx).addTo(map);

然而,当我厌倦了改变标记时,地图没有描绘出任何标记。

有任何帮助吗?非常感谢:)

1 个答案:

答案 0 :(得分:0)

因为L.Polyline,将多个lat / lng坐标的嵌套数组作为第一个参数,L.Marker采用带有lat / lng坐标的单个数组。签名是不同的:

L.Polyline:

new L.Polyline([[-45, -45], [45, 45]], {/*options*/});

L.Marker:

new Marker([-45, -45], {/*options*/});

当您将嵌套数组传递给L.Marker时,就像上面折线中显示的那样,它会抛出一个错误:

  

未捕获的TypeError:无法读取属性' lat'为null

如果您想使用折线的坐标集在线的起点和/或终点显示标记,您可以这样做:

var coordinates = [[-45, -45], [45, 45]];

var startMarker = new Marker(coordinates[0], {/*options*/});
var endMarker = new Marker(coordinates[1], {/*options*/});

正如评论中所承诺的,从大型数组中添加标记的另一种更简单的方法是:

var coordinates = [
  [-41.31825,174.80768],
  [-41.31606,174.80774],
  [-41.31581,174.80777],
  [-41.31115,174.80827],
  [-41.30928,174.80835],
  [-41.29127,174.83841],
  [-41.33571,174.84846],
  [-41.34268,174.82877]
];

coordinates.forEach(function (coordinate) {
  new L.Marker(coordinate).addTo(map);
});

比做起来容易得多:

new L.Marker(coordinate[0]).addTo(map);
new L.Marker(coordinate[1]).addTo(map);
new L.Marker(coordinate[2]).addTo(map);
new L.Marker(coordinate[3]).addTo(map);
new L.Marker(coordinate[4]).addTo(map);
new L.Marker(coordinate[5]).addTo(map);
new L.Marker(coordinate[6]).addTo(map);
new L.Marker(coordinate[7]).addTo(map);

关于Plunker的工作示例:http://plnkr.co/edit/3dbJgb?p=preview