提问人:Bernd 提问时间:11/13/2023 更新时间:11/13/2023 访问量:104
如何在 Android 的 Google 地图上绘制纬度超过 100k 的折线
How to draw a polyline with more than 100k LatLng on Google Maps in Android
问:
我的问题如下:我正在谷歌地图中绘制一条实时折线,到目前为止效果很好。 现在我保存了所有获取的 LatLng 点,稍后我想加载我再次走过的路径。 一旦我有超过 100k,就需要几秒钟才能画出这条折线,如果我必须画出超过 100 万 LatLng 作为折线,则需要非常非常长的时间才能画出它。
现在我想知道是否有可能在合理的时间内绘制超过 100k LatLng 甚至更多的折线(合理时间意味着 1-2 秒! 或者我必须更改为某些 TileServer - 是否有“已经”内置的版本?
非常感谢您的帮助
答:
2赞
Cloverleaf
11/13/2023
#1
我建议以下两种解决方案之一:
减少保存的点数。我还记录了每一次跑步比赛、远足、骑自行车等,但即使在 8 小时后,我的 GPX 文件中也只有大约 10,000 分。我的录音软件大约每 4 秒或 40 米保存一次坐标(这对于马拉松来说绰绰有余)。
或者,您可以简化折线。有一个命令,如果中间点都或多或少都在一条直线上,则删除它们。通过这种方式,我能够将数据量减少到 5-10%,而不会使轨迹变得不那么准确,如以下示例所示。
PolyUtil.simplify(fullLine, tolerance)
评论
0赞
Bernd
11/13/2023
啊太好了,非常感谢:我不知道那个方法:PolyUtil.simplify(fullLine, tolerance)。我会看看的!减少点数是我已经在做的事情。我只是认为可能有一些东西可以处理它,而谷歌地图不适用于这么多数据。
0赞
Bernd
11/13/2023
谢谢。我尝试了 PolyUtil.simplify 方法,它将我的 350k 点减少到 9 点,公差为 40 米。现在我正在考虑如何加速保存/加载/dsiplaying。截至目前,我正在将所有点保存到我的sqlite数据库中,当我想显示路由时,我正在加载所有点并应用PolyUtil。方法。尽管我为列等使用索引,但仍然需要几秒钟才能显示简化的路径。希望我能弄清楚如何让它更快:读取/写入/显示。
0赞
Bernd
11/13/2023
有一个名为 Geo Tracker 的应用程序,虽然我将设置更改为:1 米,1 秒,但我能够立即显示整个路径。可悲的是,它是闭源的。这就是为什么我看不到他到底在做什么。我导出了一个持续了 12 小时的跑步,有 250k 个点,并立即显示出来。
0赞
Cloverleaf
11/13/2023
@Bernd:我读对了吗?您能够将 350k 点减少到 9(公差为 40m)?或者你的意思是 9k?只有 9 分是不可能的,除非你在半径只有 20m 的圆圈上无休止地奔跑;您是否在保存/加载时进行其他计算,例如加起来距离、计算速度等?在保存/加载/显示开始时写入日志文件,然后您可以立即看到需要花费大量时间的内容。
0赞
Cloverleaf
11/13/2023
@Bernd:如果你跑了 12 个小时,每秒保存一次坐标,那只能给你 60x60x12=43'200 点,离 350'000 很远。你怎么得到这么大的数字?
评论