您的位置:首页 > 其它

百度检索定位

2016-09-25 19:57 162 查看
主界面========================================================

package com.bwie.test;

import android.os.Bundle;

import android.support.v7.app.ActionBarActivity;

import android.view.View;

import android.widget.EditText;

import android.widget.TextView;

import com.baidu.mapapi.SDKInitializer;

import com.baidu.mapapi.map.BaiduMap;

import com.baidu.mapapi.map.BitmapDescriptor;

import com.baidu.mapapi.map.BitmapDescriptorFactory;

import com.baidu.mapapi.map.CircleOptions;

import com.baidu.mapapi.map.MapView;

import com.baidu.mapapi.map.MarkerOptions;

import com.baidu.mapapi.map.OverlayOptions;

import com.baidu.mapapi.map.Stroke;

import com.baidu.mapapi.map.TextOptions;

import com.baidu.mapapi.model.LatLng;

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;

public class MainActivity extends ActionBarActivity {

    MapView mMapView = null;

    private BaiduMap mBaiduMap;

    private PoiSearch poiSearch;

    private EditText city, keyword;

    private PoiCitySearchOption poiCitySearchOption;

    private OnGetPoiSearchResultListener poiListener;

    LatLng center = new LatLng(40.049256, 116.306404);

    int radius = 500;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        // 在使用SDK各组件之前初始化context信息,传入ApplicationContext

        // 注意该方法要再setContentView方法之前实现

        SDKInitializer.initialize(getApplicationContext());

        setContentView(R.layout.activity_main);

        initView();

        // 获取地图控件引用

        mMapView = (MapView) findViewById(R.id.bmapView);

        mBaiduMap = mMapView.getMap();

        // 普通地图

        // mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);

        // 卫星地图

        mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);

        // 创建POI检索实例

        poiSearch = PoiSearch.newInstance();

        // 创建POI检索监听者

        poiListener = new OnGetPoiSearchResultListener() {

            public void onGetPoiResult(PoiResult result) {

                // 获取POI检索结果

                if (result == null

                        || result.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {

                    return;

                }

                if (result.error == SearchResult.ERRORNO.NO_ERROR) {

                    mBaiduMap.clear();

                    // 创建PoiOverlay

                    PoiOverlay overlay = new PoiOverlay(mBaiduMap);

                    // 设置overlay可以处理标注点击事件

                    mBaiduMap.setOnMarkerClickListener(overlay);

                    // 设置PoiOverlay数据

                    overlay.setData(result);

                    // 添加PoiOverlay到地图中

                    overlay.addToMap();

                    overlay.zoomToSpan();

                    showNearbyArea(center, radius);

                    return;

                }

            }

            public void onGetPoiDetailResult(PoiDetailResult result) {

                // 获取Place详情页检索结果

            }

            @Override

            public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {

            }

        };

    }

/**

 * 找到控件ID

 */

    private void initView() {

        city = (EditText) findViewById(R.id.city);

        keyword = (EditText) findViewById(R.id.Keyword);

    }

    /**

     * 搜索按钮监听

     * @param view

     */

    public void btn(View view) {

        // 设置POI检索监听者

        poiSearch.setOnGetPoiSearchResultListener(poiListener);

        // 发起检索请求

        poiSearch.searchInCity((new PoiCitySearchOption())

                .city(city.getText().toString())

                .keyword(keyword.getText().toString()).pageNum(10));

    }

    /**

     * 在地图上绘制文字

     * @param center

     * @param radius

     */

    public void showNearbyArea(LatLng center, int radius) {

        // 定义文字所显示的坐标点

        // 八维经纬度40.049256,116.306404

        LatLng llText = new LatLng(40.049256, 116.306404);

        // 构建文字Option对象,用于在地图上添加文字

        OverlayOptions textOption = new TextOptions().bgColor(0xAAFFFF00)

                .fontSize(24).fontColor(0xFFFF00FF).text("这是我们的母校")

                .position(llText);

        // 在地图上添加该文字对象并显示

        mBaiduMap.addOverlay(textOption);

    }

}

主界面布局========================================================

<LinearLayout 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:orientation="vertical"

    

    >

    

    <LinearLayout

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal"

        >

        

        <EditText

            android:id="@+id/city"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:hint="填入城市"

            />

        <EditText

            android:id="@+id/Keyword"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:hint="输入关键字"

            />

        <Button

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="搜索"

            android:onClick="btn"

            />

        

        

        

    </LinearLayout>

    <com.baidu.mapapi.map.MapView  

    android:id="@+id/bmapView"  

    android:layout_width="fill_parent"  

    android:layout_height="fill_parent"  

    android:clickable="true" />

</LinearLayout>

帮助类OverlayManager==========================================================

public abstract class OverlayManager implements OnMarkerClickListener, OnPolylineClickListener {

    BaiduMap mBaiduMap = null;

    private List<OverlayOptions> mOverlayOptionList = null;

    List<Overlay> mOverlayList = null;

    /**

     * 閫氳繃涓�涓狟aiduMap 瀵硅薄鏋勯��

     *

     * @param baiduMap

     */

    public OverlayManager(BaiduMap baiduMap) {

        mBaiduMap = baiduMap;

        // mBaiduMap.setOnMarkerClickListener(this);

        if (mOverlayOptionList == null) {

            mOverlayOptionList = new ArrayList<OverlayOptions>();

        }

        if (mOverlayList == null) {

            mOverlayList = new ArrayList<Overlay>();

        }

    }

    /**

     * 瑕嗗啓姝ゆ柟娉曡缃绠$悊鐨凮verlay鍒楄〃

     *

     * @return 绠$悊鐨凮verlay鍒楄〃

     */

