缩小以适合在地图上的谷歌地图V2的所有标记 [英] zoom to fit all markers on map google maps v2
本文介绍了缩小以适合在地图上的谷歌地图V2的所有标记的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我婉设置缩放级别,以适应在地图上的所有标记。我已经使用下面的方法被更多的人说。 但它不是为我工作。它显示了一些其他的问题。
如果(positions.size()0){
最后LatLngBounds.Builder建设者=新LatLngBounds.Builder();
对于(M标记:位置){
builder.include(m.getPosition());
}
builder.include(positions.get(ⅰ).getPosition());
}
尝试 {
googleMap.setOnCameraChangeListener(新OnCameraChangeListener(){
@覆盖
公共无效onCameraChange(CameraPosition为arg0){
googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(
builder.build(),UserDataManager.getInstance()的getWidth(),UserDataManager.getInstance()的getWidth(),0))。。;
googleMap.setOnCameraChangeListener(空);
}
});
}赶上(IllegalStateException异常E){
// TODO:处理异常
最后查看图形页面= getSupportFragmentManager()
.findFragmentById(R.id.map).getView();
如果(mapView.getViewTreeObserver()。的isAlive()){
mapView.getViewTreeObserver()。addOnGlobalLayoutListener(
新OnGlobalLayoutListener(){
//我们检查哪些构建我们使用的版本。
@覆盖
公共无效onGlobalLayout(){
如果(Build.VERSION.SDK_INT< Build.VERSION_ codeS.JELLY_BEAN){
mapView.getViewTreeObserver()
.removeGlobalOnLayoutListener(
本);
} 其他 {
mapView.getViewTreeObserver()
.removeOnGlobalLayoutListener(
本);
}
googleMap.setOnCameraChangeListener(新OnCameraChangeListener(){
@覆盖
公共无效onCameraChange(CameraPosition为arg0){
googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(
builder.build(),UserDataManager.getInstance()的getWidth(),UserDataManager.getInstance()的getWidth(),0))。。;
googleMap.setOnCameraChangeListener(空);
}
});
}
});
}
}
}
解决方案
尝试使用这种
//计算的标记,以得到他们的位置
LatLngBounds.Builder B =新LatLngBounds.Builder();
对于(M标记:标记){
b.include(m.getPosition());
}
的LatLngBounds边界= b.build();
根据需要//改变填充
CameraUpdate立方米= CameraUpdateFactory.newLatLngBounds(边界,25,25,5);
mMap.animateCamera(CU);
检查这谷歌地图V2库 只需使用
标记M1,M2,M3,M4 ....;
mapHelper.zoomToFitMarkers(M1,M2,M3,M4 ....);
编辑:
获取当前位置
LocationManager locationManager =(LocationManager)getSystemService(Context.LOCATION_SERVICE);
//你可以使用GPS_PROVIDER还
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0,新LocationListener的(){
@覆盖
公共无效onStatusChanged(字符串商,INT地位,捆绑演员){
// TODO自动生成方法存根
}
@覆盖
公共无效onProviderEnabled(字符串提供商){
// TODO自动生成方法存根
}
@覆盖
公共无效onProviderDisabled(字符串提供商){
// TODO自动生成方法存根
}
@覆盖
公共无效onLocationChanged(位置定位){
// TODO自动生成方法存根
currentLatitude = location.getLatitude();
currentLongitude = location.getLongitude();
//添加您的标记位置和缩放以适应它
//mapHelper.zoomToFitMarkers(m1,m2,M3,M4,mapHelper.addMarker(currentLatitude,currentLongitude,当前位置););
}
});
I wan to set zoom level to fit all markers on the map. I have used following method as said by many people. but it is not working for me. it is displaying some other point.
if (positions.size() > 0) {
final LatLngBounds.Builder builder = new LatLngBounds.Builder();
for (Marker m : positions) {
builder.include(m.getPosition());
}
builder.include(positions.get(i).getPosition());
}
try {
googleMap.setOnCameraChangeListener(new OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition arg0) {
googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(
builder.build(), UserDataManager.getInstance().getWidth(), UserDataManager.getInstance().getWidth(),0));
googleMap.setOnCameraChangeListener(null);
}
});
} catch (IllegalStateException e) {
// TODO: handle exception
final View mapView = getSupportFragmentManager()
.findFragmentById(R.id.map).getView();
if (mapView.getViewTreeObserver().isAlive()) {
mapView.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
// We check which build version we are using.
@Override
public void onGlobalLayout() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
mapView.getViewTreeObserver()
.removeGlobalOnLayoutListener(
this);
} else {
mapView.getViewTreeObserver()
.removeOnGlobalLayoutListener(
this);
}
googleMap.setOnCameraChangeListener(new OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition arg0) {
googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(
builder.build(), UserDataManager.getInstance().getWidth(), UserDataManager.getInstance().getWidth(),0));
googleMap.setOnCameraChangeListener(null);
}
});
}
});
}
}
}
解决方案
Try using this
//Calculate the markers to get their position
LatLngBounds.Builder b = new LatLngBounds.Builder();
for (Marker m : markers) {
b.include(m.getPosition());
}
LatLngBounds bounds = b.build();
//Change the padding as per needed
CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, 25,25,5);
mMap.animateCamera(cu);
Check this Google Maps v2 library that i have created that includes this functionality just use
Marker m1,m2, m3, m4 .... ;
mapHelper.zoomToFitMarkers(m1,m2, m3, m4 ....);
EDIT :
Get current location
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
//You can use GPS_PROVIDER also
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, new LocationListener() {
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
currentLatitude = location.getLatitude();
currentLongitude = location.getLongitude();
//Add your marker here and zoom to fit it
//mapHelper.zoomToFitMarkers(m1,m2, m3, m4,mapHelper.addMarker(currentLatitude,currentLongitude,"Current Location"););
}
});
这篇关于缩小以适合在地图上的谷歌地图V2的所有标记的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文