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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

查看: 1604|回复: 1

百度地图应用开发(一)

[复制链接]
发表于 2012-12-4 15:17:35 | 显示全部楼层 |阅读模式

最近对LBS比较感兴趣,在研究百度地图。先了解下百度地图的大概吧!

http://dev.baidu.com/wiki/imap/index.php?title=Android%E5%B9%B3%E5%8F%B0/%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97

以上是百度地图在android平台上的开发指南。

基于百度地图的应用开发和google地图一样,需要一个Key,所以我们要申请一下,相对于google地图的Key来说,百度地图的Key的申请是很简单的。

申请Key的网址: http://dev.baidu.com/wiki/static/imap/key/  当然要求是你必须得注册百度。


在百度地图的应用开发中,在Manifest要添加如下权限:

  • <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
  • <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
  • <uses-permission android:name="android.permission.INTERNET"></uses-permission>
  • <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
  • <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
  • <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
  • <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>


    具体权限是什么大家可以查下文档,在这里就不多说了。另外还要加上android版本的支持,如下:


    • <supports-screens android:largeScreens="true"
    • android:normalScreens="true" android:smallScreens="true"
    • android:resizeable="true" android:anyDensity="true"/>
    • <uses-sdk android:minSdkVersion="3"></uses-sdk>


      当然还要导入支持百度地图开发的相关的包(指南上面有下载),以下是我的项目文件:



      main.xml

      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          androidrientation
      ="vertical"
          android:layout_width
      ="fill_parent"
          android:layout_height
      ="fill_parent"
         
      >
      <com.baidu.mapapi.MapView android:id="@+id/bmapsView"
              android:layout_width
      ="fill_parent" android:layout_height="fill_parent"
              android:clickable
      ="true" />
      </LinearLayout>


      MainActivity.java

      1 package com.baidumap;
      2
      3 import com.baidu.mapapi.BMapManager;
      4 import com.baidu.mapapi.GeoPoint;
      5 import com.baidu.mapapi.MapActivity;
      6 import com.baidu.mapapi.MapController;
      7 import com.baidu.mapapi.MapView;
      8
      9 import android.app.Activity;
      10 import android.os.Bundle;
      11
      12 public class MainActivity extends MapActivity {
      13     private BMapManager mBMapMan;
      14     @Override
      15     public void onCreate(Bundle savedInstanceState) {
      16         super.onCreate(savedInstanceState);
      17         setContentView(R.layout.main);
      18         mBMapMan = new BMapManager(getApplication());
      19         mBMapMan.init("205114502786B06C4C95CEB0F55822F25E46AED2", null);
      20         super.initMapActivity(mBMapMan);
      21          
      22         MapView mMapView = (MapView) findViewById(R.id.bmapsView);
      23         mMapView.setBuiltInZoomControls(true);  //设置启用内置的缩放控件
      24          
      25         mMapView.setTraffic(true);
      26         
      27         MapController mMapController = mMapView.getController();  // 得到mMapView的控制权,可以用它控制和驱动平移和缩放
      28         GeoPoint point = new GeoPoint((int) (23.141238 * 1E6),
      29                 (int) (113.342331 * 1E6));  //用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)
      30         mMapController.setCenter(point);  //设置地图中心点
      31         mMapController.setZoom(12);    //设置地图zoom级别
      32     }
      33
      34     @Override
      35     protected void onDestroy() {
      36         if (mBMapMan != null) {
      37             mBMapMan.destroy();
      38             mBMapMan = null;
      39         }
      40         super.onDestroy();
      41     }
      42     @Override
      43     protected void onPause() {
      44         if (mBMapMan != null) {
      45             mBMapMan.stop();
      46         }
      47         super.onPause();
      48     }
      49     @Override
      50     protected void onResume() {
      51         if (mBMapMan != null) {
      52             mBMapMan.start();
      53         }
      54         super.onResume();
      55     }
      56     @Override
      57     protected boolean isRouteDisplayed() {
      58         // TODO Auto-generated method stub
      59         return false;
      60     }
      61 }


      运行结果如下:





 楼主| 发表于 2012-12-4 15:20:48 | 显示全部楼层
