1. 程式人生 > >Android開發-百度地圖API_v4.1.1-AndroidStudio(五)檢索功能

Android開發-百度地圖API_v4.1.1-AndroidStudio(五)檢索功能

轉載請註明出處:http://blog.csdn.net/iwanghang/article/details/53301514
在百度地圖API中,檢索功能文件,有很多功能,這邊程式碼演示一下,POI興趣點檢索、POI公交資訊檢索
還有其他很多,比如行政區邊界資料檢索、線路規劃、地理編碼、線上建議查詢、短串分享。
可以檢視 http://lbsyun.baidu.com/index.php?title=androidsdk/guide/retrieval
我們看一下效果和程式碼:


MainActivity.java:
package com.demo1;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.search.busline.BusLineSearch;
import com.baidu.mapapi.search.core.PoiInfo;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;
import com.baidu.mapapi.search.poi.PoiCitySearchOption;
import com.baidu.mapapi.search.poi.PoiDetailResult;
import com.baidu.mapapi.search.poi.PoiIndoorResult;
import com.baidu.mapapi.search.poi.PoiResult;
import com.baidu.mapapi.search.poi.PoiSearch;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private MapView mMapView = null;
    private BaiduMap mBaiduMap;

    private PoiSearch mPoiSearch;
    private PoiSearch mPoiSearchBus;

    private String busLineId;
    private BusLineSearch mBusLineSearch;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 在使用SDK各元件之前初始化context資訊,傳入ApplicationContext
        // 注意該方法要再setContentView方法之前實現
        SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_main);
        // 獲取地圖控制元件引用
        mMapView = (MapView) findViewById(R.id.bmapView);

        mBaiduMap = mMapView.getMap();
        mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); // 普通地圖

        // POI興趣點檢索初始化
        initPOI();
        // POI公交資訊檢索初始化
        initBus();

        // 註冊 SDK 廣播監聽者
        IntentFilter iFilter = new IntentFilter();
        iFilter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK);
        iFilter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);
        iFilter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);
        mReceiver = new SDKReceiver();
        registerReceiver(mReceiver, iFilter);
    }

    private void initBus() {
        // POI檢索
        mPoiSearchBus = PoiSearch.newInstance(); // 建立POI檢索例項
        // 建立POI檢索監聽者;
        OnGetPoiSearchResultListener poiListenerBus = new OnGetPoiSearchResultListener(){
            @Override
            public void onGetPoiResult(PoiResult result) {
                if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
                    return;
                }
                //遍歷所有POI,找到型別為公交線路的POI
                for (PoiInfo poi : result.getAllPoi()) {
                    if (poi.type == PoiInfo.POITYPE.BUS_LINE ||poi.type == PoiInfo.POITYPE.SUBWAY_LINE) {
                        //說明該條POI為公交資訊,獲取該條POI的UID
                        busLineId = poi.uid;
                        System.out.println(poi.name+"--"+poi.uid+"--"+poi.city);
                        Toast.makeText(MainActivity.this, poi.name+"--"+poi.uid+"--"+poi.city, Toast.LENGTH_SHORT).show();
                        break;
                    }
                }
            }
            @Override
            public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {
            }
            @Override
            public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {
            }
        };
        // 設定POI檢索監聽者;
        mPoiSearchBus.setOnGetPoiSearchResultListener(poiListenerBus);
    }

    public void poiBus(View view){
        // 發起檢索請求;非同步請求;
        // 以城市內檢索為例,詳細方法請參考POI檢索部分的相關介紹
        mPoiSearchBus.searchInCity((new PoiCitySearchOption())
                .city("北京")
                .keyword("717"));
        // 釋放POI檢索例項;
        //mPoiSearchBus.destroy();
    }

    private void initPOI() {
        // POI檢索
        mPoiSearch = PoiSearch.newInstance(); // 建立POI檢索例項
        // 建立POI檢索監聽者;
        OnGetPoiSearchResultListener poiListener = new OnGetPoiSearchResultListener(){
            public void onGetPoiResult(PoiResult result){
                //獲取POI檢索結果
                List<PoiInfo> allPoi = result.getAllPoi();
                for (PoiInfo p : allPoi) {
                    System.out.println(p.address+"--"+p.city+"--"+p.name);
                    Toast.makeText(MainActivity.this, p.address+"--"+p.city+"--"+p.name, Toast.LENGTH_SHORT).show();
                }
            }
            public void onGetPoiDetailResult(PoiDetailResult result){
                //獲取Place詳情頁檢索結果
            }
            @Override
            public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {
            }
        };
        // 設定POI檢索監聽者;
        mPoiSearch.setOnGetPoiSearchResultListener(poiListener);
    }

    public void poiClick(View view){
        // 發起檢索請求;非同步請求;
        mPoiSearch.searchInCity((new PoiCitySearchOption())
                .city("北京")
                .keyword("美食")
                .pageNum(10));
        // 釋放POI檢索例項;
        //mPoiSearch.destroy();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //在activity執行onDestroy時執行mMapView.onDestroy(),實現地圖生命週期管理
        mMapView.onDestroy();
    }
    @Override
    protected void onResume() {
        super.onResume();
        //在activity執行onResume時執行mMapView. onResume (),實現地圖生命週期管理
        mMapView.onResume();
    }
    @Override
    protected void onPause() {
        super.onPause();
        //在activity執行onPause時執行mMapView. onPause (),實現地圖生命週期管理
        mMapView.onPause();
    }



    /**
     * 構造廣播監聽類,監聽 SDK key 驗證以及網路異常廣播
     */
    public class SDKReceiver extends BroadcastReceiver {
        public void onReceive(Context context, Intent intent) {
            String s = intent.getAction();
            TextView text = (TextView) findViewById(R.id.text_Info);
            text.setTextColor(Color.RED);
            if (s.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR)) {
                text.setText("key 驗證出錯! 錯誤碼 :" + intent.getIntExtra
                        (SDKInitializer.SDK_BROADTCAST_INTENT_EXTRA_INFO_KEY_ERROR_CODE, 0)
                        +  " ; 請在 AndroidManifest.xml 檔案中檢查 key 設定");
            } else if (s.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK)) {
                text.setText("key 驗證成功! 功能可以正常使用");
                text.setTextColor(Color.BLACK);
            } else if (s.equals(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR)) {
                text.setText("網路出錯");
            }
        }
    }

    private SDKReceiver mReceiver;

}
activity_main.java
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.demo1.MainActivity">
    <TextView
        android:id="@+id/text_Info"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="16sp" >
    </TextView>
    <Button
        android:text="poi檢索"
        android:onClick="poiClick"
        android:layout_below="@+id/text_Info"
        android:id="@+id/btn_poi"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <Button
        android:text="bus檢索"
        android:onClick="poiBus"
        android:layout_below="@+id/btn_poi"
        android:id="@+id/btn_bus"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <com.baidu.mapapi.map.MapView
        android:layout_below="@+id/btn_bus"
        android:id="@+id/bmapView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true" />
