您的位置:首页 > 移动开发 > Android开发

Android开发-百度地图API_v4.1.1-AndroidStudio(五)检索功能

2016-11-23 10:13 429 查看
转载请注明出处: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

邮箱:iwanghang@qq.com

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