今天看了下百度地图的官方示例和api文档,玩玩搜索。
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3.        package="com.BaiduSearch"
  4.        android:versionCode="1"
  5.        android:versionName="1.0">
  6.      <uses-sdk android:minSdkVersion="7" />

  7.      <application android:icon="@drawable/icon" android:label="@string/app_name">
  8.          <activity android:name=".MainActivity"
  9.                    android:label="@string/app_name" android:screenOrientation="sensor"
  10.                  android:configChanges="orientation|keyboardHidden">
  11.              <intent-filter>
  12.                  <action android:name="android.intent.action.MAIN" />
  13.                  <category android:name="android.intent.category.LAUNCHER" />
  14.              </intent-filter>
  15.          </activity>

  16.      </application>
  17.      
  18.      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
  19. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
  20. <uses-permission android:name="android.permission.INTERNET"></uses-permission>
  21. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
  22. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>  
  23. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
  24. <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>

  25. <supports-screens android:largeScreens="true"
  26.      android:normalScreens="true" android:smallScreens="true"
  27.      android:resizeable="true" android:anyDensity="true"/>
  28. <uses-sdk android:minSdkVersion="3"></uses-sdk>
  29. </manifest>
复制代码
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.      android:orientation="vertical"
  4.      android:layout_width="fill_parent"
  5.      android:layout_height="fill_parent"
  6.      >
  7.      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  8.      android:orientation="horizontal"
  9.      android:layout_width="fill_parent"
  10.      android:layout_height="wrap_content">
  11.      
  12.      <EditText
  13.          android:id="@+id/city"
  14.          android:layout_width="wrap_content"
  15.          android:layout_height="wrap_content"
  16.          android:hint="输入城市"
  17.      />
  18.      <TextView android:text="市内找"
  19.       android:layout_width="wrap_content"
  20.       android:layout_height="wrap_content"></TextView>
  21.      <EditText
  22.          android:id="@+id/searchkey"
  23.          android:layout_width="wrap_content"
  24.          android:layout_height="wrap_content"
  25.          android:hint="输入地点"
  26.      />
  27.      <Button
  28.          android:id="@+id/search"
  29.          android:text="搜索"
  30.          android:layout_width="fill_parent"
  31.          android:layout_height="wrap_content"
  32.      />
  33. </LinearLayout>
  34.   <com.baidu.mapapi.MapView android:id="@+id/bmapView"
  35.      android:layout_width="fill_parent" android:layout_height="fill_parent"
  36.      android:clickable="true"     
  37.      />
  38. </LinearLayout>
