Angular agm多段线获取新边的点

Angular agm多段线获取新边的点,angular,google-maps,angular-google-maps,google-polyline,agm,Angular,Google Maps,Angular Google Maps,Google Polyline,Agm,我有一条带有2个agm多段线点的agm多段线。移动直线的边缘(中点)时,我希望使用3个点保存新线。问题是,将边移动到新位置时,事件返回错误的坐标/或仅返回其他对象的坐标 新答案 我以前的回答需要墨卡托投影计算,这并不有趣。进一步研究,有一个polyPathChange事件在有人更新线路时触发。您需要更新agm和rxjs以使用此事件。在这方面,我有一个有效的例子。请注意,我之所以隐藏/显示该行,是因为polyPathChange只触发一次,因此隐藏/显示会重新初始化该行。因此,事件再次发生。是否有

我有一条带有2个agm多段线点的agm多段线。移动直线的边缘(中点)时,我希望使用3个点保存新线。问题是,将边移动到新位置时,事件返回错误的坐标/或仅返回其他对象的坐标

新答案 我以前的回答需要墨卡托投影计算,这并不有趣。进一步研究,有一个
polyPathChange
事件在有人更新线路时触发。您需要更新agm和rxjs以使用此事件。在这方面,我有一个有效的例子。请注意,我之所以隐藏/显示该行,是因为
polyPathChange
只触发一次,因此隐藏/显示会重新初始化该行。因此,事件再次发生。是否有不需要隐藏/显示线路的解决方案?也许吧,但我不知道怎么做

旧答案 我知道这有点晚了,但这个问题没有得到正式的回答

在玩了很长时间之后,我终于明白了到底发生了什么。从
(lineMouseUp)
返回的事件上的lat/lng不是该行的节点,而是新的中点。所以它不是一个随机数,而是
(pointA.lat+pointB.lat)/2
。在将其拼接到阵列中之前,解决此问题的方法是使用以下方程式:

point.lat = (point.lat - this.points[event.edge].lat) * 2 + this.points[event.edge].lat;
point.lng = (point.lng - this.points[event.edge].lng) * 2 + this.points[event.edge].lng;

请注意,这可能不适用于所有半球(我不知道,我没有测试那么多),因此您可能需要检查lat/lng是否为正/负,并调整方程式。这是一个正在运行的

在对我的代码进行了更多测试之后,它对小规模的多段线很好,但在大规模的多段线上却非常糟糕。所以有些东西不是right@KLTR我想我知道为什么它是大范围的马车。对于当前的2D地图,中点是线性的,但纬度在地图上不是线性的,它在赤道附近是非线性的,在两极附近是间隔的。例:如果你画一条从0度到80度的线,实际的纬度中点是40度,但你会得到65度,因为这是地图的线性比例。这是正在发生的事情的参考资料。我试着找到一种不同的方法来捕捉你想要的线的点,在那里它不需要可怕的数学,但我没有任何运气。这可能是你需要问的问题,先生,我和你有同样的问题,但是(polyPathChange)根本没有反应,它仍然对你有效吗?@Massaget从我可以告诉你的,我的答案中的stackblitz仍然有效