Я не уверен, почему вы не хотите напрямую создавать полилинию, но вы можете реализовать свой запрос следующим образом:
// the given points array
let points = [
[51.509, -0.08],
[51.503, -0.06],
[51.51, -0.047]
];
// iterate through the points to dynamically create the elements
for(let i = 0; i < points.length; i++)
{
// every point creates a circle (node)
L.circle(points[i], {radius: 20}).addTo(mymap)
// every pair of adjacent points creates an edge,
// other logic can be implemented
if(i + 1 < points.length){
L.polyline([points[i], points[i+1]]).addTo(mymap);
}
};
Результат выглядит так:
![](https://i.stack.imgur.com/jbuc4.png)
Если вам все еще нужна полилиния целиком, без разделения узлов и ребер, используйте L.polyline
следующим образом:
// create a polyline from an array of points
let polyline = L.polyline(points).addTo(map);
Вы можете найти дополнительную информацию о различных вариантах полилиний и окружностей здесь и здесь.
Возможный API для формата графа, как вы просили, для добавления, извлечения и удаления элементов узлов и ребер может быть следующим:
// points represented by circles
function addNode(lat, lng){
L.circle([lat, lng], {radius: 20}).addTo(mymap);
}
function deleteNode(node){
node.remove();
}
function retrieveNode(node){
let latlng = node.getLatLng();
return [latlng.lat, latlng.lng];
}
// edges represented by polylines
function addEdge(nodeA, nodeB){
L.polyline([retrieveNode(nodeA), retrieveNode(nodeB)]).addTo(mymap);
}
function deleteEdge(edge){
edge.remove();
}
function retrieveEdge(edge)
{
let line = edge.getLatLngs();
return [[line[0].lat, line[0].lng], [line[1].lat, line[1].lng]];
}
Добавив класс Graph, вы можете продолжить это направление и еще больше абстрагироваться от построения карты.
person
Yoav Abadi
schedule
20.10.2018