Android绘制缓存线

Android绘制缓存线,android,android-maps,Android,Android Maps,我正在开发一个应用程序,它可以在谷歌地图SDK插件上追踪公路线路 绘制了很多点,这在不经意间使地图的导航速度非常缓慢。iOS地图似乎解决了这个问题,因为可以绘制大量的点,而地图不会变得迟钝 我根据缩放级别开始采样点。例如,“缩放级别7”仅使用每20个点绘制一条直线来追踪路线。但是,即使这样,仍然有太多的点,并以非常缓慢的平移和缩放体验结束 两个问题: 第一:是否可以检测手机中显示的地图的当前区域,并且不再在屏幕外绘制点 编辑-经过初步调查后,可以很容易地检测剪裁区域,而不是绘制点/线。是我用于此

我正在开发一个应用程序,它可以在谷歌地图SDK插件上追踪公路线路

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

我根据缩放级别开始采样点。例如,“缩放级别7”仅使用每20个点绘制一条直线来追踪路线。但是,即使这样,仍然有太多的点,并以非常缓慢的平移和缩放体验结束

两个问题:

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

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

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

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

是的,您可以获得屏幕四个角的投影:

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;
渲染时,应仅选择位于这些边界内的点

另见:

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


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

谢谢!填充是我可以使用的东西。问题是这些不是标记,而是以线条结束的点——比屏幕长的线条。所以很有可能,在绘制的直线上,起点和终点都在屏幕外,但两者之间的直线在屏幕上。仍然需要遍历所有这些点,以查看是否必须绘制它们。我认为您应该查看哪些方法占用了大部分时间。您将确切地知道需要优化的位置:)