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<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上有,就不一一举例了
这是项目的demo,适合初学者必看文档方便多了http://download.csdn.net/download/zhayunbiao/9968836
 
这个项目还有很多不懂得地方,希望有懂得人可以交流交流
联系QQ:1925413099


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YBZha

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值