标记 Google 地图 Android 自动 Hide/Show
Marker Google Maps Android Auto Hide/Show
我正在使用 Google 地图 API 开发带有大量标记的地图。这是我的绘图标记函数:
//Draw marker to google map
private void drawMarker(LatLng point,String title,String snipped){
Marker marker=mGoogleMap.addMarker(new MarkerOptions()
.title(title)
.snippet(snipped)
.position(point));
}
并覆盖 Onconnected:
@Override
public void onConnected(Bundle bundle) {
//Get Last Know Location
mLastLocation=LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
Log.i(TAG, "Connection Success");
if(mLastLocation!=null){
curLatLng=new LatLng(mLastLocation.getLatitude(),mLastLocation.getLongitude());
//Get All Wifi to Draw to Google Map
allListWifi=data.getAllLocations();
mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(curLatLng, 17));
for(int j=0;j<allListWifi.size();j++){
//Item wifi
LatLng desLatLng=new LatLng(Double.valueOf(allListWifi.get(j).get("LAT")), Double.valueOf(allListWifi.get(j).get("LNG")));
int distance=Math.round(distancePoints(curLatLng, desLatLng));
drawMarker(desLatLng, String.valueOf(allListWifi.get(j).get("NAME")), String.valueOf(distance));
}
runOnUiThread(new Runnable() {
@Override
public void run() {
adapter.notifyDataSetChanged();
}
});
}
}
问题是:1/ 我的应用程序花费大量时间在 google 地图上绘制标记,而且我的应用程序非常延迟。然后我想只在当前屏幕地图上绘制标记,我是 seeing.When 我移动地图,新标记将出现,旧标记将消失。
2/ 我想在我缩小时将相邻位置聚集在一个组中,并在我放大时它们自动分离。
3/ 非常感谢。祝大家有美好的一天:)
您可以使用 OnCameraChangeListner()
执行此操作。您可以在 onCameraChange()
方法中检查 MarkOption
是否在您的可见区域内。
示例代码:
final List<MarkerOptions> markerOptions = new ArrayList<MarkerOptions>();
markerOptions.add(markerOne);
markerOptions.add(markerTwo);
mMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
LatLngBounds bounds = mMap.getProjection().getVisibleRegion().latLngBounds;
for (MarkerOptions option : markerOptions) {
if (bounds.contains(option.getPosition())) {
mMap.addMarker(option);
}
}
}
});
我正在使用 Google 地图 API 开发带有大量标记的地图。这是我的绘图标记函数:
//Draw marker to google map
private void drawMarker(LatLng point,String title,String snipped){
Marker marker=mGoogleMap.addMarker(new MarkerOptions()
.title(title)
.snippet(snipped)
.position(point));
}
并覆盖 Onconnected:
@Override
public void onConnected(Bundle bundle) {
//Get Last Know Location
mLastLocation=LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
Log.i(TAG, "Connection Success");
if(mLastLocation!=null){
curLatLng=new LatLng(mLastLocation.getLatitude(),mLastLocation.getLongitude());
//Get All Wifi to Draw to Google Map
allListWifi=data.getAllLocations();
mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(curLatLng, 17));
for(int j=0;j<allListWifi.size();j++){
//Item wifi
LatLng desLatLng=new LatLng(Double.valueOf(allListWifi.get(j).get("LAT")), Double.valueOf(allListWifi.get(j).get("LNG")));
int distance=Math.round(distancePoints(curLatLng, desLatLng));
drawMarker(desLatLng, String.valueOf(allListWifi.get(j).get("NAME")), String.valueOf(distance));
}
runOnUiThread(new Runnable() {
@Override
public void run() {
adapter.notifyDataSetChanged();
}
});
}
}
问题是:1/ 我的应用程序花费大量时间在 google 地图上绘制标记,而且我的应用程序非常延迟。然后我想只在当前屏幕地图上绘制标记,我是 seeing.When 我移动地图,新标记将出现,旧标记将消失。
2/ 我想在我缩小时将相邻位置聚集在一个组中,并在我放大时它们自动分离。
3/ 非常感谢。祝大家有美好的一天:)
您可以使用 OnCameraChangeListner()
执行此操作。您可以在 onCameraChange()
方法中检查 MarkOption
是否在您的可见区域内。
示例代码:
final List<MarkerOptions> markerOptions = new ArrayList<MarkerOptions>();
markerOptions.add(markerOne);
markerOptions.add(markerTwo);
mMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
LatLngBounds bounds = mMap.getProjection().getVisibleRegion().latLngBounds;
for (MarkerOptions option : markerOptions) {
if (bounds.contains(option.getPosition())) {
mMap.addMarker(option);
}
}
}
});