【发布时间】:2021-01-08 23:32:59
【问题描述】:
我正在尝试在谷歌地图 v2 上画很多圆圈(大约 1k)。不幸的是,有些东西很慢,绘制所有圆圈时地图也很迟钝。我在 stackoverflow 上阅读了很多内容,但还没有找到解决方法。
圆圈代表 GPS 路径(步行),因此此处显示 1k 或数百个点是有意义的(当然取决于缩放级别)。
我想我正在创建许多导致性能问题的对象:
CircleOptions circleOptions = new CircleOptions();
circleOptions.center(new LatLng(latitude, longitude)).clickable(false).strokeWidth(2).strokeColor(Color.BLACK).fillColor(colorInHex)
.radius(0.7);
Circle circle = googleMap.addCircle(circleOptions);
从房间数据库中检索数据
repository.getByLatLngBounds(projection.northeast.latitude, projection.northeast.longitude, projection.southwest.latitude, projection.southwest.longitude, new callback() {
@Override
public void loaded(List<MyPoint> points) {
if (points != null && googleMap != null) {
// iterate and draw points with circle
}
}
});
解释:
- 我无法减少圆圈的数量,因为我已经只针对地图的可见边界
- 数据(圆的坐标)是从房间数据库中检索的,但实际上不到 1 秒就可以得到结果(来自异步任务)
- 如果用户在地图上移动,我不会重绘所有点(我会跟踪所有绘图点,如果该点已经绘制,我什么也不做)
- 我使用的是安卓谷歌地图 v2
- 我没有尝试使用自定义可绘制对象(性能应该更差)。
- 问题不在于标记显示,而是绘制点(因为我不想在这里绘制多边形)
基准测试数字:1227 分需要 10 秒才能绘制,听起来很慢不是吗?
在这种情况下,提高性能的方法是什么?任何帮助将不胜感激。
【问题讨论】:
-
即使在可见范围内,用户也无法识别价值 2k 的不同对象。在不知道圆圈代表什么或您所处的缩放级别的情况下,我会使用热图或加权标记(圆圈)将事物聚集在一起,并且仅在缩小时放大/隐藏时显示(参见视频: developers.google.com/maps/documentation/android-sdk/utility/…)
-
它可以被识别,但用户因为我绘制“路径”(但不是多边形,单个圆圈)。据我所知,聚类是显示标记而不是简单的圆圈。问题不在于标记,而在于这里的绘图点。如果您能提供帮助,我已经编辑了更多信息。问候。
-
我认为画一个 2k 的圆圈来显示路径是一种矫枉过正,你需要排除在同一条线上的点,并以某种方式在这组点的两个边缘点之间绘制一条路径.
-
这不是矫枉过正,因为它不完全是“路径”。我可以尝试绘制折线,但这不是这里的目的。我也做了基准测试,你可以看到显示 1227 个点大约需要 10 秒,这听起来很慢,不是吗?
标签: android performance google-maps google-api