    public abstract List<OverlayOptions> getOverlayOptions();

    /**

     * 灏嗘墍鏈塐verlay 娣诲姞鍒板湴鍥句笂

     */

    public final void addToMap() {

        if (mBaiduMap == null) {

            return;

        }

        removeFromMap();

        List<OverlayOptions> overlayOptions = getOverlayOptions();

        if (overlayOptions != null) {

            mOverlayOptionList.addAll(getOverlayOptions());

        }

        for (OverlayOptions option : mOverlayOptionList) {

            mOverlayList.add(mBaiduMap.addOverlay(option));

        }

    }

    /**

     * 灏嗘墍鏈塐verlay 浠� 鍦板浘涓婃秷闄�

     */

    public final void removeFromMap() {

        if (mBaiduMap == null) {

            return;

        }

        for (Overlay marker : mOverlayList) {

            marker.remove();

        }

        mOverlayOptionList.clear();

        mOverlayList.clear();

    }

    /**

     * 缂╂斁鍦板浘锛屼娇鎵�鏈塐verlay閮藉湪鍚堥�傜殑瑙嗛噹鍐�, 闇�鍦∣nMapLoadedCallback.onMapLoaded() 涔嬪悗璁剧疆,鍚﹀垯璁$畻鍦板浘绾у埆浼氶敊璇�

     * <p>

     * 娉細 璇ユ柟娉曞彧瀵筂arker绫诲瀷鐨刼verlay鏈夋晥

     * </p>

     *

     */

    public void zoomToSpan() {

        if (mBaiduMap == null) {

            return;

        }

        if (mOverlayList.size() > 0) {

            LatLngBounds.Builder builder = new LatLngBounds.Builder();

            for (Overlay overlay : mOverlayList) {

                // polyline 涓殑鐐瑰彲鑳藉お澶氾紝鍙寜marker 缂╂斁

                if (overlay instanceof Marker) {

                    builder.include(((Marker) overlay).getPosition());

                }

            }

            mBaiduMap.setMapStatus(MapStatusUpdateFactory

                    .newLatLngBounds(builder.build()));

        }

    }

}

帮助类PoiOverlay==========================================================================

public class PoiOverlay extends OverlayManager {

    private static final int MAX_POI_SIZE = 10;

    private PoiResult mPoiResult = null;

    /**

     * 鏋勯�犲嚱鏁�

     *

     * @param baiduMap

     *            璇� PoiOverlay 寮曠敤鐨� BaiduMap 瀵硅薄

     */

    public PoiOverlay(BaiduMap baiduMap) {

        super(baiduMap);

    }

    /**

     * 璁剧疆POI鏁版嵁

     *

     * @param poiResult

     *            璁剧疆POI鏁版嵁

     */

    public void setData(PoiResult poiResult) {

        this.mPoiResult = poiResult;

    }

    @Override

    public final List<OverlayOptions> getOverlayOptions() {

        if (mPoiResult == null || mPoiResult.getAllPoi() == null) {

            return null;

        }

        List<OverlayOptions> markerList = new ArrayList<OverlayOptions>();

        int markerSize = 0;

        for (int i = 0; i < mPoiResult.getAllPoi().size()

                && markerSize < MAX_POI_SIZE; i++) {

            if (mPoiResult.getAllPoi().get(i).location == null) {

                continue;

            }

            markerSize++;

            Bundle bundle = new Bundle();

            bundle.putInt("index", i);

            markerList.add(new MarkerOptions()

                    .icon(BitmapDescriptorFactory.fromAssetWithDpi("Icon_mark"

                            + markerSize + ".png")).extraInfo(bundle)

                    .position(mPoiResult.getAllPoi().get(i).location));

            

        }

        return markerList;

    }

    /**

     * 鑾峰彇璇� PoiOverlay 鐨� poi鏁版嵁

     *

     * @return

     */

    public PoiResult getPoiResult() {

        return mPoiResult;

    }

    /**

     * 瑕嗗啓姝ゆ柟娉曚互鏀瑰彉榛樿鐐瑰嚮琛屼负

     *

     * @param i

     *            琚偣鍑荤殑poi鍦�

     *            {@link com.baidu.mapapi.search.poi.PoiResult#getAllPoi()} 涓殑绱㈠紩

     * @return

     */

    public boolean onPoiClick(int i) {

//        if (mPoiResult.getAllPoi() != null

//                && mPoiResult.getAllPoi().get(i) != null) {

//            Toast.makeText(BMapManager.getInstance().getContext(),

//                    mPoiResult.getAllPoi().get(i).name, Toast.LENGTH_LONG)

//                    .show();

//        }

        return false;

    }

    @Override

    public final boolean onMarkerClick(Marker marker) {

        if (!mOverlayList.contains(marker)) {

            return false;

        }

        if (marker.getExtraInfo() != null) {

            return onPoiClick(marker.getExtraInfo().getInt("index"));

        }

        return false;

    }

    @Override

    public boolean onPolylineClick(Polyline polyline) {

        // TODO Auto-generated method stub

        return false;

    }

}

配置资源==================================================================================

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<uses-permission android:name="android.permission.INTERNET"/>

<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />

<uses-permission android:name="android.permission.WAKE_LOCK"/>

<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

<uses-permission android:name="android.permission.GET_TASKS" />

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<uses-permission android:name="android.permission.WRITE_SETTINGS" />

<meta-data  

        android:name="com.baidu.lbsapi.API_KEY"  

        android:value="QRUnj5gO8dzwo4CexLs2TLHeKtM3c7rP" /> 

//记得导入所需jar包。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: