在屏幕上向我显示的区域中的android上的地图中显示标记

时间:2018-09-03 06:57:48

标签: android google-maps screen-size

我正在使用Google Maps。假设我的数据库中存储了大约一百万个位置标记。我想要做的是仅加载或显示当前应在屏幕上显示的地图部分上的那些标记。 (例如,如果我的地图显示的是亚洲,那么它应该只显示在亚洲的标记;如果我移到地图上的任何其他地方,它应该显示该地区的标记。)我正在这样做,所以我不不必一次加载整个数据库,因为这可能会导致应用程序延迟。我尝试使用Spatialite,但找不到很好的教程或有关如何使用它的信息。这是我关注的链接之一,但我没有一个好主意。还有其他方法可以做到吗,还是Spatialite是最佳选择?

1 个答案:

答案 0 :(得分:0)

您将必须找出从数据库中检索这些位置的最佳方法,但是一种基于地图摄像机位置添加标记的方法是在GoogleMap.OnCameraChangeListener中添加相关标记。

// Check to see if your GoogleMap variable exists.
if (mGoogleMap != null) {
    // Respond to camera movements.
    mGoogleMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener() {
        @Override
        public void onCameraMove() {
            // Get the current bounds of the map's visible region.
            LatLngBounds bounds = mGoogleMap.getProjection().getVisibleRegion().latLngBounds;
                // Loop through your list of positions.
                for (LatLng latLng: yourLatLngList) {
                    // If a position is inside of the bounds,
                    if (bounds.contains(latLng)) {
                        // Add the marker.
                        mGoogleMap.addMarker(new MarkerOptions()
                                    .position(latLng));
                    }
                }
        }
   });
}

我不建议每次更改地图相机的位置时都要遍历一百万个位置。我认为最好的方法是在移动相机时获取地图可见区域的当前边界,然后在调用中将边界发送到另一个线程上的后端,并让后端完成找到适合这些范围的位置,然后将该列表返回给您的应用,您可以在其中相应地添加标记。