【问题标题】:Android Maps Caching Lines Drawn绘制的 Android 地图缓存线
【发布时间】:2011-11-11 00:28:11
【问题描述】:

我正在开发一个应用程序,在 Google Maps SDK 插件上跟踪高速公路线路。

绘制了很多点,无意中使地图导航变得非常缓慢。似乎 iOS 地图解决了这个问题,因为可以绘制大量点而地图不会变得迟钝。

我根据缩放级别开始采样点。例如。缩放级别 7 仅使用每 20 个点并绘制线来跟踪路线。但即便如此,点数仍然太多,最终会导致非常缓慢的平移和缩放体验。

两个问题:

一:是否可以检测到手机中正在显示的地图当前区域,不再画点离屏?

编辑 - 经过初步调查后,很容易检测到剪切区域,而不是绘制点/线。 quickReject 是我为此使用的函数。它对性能没有太大帮助,因为仍在遍历所有点以确定是否必须绘制它们 - 我相信它可以优化。

二:是否有可能缓存正在绘制的路径(可能是路径)(我认为,由于点的投影,这必须按缩放级别完成?)

【问题讨论】:

    标签: android android-maps


    【解决方案1】:

    是否可以检测到手机中正在显示的地图的当前区域,并且不再在屏幕外绘制点?

    是的,你可以得到屏幕四个角的投影:

    Projection proj = mapView.getProjection();
    GeoPoint topLeft = proj.fromPixels(0, 0);
    
    GeoPoint bottomRight = proj.fromPixels(mapView.getWidth()-1, mapView.getHeight()-1);
    
    double topLat = topLeft.getLatitudeE6()/1E6;
    double topLon = topLeft.getLongitudeE6()/1E6;
    double bottomLat = bottomRight.getLatitudeE6()/1E6;
    double bottomLon = bottomRight.getLongitudeE6()/1E6;
    

    渲染时,您应该只选择位于这些边界内的点。

    另见:

    如果您处于非常高的缩放级别,请参阅:

    我个人使用 route simplification algorithms 来减少直线路径上的点数。例如,如果 20 个点位于同一条线上,则使用起点和终点并绘制一条直线是有意义的。

    【讨论】:

    • 谢谢!填充是我可以使用的东西。问题是这些不是标记,而是以线结尾的点 - 比屏幕长的线。所以很有可能,在绘制的线上,起点和终点都在屏幕外,但中间的线在屏幕上。仍然必须遍历所有这些点以查看是否必须绘制它们。
    • 我认为你应该profile your code 看看哪些方法占用了大部分时间。您将确切知道需要优化的地方:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 2011-01-27
    相关资源
    最近更新 更多