android MapBox地图基于openstreetmap开发

最近在做一个安卓地图项目,需要用到世界地图,但国内谷歌基本已经不能用了,这时就需要一个新的开源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 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上有,就不一一举例了
这是项目的demo,适合初学者必看文档方便多了http://download.csdn.net/download/zhayunbiao/9968836

这个项目还有很多不懂得地方,希望有懂得人可以交流交流
联系QQ:1925413099


你可能感兴趣的:(android地图开发,android地图,mapbox地图,openstreetmap地图,开源,免费)