zoukankan      html  css  js  c++  java
  • 【“零起点”百度地图手机SDK】如何使用离线地图?

    摘要:用户使用地图的时候,希望不联网就能展示地图。这时,就需要使用到离线地图了。如何在百度地图SDK里引入离线地图呢?

    -------------------------------------------------------------------------------------------------------------------

    相关阅读:

    1、【百度地图-安卓SDK】从头开始写android程序
    http://www.cnblogs.com/milkmap/archive/2011/11/25/2263475.html 

    2、【“零起点”--百度地图手机SDK】如何创建一张地图
    http://www.cnblogs.com/milkmap/archive/2012/05/11/2496526.html

    -------------------------------------------------------------------------------------------------------------------

    一、下载离线地图包

    到官网下载离线地图包,网址:http://shouji.baidu.com/map/map.html?from=3052

    首先选择了手机品牌和手机型号:

    选择好手机后,系统会出来提示。请选择旧版本地图进行下载。

    因为目前SDK只能使用栅格图,所以我们必须下载旧版本的地图。后期SDK将支持矢量图,到时候北京市的离线地图就从114M降低到14M了。

    预计6月份就能使用新版离线地图了~~~

    比如,我选择下载了北京市的离线地图:

    解压后,有两个文件。一个是BaiduMap,一个是安装说明。

    不要管安装说明,把BaiduMap打开,能看到Mapdata文件夹。拷贝这个文件夹。

    将Mapdata文件夹拷贝到手机SD卡的BaiduMapSdk文件夹根目录下。

    二、编写离线地图代码

    找到主java文件,并在activity里申明变量。

    MKOfflineMap mOffline = null;   //离线地图变量

    然后在onCreate函数里写离线地图初始化的代码:

        /** 离线地图初始化  **/
            mOffline = new MKOfflineMap();
            mOffline.init(mBMapMan, new MKOfflineMapListener() {
                public void onGetOfflineMapState(int type, int state) {
                    switch (type) {
                    case MKOfflineMap.TYPE_DOWNLOAD_UPDATE:
                        {
                            MKOLUpdateElement update = mOffline.getUpdateInfo(state);
                            //mText.setText(String.format("%s : %d%%", update.cityName, update.ratio));
                        }
                        break;
                    case MKOfflineMap.TYPE_NEW_OFFLINE:
                        Log.d("OfflineDemo", String.format("add offlinemap num:%d", state));
                        break;
                    case MKOfflineMap.TYPE_VER_UPDATE:
                        Log.d("OfflineDemo", String.format("new offlinemap ver"));
                        break;
                    }    
                      }
            }
            );
            /** 离线地图导入离线包 **/
            int num = mOffline.scan();
            //if (num != 0)   mText.setText(String.format("已安装%d个离线包", num));

    三、连真机,看运行看结果。

    看,这是没有联网,展示地图的效果。

    四、java文件全部源代码

    package com.baidu.searchpoi;
    
    import android.app.Activity;
    import android.os.Bundle;
    
    /** 引入类 **/
    import java.util.ArrayList;
    import java.util.List;
     
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Paint;
    import android.graphics.Point;
    import android.graphics.drawable.Drawable;
    import android.location.Location;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Toast;
     
    import com.baidu.mapapi.BMapManager;
    import com.baidu.mapapi.GeoPoint;
    import com.baidu.mapapi.ItemizedOverlay;
    import com.baidu.mapapi.LocationListener;
    import com.baidu.mapapi.MKAddrInfo;
    import com.baidu.mapapi.MKDrivingRouteResult;
    import com.baidu.mapapi.MKGeneralListener;
    import com.baidu.mapapi.MKLocationManager;
    import com.baidu.mapapi.MKOLUpdateElement;
    import com.baidu.mapapi.MKOfflineMap;
    import com.baidu.mapapi.MKOfflineMapListener;
    import com.baidu.mapapi.MKPlanNode;
    import com.baidu.mapapi.MKPoiResult;
    import com.baidu.mapapi.MKSearch;
    import com.baidu.mapapi.MKSearchListener;
    import com.baidu.mapapi.MKTransitRouteResult;
    import com.baidu.mapapi.MKWalkingRouteResult;
    import com.baidu.mapapi.MapActivity;
    import com.baidu.mapapi.MapController;
    import com.baidu.mapapi.MapView;
    import com.baidu.mapapi.MyLocationOverlay;
    import com.baidu.mapapi.Overlay;
    import com.baidu.mapapi.OverlayItem;
    import com.baidu.mapapi.PoiOverlay;
    import com.baidu.mapapi.RouteOverlay;
    import com.baidu.mapapi.TransitOverlay;
    
    /** activity **/
    public class SearchPOIActivity extends MapActivity {
        //申明变量
        BMapManager mBMapMan = null;  
        MapView mMapView = null; 
        MKOfflineMap mOffline = null;   //离线地图变量
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            mBMapMan = new BMapManager(getApplication());
            mBMapMan.init("4AA2949E616E069C37CDC3152E8C401A05A0035D", null);
            super.initMapActivity(mBMapMan);
             
            mMapView = (MapView) findViewById(R.id.bmapsView);
            mMapView.setBuiltInZoomControls(true);  //设置启用内置的缩放控件
             
            MapController mMapController = mMapView.getController();  // 得到mMapView的控制权,可以用它控制和驱动平移和缩放
            GeoPoint point = new GeoPoint((int) (39.93 * 1E6),
                    (int) (116.42 * 1E6));  //用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)
            mMapController.setCenter(point);  //设置地图中心点
            mMapController.setZoom(13);    //设置地图zoom级别
            //mMapView.setSatellite(true); //卫星图
            //mMapView.setTraffic(true); //交通流量
            
            /** 离线地图初始化  **/
            mOffline = new MKOfflineMap();
            mOffline.init(mBMapMan, new MKOfflineMapListener() {
                public void onGetOfflineMapState(int type, int state) {
                    switch (type) {
                    case MKOfflineMap.TYPE_DOWNLOAD_UPDATE:
                        {
                            MKOLUpdateElement update = mOffline.getUpdateInfo(state);
                            //mText.setText(String.format("%s : %d%%", update.cityName, update.ratio));
                        }
                        break;
                    case MKOfflineMap.TYPE_NEW_OFFLINE:
                        Log.d("OfflineDemo", String.format("add offlinemap num:%d", state));
                        break;
                    case MKOfflineMap.TYPE_VER_UPDATE:
                        Log.d("OfflineDemo", String.format("new offlinemap ver"));
                        break;
                    }    
                      }
            }
            );
            /** 离线地图导入离线包 **/
            int num = mOffline.scan();
            //if (num != 0)   mText.setText(String.format("已安装%d个离线包", num));
        }
     
        @Override
        protected boolean isRouteDisplayed() {
            return false;
        }
        
        @Override
        protected void onDestroy() {
            if (mBMapMan != null) {
                mBMapMan.destroy();
                mBMapMan = null;
            }
            super.onDestroy();
        }
        
        @Override
        protected void onPause() {
            if (mBMapMan != null) {
                mBMapMan.stop();
            }
            super.onPause();
        }
        
        @Override
        protected void onResume() {
            if (mBMapMan != null) {
                mBMapMan.start();
            }
            super.onResume();
        }
    }
  • 相关阅读:
    字符串常量
    二维数组中的查找
    Codeforces 156B Suspects——————【逻辑判断】
    Codeforces 156 A——Message——————【思维题】
    Codeforces 639B——Bear and Forgotten Tree 3——————【构造、树】
    Codeforces 671 A——Recycling Bottles——————【思维题】
    Codeforces 550D —— Regular Bridge——————【构造】
    Codeforces 550C —— Divisibility by Eight——————【枚举 || dp】
    codeforces 638B—— Making Genome in Berland——————【类似拓扑排序】
    codeforces 675 C ——Money Transfers——————【思维题】
  • 原文地址:https://www.cnblogs.com/milkmap/p/2511928.html
Copyright © 2011-2022 走看看