复制代码
  1. package com.BaiduSearch;

  2. import com.baidu.mapapi.BMapManager;
  3. import com.baidu.mapapi.MKAddrInfo;
  4. import com.baidu.mapapi.MKDrivingRouteResult;
  5. import com.baidu.mapapi.MKPoiResult;
  6. import com.baidu.mapapi.MKSearch;
  7. import com.baidu.mapapi.MKSearchListener;
  8. import com.baidu.mapapi.MKTransitRouteResult;
  9. import com.baidu.mapapi.MKWalkingRouteResult;
  10. import com.baidu.mapapi.MapActivity;
  11. import com.baidu.mapapi.MapView;
  12. import com.baidu.mapapi.PoiOverlay;
  13. import android.os.Bundle;
  14. import android.view.View;
  15. import android.view.View.OnClickListener;
  16. import android.widget.Button;
  17. import android.widget.EditText;
  18. import android.widget.Toast;

  19. public class MainActivity extends MapActivity {
  20.      // 地图引擎管理类
  21.      BMapManager mBMapMan;
  22.      // 搜索按钮
  23.      Button mBtnSearch = null;
  24.      // 地图view
  25.      MapView mMapView = null;
  26.      // 搜索模块,也可去掉地图模块独立使用
  27.      MKSearch mSearch = null;

  28.      @Override
  29.      public void onCreate(Bundle savedInstanceState) {
  30.          super.onCreate(savedInstanceState);
  31.          setContentView(R.layout.main);

  32.          // 初始化,填写自己申请的Key
  33.          mBMapMan = new BMapManager(getApplication());
  34.          mBMapMan.init("AC8235886C920052E91B6E6463E8886EA6E6B51E", null);
  35.          super.initMapActivity(mBMapMan);

  36.          // 如果使用地图SDK,请初始化地图Activity

  37.          mMapView = (MapView) findViewById(R.id.bmapView);
  38.          // 设置启用内置的缩放控件
  39.          mMapView.setBuiltInZoomControls(true);
  40.          // 设置在缩放动画过程中也显示overlay,默认为不绘制
  41.          mMapView.setDrawOverlayWhenZooming(true);

  42.          // 初始化搜索模块,注册事件监听
  43.          mSearch = new MKSearch();
  44.          mSearch.init(mBMapMan, new MKSearchListener() {

  45.              public void onGetPoiResult(MKPoiResult res, int type, int error) {
  46.                  // 错误号可参考MKEvent中的定义
  47.                  if (error != 0 || res == null) {
  48.                      Toast.makeText(MainActivity.this, "抱歉,未找到结果",
  49.                              Toast.LENGTH_LONG).show();
  50.                      return;
  51.                  }
  52.                  // 将地图移动到第一个POI中心点
  53.                  if (res.getCurrentNumPois() > 0) {
  54.                      // 将poi结果显示到地图上
  55.                      PoiOverlay poiOverlay = new PoiOverlay(MainActivity.this,
  56.                              mMapView);
  57.                      poiOverlay.setData(res.getAllPoi());
  58.                      mMapView.getOverlays().clear();
  59.                      mMapView.getOverlays().add(poiOverlay);
  60.                      mMapView.invalidate();
  61.                      mMapView.getController().animateTo(res.getPoi(0).pt);
  62.                  } else if (res.getCityListNum() > 0) {
  63.                      String strInfo = "在";
  64.                      for (int i = 0; i < res.getCityListNum(); i++) {
  65.                          strInfo += res.getCityListInfo(i).city;
  66.                          strInfo += ",";
  67.                      }
  68.                      strInfo += "找到结果";
  69.                      Toast.makeText(MainActivity.this, strInfo,
  70.                              Toast.LENGTH_LONG).show();
  71.                  }
  72.              }

  73.              public void onGetDrivingRouteResult(MKDrivingRouteResult res,
  74.                      int error) {
  75.              }

  76.              public void onGetTransitRouteResult(MKTransitRouteResult res,
  77.                      int error) {
  78.              }

  79.              public void onGetWalkingRouteResult(MKWalkingRouteResult res,
  80.                      int error) {
  81.              }

  82.              public void onGetAddrResult(MKAddrInfo res, int error) {
  83.              }

  84.          });

  85.          // 设定搜索按钮的响应
  86.          mBtnSearch = (Button) findViewById(R.id.search);

  87.          OnClickListener clickListener = new OnClickListener() {
  88.              public void onClick(View v) {
  89.                  SearchButtonProcess(v);
  90.              }
  91.          };

  92.          mBtnSearch.setOnClickListener(clickListener);
  93.      }

  94.      void SearchButtonProcess(View v) {
  95.          if (mBtnSearch.equals(v)) {
  96.              EditText editCity = (EditText) findViewById(R.id.city);
  97.              EditText editSearchKey = (EditText) findViewById(R.id.searchkey);
  98.              mSearch.poiSearchInCity(editCity.getText().toString(),
  99.                      editSearchKey.getText().toString());
  100.          }
  101.      }

  102.      // Override以下方法,管理API
  103.      @Override
  104.      protected void onDestroy() {
  105.          if (mBMapMan != null) {
  106.              mBMapMan.destroy();
  107.              mBMapMan = null;
  108.          }
  109.          super.onDestroy();
  110.      }

  111.      @Override
  112.      protected void onPause() {
  113.          if (mBMapMan != null) {
  114.              mBMapMan.stop();
  115.          }
  116.          super.onPause();
  117.      }

  118.      @Override
  119.      protected void onResume() {
  120.          if (mBMapMan != null) {
  121.              mBMapMan.start();
  122.          }
  123.          super.onResume();
  124.      }

  125.      @Override
  126.      protected boolean isRouteDisplayed() {
  127.          // TODO Auto-generated method stub
  128.          return false;
  129.      }
  130. }
复制代码

运行结果如下:


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-9-27 22:15

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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