Leaflet 1.0升级后,spliceLatLngs有哪些替代方案?

5
在升级至Leaflet 1.0之前,我使用spliceLatLngs方法将坐标放置在折线对象中,例如:
line.spliceLatLngs(index, 1, new L.LatLng(lat, lng));

然而,最近的升级中,由于新的折线有嵌套坐标数组,因此spliceLatLngs被重构掉了。

我尝试使用以下替代方法:

var latLngs = line.getLatLngs();

// Because I don't need the multi-dimensional array here
if (line instanceof L.Polygon) {
    latLngs = latLngs[0];
}

if (data) {
    latLngs.splice(index, 1, data);
} else {
    latLngs.splice(index, 1);
}
line.redraw();

但是使用这种替代方法似乎会摆脱尾随坐标。:(

我是否错过了将坐标拼接到现有折线中的明显方法?

提前感谢你!


数据分配给什么?else语句不是基本上保证了尾坐标被删除吗? - The Brofessor
@TheBrofessor 如果数据集为空,我希望删除坐标,但如果为真,则期望从latLngs中删除数据。这里的数据通常是一个latLng。 - Josef E.
这个能有帮助吗?链接 - MarcoL
@MarcoL这是否需要更改库代码?因为我不想改变库代码:( - Josef E.
@MarcoL发布的链接指向一个解决方案,看起来几乎与您的相同。我尝试复制了一下问题,但是您的代码似乎对我有效:https://plnkr.co/edit/08gZmiImOTOUCG3zSh72?p=preview 您可以分享一些让您感到困扰的代码和折线数据吗?请随意编辑/分叉该plunker代码。 - chrki
@chrki 我可能在其他地方遇到了问题,但是那段代码有点乱... :( 我会整理一下并回复。谢谢你的时间! :) - Josef E.
1个回答

1
你可以创建一个助手函数来替换spliceLatLngs,以下是TypeScript的示例:
 spliceLatLngs(polyline: L.Polyline, start: number, deleteCount: number, ...items: L.LatLng[]) {
        const latlngs: L.LatLng[] = polyline.getLatLngs();
        latlngs.splice(start, deleteCount, ...items);
        polyline.setLatLngs(latlngs);
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接