缩小以适合在地图上的谷歌地图V2的所有标记 [英] zoom to fit all markers on map google maps v2

查看:206
本文介绍了缩小以适合在地图上的谷歌地图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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