首先:即使您在编译时不知道点(位置)的集合,也可以计算中心:在运行时您知道所有点(否则无法将坐标插入 URL) ,因此您可以轻松地遍历所有点并计算中心。您可以计算所有坐标的平均值并获得几何中心(也称为质心):这是更简单的方法。另一种方法是检查最远的一对位置(纬度和经度),然后将中间点设置为中心:这需要更多的编码(例如计算需要考虑的经度距离)您必须计算两个方向的距离,因为可以“环游世界”,而且复杂度更高。
我不会深入探讨这个主题,因为即使您正确计算了点的中心,这也不能解决问题,而且 Google 静态地图 API 自动提供的中心始终是正确的:再次center 与问题有关,但不是问题的(原因)。
要记住一个微不足道但重要的方面:Google 静态地图始终通过考虑最短路径(即通过绘制最短直线)在两个位置之间绘制路径。
因此,如果您的路径必须从位置 A 到位置 B,而 A 和 B 之间的最短路径“环游世界”(或者更好的是,它从图像),然后路径显示为“borken”,如您显示的地图中所示。在实践中,A 和 B 靠近地图的左右边缘,由于路径的其他点,地图不能在 A 和 B 之间的最短路径上的某个点居中。这就是当您删除“罗马”时会发生的情况:没有罗马,地图可以以不中断路径的方式居中。
形式上,我认为问题出现了(即路径断了),当路径在赤道上的投影长于经度360度,并且路径总是在同一个方向上(即总是西到东或总是从东到西)。
在这种情况下,Google 静态地图只是在第一个世界地图旁边添加另一个世界地图:如果将缩放设置为最小,则最多可以看到三个世界地图。这实际上是不切实际的,原因如下:
我google了很多关于这个问题,我没有找到任何解决方案,在错误跟踪器上打开了一个错误,但没有解决。
在我看来,“正确”的做法很简单:最多一张地图,如果一条路径必须从地图/图像的一个边距出去,那么它应该出现在相反的边距上并继续目的地,绘制在同一张地图上。
所以我找到了第一个解决方法:
- 您绘制路径,并且使用相同的样式(线的颜色等)您还可以以相反的方式绘制路径(Google 静态地图允许在同一地图中绘制多条路径),即 path=A|B| C&path=C|B|A 这将解决许多情况下的问题(即路径从图像的一侧退出并从另一侧进入)。不幸的是,这并不总是有效:如果您的路径连续两次穿过图像边缘,那么您会丢失部分路径
为了解决这个问题,我找到了第二种解决方法:
- 不要简单地绘制路径及其反向,而是为路径的每一对位置(和反向)绘制不同的路径,即对于路径 A->B->C 然后:path:A|B,path=B |C,path=C|B,path=B|A 这总是有效的
缺点是这样URL会变得很长,很容易达到2048个字符的限制。
最好的解决方案是手动计算中心,手动检查路径将穿过边缘的位置,并且只为这部分路径绘制一条额外的路径,在边缘的两个位置之间(也可能反过来),但我认为这并不值得,尽管我认为 Google 永远不会解决这个问题。