android MapBox地图基于openstreetmap开发

来源:互联网 发布:linux 改机器名 编辑:程序博客网 时间:2024/05/21 07:59

最近在做一个安卓地图项目,需要用到世界地图,但国内谷歌基本已经不能用了,这时就需要一个新的开源api,经过别人的介绍才发现了MapBox 这个开源免费的api,加载速度比osm地图要快多了,一下是我碰到的一些问题,希望可以帮到其他的一些人

    int screenWidth = getActivity().getWindowManager().getDefaultDisplay().getWidth();        float width = DensityUtils.px2dp(context, screenWidth);        zoom = 22 - Math.rint(Math.log(zoomFirst * MERCATOR_RADIUS * Math.PI / (180.0 * width)));        thisSourceDateList = MainActivityAll.getSourceDateList();        WebSourceTileLayer ws = new WebSourceTileLayer("openstreetmap", "http://tile.openstreetmap.org/{z}/{x}/{y}.png");        ws.setName("OpenStreetMap")                .setAttribution("© OpenStreetMap Contributors")                .setMinimumZoomLevel(1)                .setMaximumZoomLevel(21);        mMapView.setTileSource(ws);        mMapView.setCenter(center);        mMapView.setZoom((float) zoom);

这是设置地图的一些基本信息这种WebSourceTileLayer 方法加载的比默认的加载速度快近一倍,不过就是图层不太好看


  LocationListener locationListener = new LocationListener() {        @Override        public void onStatusChanged(String provider, int status, Bundle extras) {        }        @Override        public void onProviderEnabled(String provider) {        }        @Override        public void onProviderDisabled(String provider) {        }        @Override        public void onLocationChanged(Location location) {            // 更新当前设备的位置信息            showLocation(location);        }    };
这是定位的监听

        LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);//locationManager.removeUpdates(locationListener);  ondestroy方法移除监听器        // 获取所有可用的位置提供器        List<String> providerList = locationManager.getProviders(true);        String provider;        if (providerList.contains(LocationManager.GPS_PROVIDER)) {            provider = LocationManager.GPS_PROVIDER;        } else if (providerList.contains(LocationManager.NETWORK_PROVIDER)) {            provider = LocationManager.NETWORK_PROVIDER;        } else {            // 当没有可用的位置提供器时,弹出Toast提示用户            Toast.makeText(context, "No location provider to use",                    Toast.LENGTH_SHORT).show();            return;        }        Log.e("location", provider);        Location location = locationManager.getLastKnownLocation(provider);        if (location != null) {            // 显示当前设备的位置信息            showLocation(location);        }        locationManager.requestLocationUpdates(provider, 5000, 1, locationListener);

在官方的api看的好麻烦啊


MapViewListener mapViewListener = new MapViewListener() 

实例化他的接口,可以监听手势在地图的操作


mMapView.addListener(mapListener);
这个方式可以实例化他的地图图层变化,第一次碰到这种add的,找了我好久
一些地图功能这些方式基本可以实现了,还有一些设置markdr的 ,划线的demo上有,就不一一举例了
这个项目还有很多不懂得地方,希望有懂得人可以交流交流


0 0