Android百度地圖 - 搜索服務之周邊檢索

jopen 11年前發布 | 234K 次閱讀 Android Android開發 移動開發

周邊檢索:根據檢索詞、中心點地理坐標和半徑與發起周邊檢索。

實現場景:查找以上海市浦東新區為中心,半徑為1000米內所有的“浦東發展銀行”(搜周邊)。

實現步驟:

一、前提條件:

        搭建百度地圖開發環境;

        地圖引擎管理對象和顯示地圖的View對象,都已創建并初始化;

        MapView對象的相關屬性已設置,生命周期函數也已處理。

        詳見:Android 百度地圖SDK (v2.0.0)初探

二、檢索以上海市浦東新區為中心,半徑為1000米內所有的“浦東發展銀行”(搜周邊)的具體實現步驟:

        1、創建搜索服務類對象,并初始化。代碼如下:

 mMKSearch = new MKSearch();
        mMKSearch.init(mBMapManager, new MKSearchListener() {

        @Override
        public void onGetAddrResult(MKAddrInfo arg0, int arg1) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onGetPoiResult(MKPoiResult result, int type, int error) {

        }

        @Override
        public void onGetPoiDetailSearchResult(int type, int error) {

        }

        @Override
        public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {
            // TODO Auto-generated method stub

        }

    });</pre> <p>           2、 調用mMKSearch對象的mMKSearch.poiSearchNearBy(arg0, arg1, arg2)方法,參數列表:關鍵詞、中心點地理坐標、半徑,單位:米。</p>

       // 根據中心點、半徑與檢索詞發起周邊檢索.
       // 參數列表:關鍵詞、中心點地理坐標、半徑,單位:米
        mMKSearch.poiSearchNearBy("浦東發展銀行", mGeoPoint, 1000);

           3、在onGetPoiResult()回調方法內處理檢索到的結果。

@Override
            public void onGetPoiResult(MKPoiResult result, int type, int error) {
                if (error != 0) {
                    Toast.makeText(BaiduMapPoiOverlayActivity.this, 
                            "抱歉,未查找到結果", 
                            Toast.LENGTH_SHORT).show();
                } else {
                    if (result == null) {
                        Toast.makeText(BaiduMapPoiOverlayActivity.this,
                                "抱歉,您填寫的搜索條件,未查找到結果,換個條件試試!",
                                Toast.LENGTH_SHORT).show();
                        return;
                    }

                // 創建POI內置的Overlay對象 
                PoiOverlay poiOverlay = new PoiOverlay(BaiduMapPoiOverlayActivity.this, mMapView);
                // 符合搜索條件的所有點
                poiOverlay.setData(result.getAllPoi());
                // 向覆蓋物列表中添加覆蓋物對象PoiOverlay
                mMapView.getOverlays().add(poiOverlay);
                // 刷新地圖
                mMapView.refresh();
            }
        }</pre> <p>           4、運行效果圖如下:</p>

Android百度地圖 - 搜索服務之周邊檢索
三、查看檢索到的POI詳情:

1、在前面我們以上海市浦東新區為中心,半徑為1000米內所有的“浦東發展銀行”,檢索得到的是一個POI的列表。代碼如下:

ArrayList<MKPoiInfo> mkPois = result.getAllPoi();

注:a. result是MKPoiResult類對象的一個引用。

        b. POI是中國POI(Point of Interest)數據庫的縮寫,可以翻譯成“興趣點”, 每個POI包含四方面信息,名稱、類別、經度、緯度。這個計劃的遠景目標是建立全國的POI數據庫,并且全部開放。
2、從POI的列表中取出一個元素:

MKPoiInfo mkPoi = mkPois.get(1);

3、發起查看詳細信息的請求:

 mMKSearch.poiDetailSearch(mkPoi.uid);

4、需要在AndroidManifest.xml中設置如下信息:

注:調用百度API里的POI詳細信息展示Activity,官方給的有錯誤。

 <activity
            android:configChanges="orientation|keyboardHidden"
            android:name="com.baidu.mapapi.search.PlaceCaterActivity"
            android:theme="@android:style/Theme.NoTitleBar" >
        </activity>

5、處理onGetPoiDetailSearchResult()回調方法:

@Override
            public void onGetPoiDetailSearchResult(int type, int error) {
                // type - 值為GeoSearchManager.GEO_SEARCH_DETAILS
                if (error != 0) {
                    Toast.makeText(BaiduMapPoiOverlayActivity.this, "抱歉,未找到結果", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(BaiduMapPoiOverlayActivity.this, "成功,查看詳情頁面", Toast.LENGTH_SHORT).show();
                }
            }

6、運行效果圖如下:

Android百度地圖 - 搜索服務之周邊檢索
三、完整代碼:

1、在AndroidManifest.xml中的配置:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="

<uses-sdk android:minSdkVersion="8" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:configChanges="orientation|keyboardHidden"
        android:label="@string/app_name"
        android:name=".BaiduMapPoiOverlayActivity"
        android:screenOrientation="sensor" >
        <intent-filter >
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:configChanges="orientation|keyboardHidden"
        android:name="com.baidu.mapapi.search.PlaceCaterActivity"
        android:theme="@android:style/Theme.NoTitleBar" >
    </activity>
</application>

<!-- 使用網絡功能所需權限 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.INTERNET" >
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
</uses-permission>

<!-- 讀取手機的當前狀態權限,沒有的話會報錯,這個是使用百度地圖API必須的 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" >
</uses-permission>

<!-- Cache功能需要讀寫外部存儲器 ,若沒這個權限,地圖加載不出來 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
</uses-permission>

<supports-screens
    android:anyDensity="true"
    android:largeScreens="true"
    android:normalScreens="true"
    android:resizeable="true"
    android:smallScreens="true" />

</manifest></pre>

2、繼承自Activity類的子類的完整代碼:

package com.android.baidu.map;

import java.util.ArrayList;

import android.app.Activity; import android.os.Bundle; import android.widget.Toast;

import com.baidu.mapapi.BMapManager; import com.baidu.mapapi.MKGeneralListener; import com.baidu.mapapi.map.MKEvent; import com.baidu.mapapi.map.MapController; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.PoiOverlay; import com.baidu.mapapi.search.MKAddrInfo; import com.baidu.mapapi.search.MKBusLineResult; import com.baidu.mapapi.search.MKDrivingRouteResult; import com.baidu.mapapi.search.MKPoiInfo; import com.baidu.mapapi.search.MKPoiResult; import com.baidu.mapapi.search.MKSearch; import com.baidu.mapapi.search.MKSearchListener; import com.baidu.mapapi.search.MKSuggestionResult; import com.baidu.mapapi.search.MKTransitRouteResult; import com.baidu.mapapi.search.MKWalkingRouteResult; import com.baidu.platform.comapi.basestruct.GeoPoint;

/**

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!