请选择 进入手机版 | 继续访问电脑版

【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 2768|回复: 0

【“零起点”--百度地图手机SDK】如何使用离线地图?

[复制链接]
发表于 2013-3-3 21:37:31 | 显示全部楼层 |阅读模式
摘要:用户使用地图的时候,希望不联网就能展示地图。这时,就需要使用到离线地图了。如何在百度地图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里申明变量。
  1. MKOfflineMap mOffline = null;   //离线地图变量
复制代码
然后在onCreate函数里写离线地图初始化的代码:
  1. /** 离线地图初始化  **/
  2.         mOffline = new MKOfflineMap();
  3.         mOffline.init(mBMapMan, new MKOfflineMapListener() {
  4.             public void onGetOfflineMapState(int type, int state) {
  5.                 switch (type) {
  6.                 case MKOfflineMap.TYPE_DOWNLOAD_UPDATE:
  7.                     {
  8.                         MKOLUpdateElement update = mOffline.getUpdateInfo(state);
  9.                         //mText.setText(String.format("%s : %d%%", update.cityName, update.ratio));
  10.                     }
  11.                     break;
  12.                 case MKOfflineMap.TYPE_NEW_OFFLINE:
  13.                     Log.d("OfflineDemo", String.format("add offlinemap num:%d", state));
  14.                     break;
  15.                 case MKOfflineMap.TYPE_VER_UPDATE:
  16.                     Log.d("OfflineDemo", String.format("new offlinemap ver"));
  17.                     break;
  18.                 }   
  19.                   }
  20.         }
  21.         );
  22.         /** 离线地图导入离线包 **/
  23.         int num = mOffline.scan();
  24.         //if (num != 0)   mText.setText(String.format("已安装%d个离线包", num));
复制代码
三、连真机,看运行看结果。
看,这是没有联网,展示地图的效果。


四、java文件全部源代码
  1. package com.baidu.searchpoi;

  2. import android.app.Activity;
  3. import android.os.Bundle;

  4. /** 引入类 **/
  5. import java.util.ArrayList;
  6. import java.util.List;

  7. import android.content.Context;
  8. import android.graphics.Canvas;
  9. import android.graphics.Paint;
  10. import android.graphics.Point;
  11. import android.graphics.drawable.Drawable;
  12. import android.location.Location;
  13. import android.os.Bundle;
  14. import android.util.Log;
  15. import android.view.View;
  16. import android.widget.Toast;

  17. import com.baidu.mapapi.BMapManager;
  18. import com.baidu.mapapi.GeoPoint;
  19. import com.baidu.mapapi.ItemizedOverlay;
  20. import com.baidu.mapapi.LocationListener;
  21. import com.baidu.mapapi.MKAddrInfo;
  22. import com.baidu.mapapi.MKDrivingRouteResult;
  23. import com.baidu.mapapi.MKGeneralListener;
  24. import com.baidu.mapapi.MKLocationManager;
  25. import com.baidu.mapapi.MKOLUpdateElement;
  26. import com.baidu.mapapi.MKOfflineMap;
  27. import com.baidu.mapapi.MKOfflineMapListener;
  28. import com.baidu.mapapi.MKPlanNode;
  29. import com.baidu.mapapi.MKPoiResult;
  30. import com.baidu.mapapi.MKSearch;
  31. import com.baidu.mapapi.MKSearchListener;
  32. import com.baidu.mapapi.MKTransitRouteResult;
  33. import com.baidu.mapapi.MKWalkingRouteResult;
  34. import com.baidu.mapapi.MapActivity;
  35. import com.baidu.mapapi.MapController;
  36. import com.baidu.mapapi.MapView;
  37. import com.baidu.mapapi.MyLocationOverlay;
  38. import com.baidu.mapapi.Overlay;
  39. import com.baidu.mapapi.OverlayItem;
  40. import com.baidu.mapapi.PoiOverlay;
  41. import com.baidu.mapapi.RouteOverlay;
  42. import com.baidu.mapapi.TransitOverlay;

  43. /** activity **/
  44. public class SearchPOIActivity extends MapActivity {
  45.     //申明变量
  46.     BMapManager mBMapMan = null;  
  47.     MapView mMapView = null;
  48.     MKOfflineMap mOffline = null;   //离线地图变量
  49.    
  50.     @Override
  51.     public void onCreate(Bundle savedInstanceState) {
  52.         super.onCreate(savedInstanceState);
  53.         setContentView(R.layout.main);
  54.         
  55.         mBMapMan = new BMapManager(getApplication());
  56.         mBMapMan.init("4AA2949E616E069C37CDC3152E8C401A05A0035D", null);
  57.         super.initMapActivity(mBMapMan);
  58.          
  59.         mMapView = (MapView) findViewById(R.id.bmapsView);
  60.         mMapView.setBuiltInZoomControls(true);  //设置启用内置的缩放控件
  61.          
  62.         MapController mMapController = mMapView.getController();  // 得到mMapView的控制权,可以用它控制和驱动平移和缩放
  63.         GeoPoint point = new GeoPoint((int) (39.93 * 1E6),
  64.                 (int) (116.42 * 1E6));  //用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)
  65.         mMapController.setCenter(point);  //设置地图中心点
  66.         mMapController.setZoom(13);    //设置地图zoom级别
  67.         //mMapView.setSatellite(true); //卫星图
  68.         //mMapView.setTraffic(true); //交通流量
  69.         
  70.         /** 离线地图初始化  **/
  71.         mOffline = new MKOfflineMap();
  72.         mOffline.init(mBMapMan, new MKOfflineMapListener() {
  73.             public void onGetOfflineMapState(int type, int state) {
  74.                 switch (type) {
  75.                 case MKOfflineMap.TYPE_DOWNLOAD_UPDATE:
  76.                     {
  77.                         MKOLUpdateElement update = mOffline.getUpdateInfo(state);
  78.                         //mText.setText(String.format("%s : %d%%", update.cityName, update.ratio));
  79.                     }
  80.                     break;
  81.                 case MKOfflineMap.TYPE_NEW_OFFLINE:
  82.                     Log.d("OfflineDemo", String.format("add offlinemap num:%d", state));
  83.                     break;
  84.                 case MKOfflineMap.TYPE_VER_UPDATE:
  85.                     Log.d("OfflineDemo", String.format("new offlinemap ver"));
  86.                     break;
  87.                 }   
  88.                   }
  89.         }
  90.         );
  91.         /** 离线地图导入离线包 **/
  92.         int num = mOffline.scan();
  93.         //if (num != 0)   mText.setText(String.format("已安装%d个离线包", num));
  94.     }

  95.     @Override
  96.     protected boolean isRouteDisplayed() {
  97.         return false;
  98.     }
  99.    
  100.     @Override
  101.     protected void onDestroy() {
  102.         if (mBMapMan != null) {
  103.             mBMapMan.destroy();
  104.             mBMapMan = null;
  105.         }
  106.         super.onDestroy();
  107.     }
  108.    
  109.     @Override
  110.     protected void onPause() {
  111.         if (mBMapMan != null) {
  112.             mBMapMan.stop();
  113.         }
  114.         super.onPause();
  115.     }
  116.    
  117.     @Override
  118.     protected void onResume() {
  119.         if (mBMapMan != null) {
  120.             mBMapMan.start();
  121.         }
  122.         super.onResume();
  123.     }
  124. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2024-3-29 18:14

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表