我正在使用Google地图。假设我的数据库中存储了大约100万个位置标记。我想要做的是加载或仅显示应当在屏幕上当前显示的地图部分上的那些标记。 (例如,如果我的地图显示亚洲,它应该只显示亚洲的标记;如果我移动到地图上的任何其他位置,它应该显示该区域的标记。)我这样做所以我不喜欢必须立即加载整个数据库,因为这可能会导致应用程序延迟。我尝试使用Spatialite,但我找不到一个好的教程,或者有关如何使用它的信息。这是我遵循的链接之一,但我没有得到一个好主意。还有其他方法可以做到这一点,还是Spatialite是最佳选择?
您必须找出从数据库中检索这些位置的最佳方法,但根据地图相机的位置添加标记的一种方法是在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));
}
}
}
});
}
每次地图的相机位置发生变化时,我都不会建议循环一百万个位置。我认为最好的方法是在移动相机时获取地图可见区域的当前边界,然后在不同的线程上将调用中的边界发送到后端,让后端完成工作找到适合这些边界的位置,然后将该列表返回到您的应用程序,您可以相应地添加标记。