1. 程式人生 > >百度地圖的簡單開發之實現地圖全景,內景展示功能(四)

百度地圖的簡單開發之實現地圖全景,內景展示功能(四)

今天,我就接著來淺談一下關於百度地圖的內景,外景的展示功能。今天具體要實現的功能就是輸入該地點的名稱然後就展示該地點的內景圖片,有內景就展示內景,沒有則顯示該地點的街景,該功能是參考百度地圖官方的API來實現。

     實現街景展示的地點的搜尋,需要涉及到幾個方面的知識:HttpClient網路請求封裝,解析JSON資料,封裝解析後JSON資料。其實展示內景或者外景很簡單,只需要獲取到內景的uid(POI的id),外景的經緯度即可,然後通過相應的API即可設定。關鍵點就是如何去獲得我輸入地點的uid或者經緯度呢??這時候百度地圖開放平臺提供一個介面,就是輸入一地點它就會返回該地點的uid和經緯度等資訊的JSON資料,而我們只需要去解析這些JSON資料,就可以得到我們想要的uid和經緯度資訊。大致的思路是這樣的。

一、熟悉百度地圖官方介面API資料的使用。

1、首先進入百度地圖API官網,點選進入一個web服務API,然後選擇PlaceAPI

通過以上介紹你應該就可以得到一個可以測試的URL,只要傳入我們申請的APPKEY,根據傳入不同的地點名稱就會返回一個JSON資料。到底可不可以呢,其實我們可以測試一下,如果可以的話,我只要按要求拼接好URL,並把該URL貼上到瀏覽器位址列會返回一大串的JSON資料,如果返回了,那麼我們成功拿到了資料,就可以進行下一步了。

ak=3QIYhSeKPK770bpwzepo9GI1&output=json&query=北京大學

&page_size=10&page_num=0&scope=1&region=全國

看來我們這樣的拼接的URL還是存在著問題,它說少了一個引數,其實仔細思考一下,發現也很正常,因為我們的APPKEY是申請的型別Android手機型別,而這裡的介面是提供web服務的,如果申請的APPKEY的型別是JavaScript型別的話,那麼就無需mcode引數。而如果是android或者iOS則需要在URL後面再增添一個mcode引數,那麼我們知道mcode是必需的,那麼這mcode引數值是什麼呢??其實的它的值就是你的Eclipse中的SHA1 fingerprint值和你的專案的包名組合中間用“;"連線具體如下:

 

最終得到如下的URL:

http://api.map.baidu.com/place/v2/search?ak=nylibTfKmZw9mGe3juhT3U9x&output=json&query=北京大學&page_size=10&page_num=0&scope=1&region=全國&mcode=F5:3E:06:3E:FC:E8:ED:19:60:2E:99:63:D8:78:85:2E:EB:12:9D:BE;com.mikyou.maptest

 可以使用如下的URL貼上瀏覽器測試一下,看是否可以返回JSON資料。最終發現可以返回JSON資料,那麼到這裡我們就知道了如何從百度官方拿到我們想要的資料。

並且從返回的JSON資料可以得到lat(經度),lng(緯度),streetId(街景id),uid(內景Id)等一系列的資料。那麼接下來我們只需要利用的android的HttpClient中的get或post請求網路資料,得到返回的JSON資料,然後我們解析這些JSON資料得到經緯度,streetid,uid,然後把這些設定給百度全景展示的API即能實現全景和內景功能。

二、要實現全景功能需要在AndroidManifest.xml中配置一下BaseAppcation,用於對全景顯示的初始化

[java] view plain copy  print?在CODE上檢視程式碼片派生到我的程式碼片
  1. package com.mikyou.tools;  
  2. import android.app.Application;  
  3. import android.content.Context;  
  4. import android.widget.Toast;  
  5. import com.baidu.lbsapi.BMapManager;  
  6. import com.baidu.lbsapi.MKGeneralListener;  
  7. import com.baidu.mapapi.SDKInitializer;  
  8. publicclass BaseApplication extends Application {  
  9.     privatestatic Context mContext;  
  10.     publicstaticfloat sScale;  
  11.     publicstaticint sWidthDp;  
  12.     publicstaticint sWidthPix;  
  13.     public BMapManager mBMapManager = null;  
  14.     privatestatic BaseApplication mInstance;  
  15.     publicstatic BaseApplication getInstance() {  
  16.         return mInstance;  
  17.     }  
  18.     @Override
  19.     publicvoid onCreate() {  
  20.         super.onCreate();  
  21.         SDKInitializer.initialize(this);  
  22.         initEngineManager(this);  
  23.         mContext = this;  
  24.         mInstance = this;  
  25.         sScale = getResources().getDisplayMetrics().density;  
  26.         sWidthPix = getResources().getDisplayMetrics().widthPixels;  
  27.         sWidthDp = (int) (sWidthPix / sScale);  
  28.     }  
  29.     publicvoid initEngineManager(Context context) {  
  30.         if (mBMapManager == null) {  
  31.             mBMapManager = new BMapManager(context);  
  32.         }  
  33.         if (!mBMapManager.init(new MyGeneralListener())) {  
  34.             Toast.makeText(  
  35.                     BaseApplication.getInstance().getApplicationContext(),  
  36.                     "BMapManager!", Toast.LENGTH_LONG).show();  
  37.         }  
  38.     }  
  39.     publicstaticclass MyGeneralListener implements MKGeneralListener {  
  40.         @Override
  41.         publicvoid onGetPermissionState(int iError) {  
  42.             if (iError != 0) {  
  43.             } else {  
  44.             }  
  45.         }  
  46.     }  
  47. }  