</RelativeLayout>



轉載請註明出處:http://blog.csdn.net/iwanghang/article/details/53301514



歡迎移動開發愛好者交流
瀋陽或周邊城市公司有意開發Android,請與我聯絡
聯絡方式

微信:iwanghang
QQ:413711276
郵箱:[email protected]


相關推薦

Android開發-地圖API_v4.1.1-AndroidStudio()檢索功能

轉載請註明出處:http://blog.csdn.net/iwanghang/article/details/53301514 在百度地圖API中,檢索功能文件,有很多功能,這邊程式碼演示一下,POI興趣點檢索、POI公交資訊檢索 還有其他很多,比如行政區邊界資料檢索、線路

Android studio 地圖開發(2)地圖定位

gcj02 settings tick all adding ext tope wid erro Android studio 百度地圖開發(2)地圖定位 email:[email protected]/* */ 開發環境:win7 64位

android地圖開發(一)

one rst dir 還要 遠程服務 存儲 返回 src copy 1,註冊百度開發者賬號 2,申請key ,註意開發版SH和發布版的SH 獲取開發版SHA1: 輸入命令:keytool -list -v -keystore debug.keystore,回車輸入密鑰

android地圖開發(二) 定位

頻率 update 殺死 一次 ddr animate 語義 pri des 參考:http://blog.csdn.net/mr_wzc/article/details/51590485 第一步,初始化LocationClient類 //獲取地圖控件引用

android studio使用SDK開發地圖應用中遇到的問題彙總

1、com.baidu.mapapi.map.MapView (Open Class, Show Exception, Clear Cache) The following classes could not be instantiated:    

