【问题标题】:Fetch markers on Google Map with the moving of map随着地图的移动在谷歌地图上获取标记
【发布时间】:2017-12-12 04:39:34
【问题描述】:
我正在开发一个安卓应用程序,我想在谷歌地图上显示一些标记。我想在用户移动地图时获取标记,而且我有大量标记存储在基于位置的数据库中。要获取标记,我必须通过地图相机上的当前中间位置请求。
所以我要问的是,是否有更好的标准来请求标记,基于用户的移动和地图的当前缩放级别。这里我需要一些优化,比如我不需要再次请求相同的标记。
注意:这里的关键是不要发出不必要的请求来获取标记,也不要在客户端内存中保留更多的标记。
【问题讨论】:
标签:
java
android
google-maps
google-maps-android-api-2
【解决方案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
【解决方案2】:
您想根据当前地图位置显示多个标记,因此首先您需要获取谷歌地图的中心位置并获取该位置的纬度和经度,因此添加此相机更改监听器
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。但返回更多的 lat 和 long。所以当谷歌地图空闲时需要根据当前位置和fatch记录调用api,使用此代码。
googleMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
@Override
public void onCameraIdle() {
Log.e("bug"," location is "+latLng.latitude+ ", "+latLng.longitude);
//call api
}
});
获取记录后首先清除谷歌地图,以便从地图中删除所有添加的标记。
googleMap.clear();
并在地图上添加新标记。
这会帮助你,它会帮助我。