[html] view plain copy  print?在CODE上檢視程式碼片派生到我的程式碼片
  1. <application
  2.       android:name="com.mikyou.tools.BaseApplication"<!-- 配置在此處 -->
  3.        android:allowBackup="true"
  4.        android:icon="@drawable/icon"
  5.        android:label="@string/app_name"
  6.        android:theme="@style/AppTheme">
  7.        <meta-data
  8.            android:name="com.baidu.lbsapi.API_KEY"
  9.            android:value="nylibTfKmZw9mGe3juhT3U9x"/>
  10.        <activity
  11.            android:name="com.mikyou.maptest.MainActivity"
  12.            android:label="@string/app_name">
  13.            <intent-filter>
  14.                <actionandroid:name="android.intent.action.MAIN"/>
  15.                <categoryandroid:name="android.intent.category.LAUNCHER"/>
  16.            </intent-filter>
  17.        </activity>
  18.        <service
  19. 相關推薦

    地圖簡單開發實現地圖全景內景展示功能

    今天,我就接著來淺談一下關於百度地圖的內景,外景的展示功能。今天具體要實現的功能就是輸入該地點的名稱然後就展示該地點的內景圖片,有內景就展示內景,沒有則顯示該地點的街景,該功能是參考百度地圖官方的API來實現。      實現街景展示的地點的搜尋,需要涉及到幾個

    地圖簡單開發實現基本地圖的型別及覆蓋物的新增

    今天,我們接著上一講,上一講我們把地圖上介面自定義了一番,加上了按鈕等一系列的控制元件,但是還沒有給這些加上具體的功能,今天這一講,主要是實現幾種地圖的切換,是否開啟實時交通,通過自定義的按鈕去控制地圖的縮放,以及在地圖上新增覆蓋物及相關顯示覆蓋物的資訊。   

    js仿地圖拖拽、縮放、新增圖層功能原創

    最近專案中完成的需求,仿百度地圖中的功能: 要求:1.底層圖可以拖拽、縮放。       2.拖拽一個圖示,在底層圖上對應位置新增一個標註點,該標註點位置要隨底層圖移動。    3.新增的標註點,可以拖動,刪除。 主要知識點和難點就是各個瀏覽器的點選、拖拽、縮放事件相容性,對js運動屬性、運動偏移位置的瞭解,

    Android 使用雲文字識別實現通用文字識別

    今天給小夥伴們帶來的是如何使用百度雲api實現文字識別功能。 先上截圖 首介面,demo比較簡單 拍照 識別圖片內容 這就是整個demo的執行效果。 接下來我們看下專案結構,比較簡單整潔 接下來我大致說一下實現過程 首先我們需要去百度雲開放

    前端開發框架總結利用Jtopo實現網路拓撲功能

                         前端開發框架總結之利用Jtopo實現網路拓撲功能(四) 上文我們講了拓撲容器相關的互動設計和實現思路以及一些關鍵技術細節。至此,我們已經覆蓋了結

    python一行程式碼實現翻譯和有道翻譯結果獲取-----py學習爬蟲歷程

    更新(18-6-2):利用requests庫只需一行程式碼就可以獲取結果,程式碼在最後前言:本文參考於https://blog.csdn.net/c406495762/article/details/59095864一.本節主要用到的知識1-1:urllib.request.

    linux驅動開發蜂鳴器驅動源碼分析

    linux 蜂鳴器 驅動 蜂鳴器的驅動源碼在/driver/char/buzzer/x210-buzzer.c文件中,源碼如下#include <linux/module.h> #include <linux/kernel.h> #include <linux

    Struts2+Spring+Hibernate實現員工管理增刪改查功能ssh框架整合

    pri support scrip ext ack efault ring src 兩張 前言 轉載請標明出處:http://www.cnblogs.com/smfx1314/p/7795837.html 本項目是我寫的一個練習,目的是回顧ssh框架的整合以及

    PHP、MYSQLI實現簡單的增、刪、改、查功能初學者

    php mysqli <title>index.php</title> <?php #連接數據庫 $conn = mysqli_connect("localhost","root","");

    4.ASP.NET全棧開發在MVC中使用服務端驗證

    help alt 來講 測試 數據類型 throw 存在 數據 問題 首先聲明,這篇博文是完善.ASP.NET全棧開發之在MVC中使用服務端驗證 的,所以重復內容,我就不過多的闡述,很多問題都是在實踐中去發現,然後再去完善,這篇博文也一樣,建立在已閱 “.ASP.NET

    、騰訊和阿里內部的級別和薪資待遇2014

    級別和薪資待遇,除非身居其位,否則你不會知道;但是等你到那個位置知道了,卻又不能說,至少不能在公開場合談論。這是一個群眾喜聞樂見卻又諱莫如深的話題。 別問我是怎麼知道答案的,我不是網際網路獵頭,我正在做的事就是要用網際網路產品替代獵頭,因為獵頭不透明、不全面,還死貴。各

    JSP網站開發HTML入門知識及常用標記符

            最近發生的事情很多,其中一件很重要的事情就是:學生生涯的結束,教學生涯的開始。我準備下個月寫一篇總結研究生生涯的文章,包括自己放棄網際網路選擇回家教書、找工作經歷、專案和畢業設計的各種感想。很榮幸XB七月初就給了我第一次大學教學的經歷,很享受很珍惜也很感觸。

    ECharts 3.0 多座標軸統計圖一般配置詳解例項

    ECharts 是百度出品的jquery圖表外掛。相對於Chartist,擁有更加強大的功能,以及更加詳細的文件(ECharts的文件形式非常優秀,簡明易懂)。ECharts支援的圖表種類非常多,同時相容性也十分優良,故而在網站建設動態統計圖表時,是一個非常優秀

    獻給初學iOS的小盆友們——微博app專案開發十六搭建傳送微博介面

    從這節課開始我們學習搭建傳送微博介面。傳送介面看起來簡單,但是卻包含了許多細節處理。所以我們分為幾節課來完成,儘量講解詳細點。 本節內容 本節程式碼資料 16.1 設定傳送介面的導航內容 當我們點選中間加號按鈕的時候,微博會彈出一個傳送介面,

    簡單實現Redis快取中的排序功能

    在實現快取排序功能之前,必須先明白這一功能的合理性。不妨思考一下,既然可以在資料庫中排序,為什麼還要把排序功能放在快取中實現呢?這裡簡單總結了兩個原因:首先,排序會增加資料庫的負載,難以支撐高併發的應用;其次,在快取中排序不會遇到表鎖定的問題。Redis恰好提供了排序功能

    獻給初學iOS的小盆友們——微博app專案開發十八搭建傳送微博介面

    今天應該是這個專案最後一次更新啦,能堅持下來的小盆友真是棒棒噠。這節課我們將會完成傳送有圖片的微博,實現微博最後一個核心功能。因為微博的功能實在太多太多了,我們不可能把微博的每個功能都一一實現。小夥伴能從中學到最精髓的東西才是最主要的,萬變不離其宗,得到處理問題

    zabbix實現mysql數據庫的監控

    cti 工作 bug erp 檢測 小草 全路徑 itl 指標 前面介紹的內容都是用第三方開發好的插件進行mysql監控的,可能有些我們關心的監控內容並不在其中,這時一種常用的方法就是定義我們自己的腳本並將它整合到zabbix中,從而在原有監控的基礎上進行有力的補充。下面通

    PHP、thinkPHP5.0開發網站文件管理功能下載文件

    exists name OS 定義 erro exist iconv head posit public function download($currdir = null){ $file = urldecode($currdir); $file = iconv

    SpringMVCDemo中遇到的問題 分頁功能

    1、背景:   線上經常出現因為研發程式碼編寫不規範,sql語句全表查詢,資料過多,硬生生把記憶體塞爆不斷GC,整個服務宕掉的情況。   引發這種場景的原因之一,歸咎在使用mybatis編寫sql語句時使用了萬能查詢語句。where 1=1之後,拼接的if條件都不符合條件。如下:   如果下面sql語句

    演算法工程師修仙路:吳恩達機器學習

    吳恩達機器學習筆記及作業程式碼實現中文版 第四章 Logistic迴歸 分類 在分類問題中,要預測的變數y是離散的值,邏輯迴歸 (Logistic Regression) 演算法是目前最流行使用最廣泛的一種學習演算法。 在分類問題中,我們嘗試預測的是結果