地圖整合問題1-20170913

1、百度地圖整合 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta

地圖高階例項1-如何利用【地圖API】,製作房產酒店地圖?(中)

<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"/><title>酷訊酒店地圖</title>

地圖展示附近1公里範圍內的目標

需求 從DB中檢索附近一公里內的資料,並在百度地圖展示; Note: 主要用於從本地資料表中查詢符合條件的目標; 效果展示 總結 (1) 覆蓋物樣式設定 // 圓形覆蓋物

關於iOS整合地圖SDK2.9.1常見問題

1.想要獲得百度地圖的SDK,首先要用你的百度賬號登入。地址:http://developer.baidu.com/map/ 2.登入完成後,選擇你需要的開發包,其實通過閱讀百度對百度地圖的介紹基本上是可以完成對SDK的整合,但是會存在一些小問題。 4.點選建立應用:

Android學習——地圖開發定位與顯示Demo

        百度地圖給我們提供了非常豐富的API供我們進行二次開發。百度地圖的SDK與定位SDK在今年6月份進行了更新。地圖更新為3.0,定位更新為4.2。百度說:這次更新對介面有了較大部分的調整,與之前版本不相容。本篇博文基於以上最新版本的API提供一個小例子:獲取自

Android地圖的簡單定位開發

在網上學習使用百度定位,看了很多文章和部落格始終覺得很亂,而且是看的越多,邏輯越迷糊。直到看了《Android定位技術 LBS視訊教程》https://www.douban.com/group/topic/80331061/才感覺總算把邏輯理清楚了。我就在這裡把我的邏輯總結出

Android開發AndroidStudio開發地圖Demo時的經典錯誤230的另一種可能

Authentication Error errorcode: 230 uid: -1 appid -1 msg: APP Scode碼校驗失敗 令人眼紅的字眼,這個神奇的錯誤折騰了我一晚上,一切都是

史上最詳細的Android Studio地圖(BaiDuMap)開發教程,可以當作官方文件的教科書級別教程!

本文是續寫一一哥作品,(一些大神沒想過要寫出來的,而笨小白又不懂的,,稍有完善。) 原文:http://blog.csdn.net/syc000666/article/details/50756551 由於工作原因,需要用到地圖模組,之前一直是用Eclipse開發百度地圖

Android studio 地圖開發(8)地圖已標記POI點和搜尋POI點的獲取和利用

一.簡要描述 百度地圖的POI點可以分有兩種:地圖中已經標記的點和通過關鍵詞搜尋得到的POI點。對於這兩種POI點,百度封裝成了不同的類和介面來實現監聽,下面簡單講一點。 二.地圖中已標記POI點 首先遇到的第一個問題就時如何獲取已標記點的資訊,在百

Android LBS 地圖

代碼 百度地圖 百度定位 第一行代碼 andro 申請 地圖 .html 實驗 研究了幾個小時,左沖右突,實驗沒成功。http://www.cnblogs.com/hbuwyg/p/7062285.html 計劃按照郭老師的《第一行代碼》教程再試一次。 前面的測試雖然沒

Android使用地圖出現閃退及定位時顯示藍屏問題

ima pos mod cal targe req except bubuko and 目錄 1.Android使用百度地圖出現閃退 2.Android使用百度地圖定位出現藍屏問題 1.Android使用百度地圖出現閃退 一般情況下出現閃退

Android studio地圖demo出現230錯誤,key校驗失敗

但是 studio 不能 提示 baidumap tps man ole 文件 轉自daoxiaomianzi原文 Android studio 百度地圖demo出現230錯誤,key校驗失敗 使用AndroidStudio導入Baidu地圖的as版的demo,引入後,發

Android 整合地圖實現裝置定位

Android 整合百度地圖實現裝置定位步驟1:申請android 端SDK :http://lbsyun.baidu.com/步驟2:下載基礎版SDK步驟3:下載示例程式步驟4:開始整合:ak加入libs加入SDKInitializer.setCoordType(CoordType.BD09LL);圖示類

Android整合地圖-----顯示地圖、定位、長按顯示地址資訊

一、基礎部分 轉載請註明出處:https://blog.csdn.net/Hunter2916/article/details/82867205 1、下載百度地圖的SDK 下載地址:http://lbsyun.baidu.com/index.php?title=android-locsd