我正在开发一个Android应用程序,我想在谷歌地图上显示一些标记。我想在用户移动地图时获取标记,并且我根据位置将大量标记存储在数据库中。要获得标记,我必须在地图相机的当前中间位置请求。
所以我要问的是,根据用户的移动和地图的当前缩放级别,是否有更好的标准请求标记。在这里,我需要一些优化,例如我不需要再次请求相同的标记。
注意:此处的关键点是不要对提取标记产生不必要的请求,也不要在客户端内存中保留更多的标记。
答案 0 :(得分:1)
您可以通过覆盖GoogleMap.OnCameraMoveStartedListener,GoogleMap.OnCameraMoveListener,GoogleMap.OnCameraMoveCanceledListener,GoogleMap.OnCameraIdleListener来获取当前的中间相机位置。
@Override
public void onCameraIdle() {
double nextlatitude = mGoogleMap.getProjection().getVisibleRegion().latLngBounds.getCenter().latitude;
double nextlongitude = mGoogleMap.getProjection().getVisibleRegion().latLngBounds.getCenter().longitude;
System.out.println("Location Next : "+nextlatitude+" "+nextlongitude);
}
@Override
public void onCameraMoveCanceled() {
// Toast.makeText(getActivity(), "Camera movement canceled.",
// Toast.LENGTH_SHORT).show();
}
@Override
public void onCameraMove() {
}
@Override
public void onCameraMoveStarted(int reason) {
// if (reason == GoogleMap.OnCameraMoveStartedListener.REASON_GESTURE) {
// Toast.makeText(getActivity(), "The user gestured on the map.",
// Toast.LENGTH_SHORT).show();
// } else if (reason == GoogleMap.OnCameraMoveStartedListener
// .REASON_API_ANIMATION) {
// Toast.makeText(getActivity(), "The user tapped something on the map.",
// Toast.LENGTH_SHORT).show();
// } else if (reason == GoogleMap.OnCameraMoveStartedListener
// .REASON_DEVELOPER_ANIMATION) {
// Toast.makeText(getActivity(), "The app moved the camera.",
// Toast.LENGTH_SHORT).show();
// }
}
你可以通过这个获得当前的缩放级别:
map.getCameraPosition().zoom
答案 1 :(得分:0)
您希望根据当前地图位置显示多个标记,因此首先您需要获取Google地图的中心位置并获取该位置的经纬度,以便添加此相机更改侦听器
View viewMap=mapFragment.getView();
googleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
Point point=new Point();
point.set((int)viewMap.getX(),(int)viewMap.getY());
latLng=googleMap.getProjection().getVisibleRegion().latLngBounds.getCenter();
}
});
这将显示当前中心位置lat long of map。但返回更多lat和long。所以你需要在google map idle根据当前位置和fatch记录调用api时,使用此代码。
googleMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
@Override
public void onCameraIdle() {
Log.e("bug"," location is "+latLng.latitude+ ", "+latLng.longitude);
//call api
}
});
获取记录后首先清除谷歌地图,以便从地图中删除所有添加的标记。 googleMap.clear(); 并在地图上添加新标记。
这对你有所帮助,它帮助了我。