300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Android studio百度地图SDK开发 最新超详细的Android 百度地图开发讲解(6) PO

Android studio百度地图SDK开发 最新超详细的Android 百度地图开发讲解(6) PO

时间:2024-06-18 05:02:10

相关推荐

Android studio百度地图SDK开发 最新超详细的Android 百度地图开发讲解(6) PO

POI检索, 根据地址输入提示检索 Sug

参考百度地图官方文档:/index.php?title=androidsdk/guide/search/suggestion

地点检索输入提示服务(也被称为POI热词建议检索、在线建议检索、Suggestion POI search),简称Sug检索,是指根据关键词查询在线建议词。为了帮助开发者实现检索出来的关键词快速定位到地图上,SDK开放了检索结果的经纬度信息及对应POI点的UID信息。

Sug检索与POI检索的区别

使用场景的不同

Sug检索是根据部分关键字检索出可能的完整关键字名称,即关键字匹配。POI检索是根据关键字检索符合的POI具体信息。

Sug检索结果的第一条可能存在没有经纬度信息的情况,该条结果为文字联想出来的关键词结果,并不对应任何确切POI点。

例如输入“肯”,第一条结果为“肯德基”,这条结果是一个泛指的名称,不会带有经纬度等信息。

建议Sug检索与POI检索配合使用,如:在用户输入关键字时触发Sug检索获取热词,以符合期望的热词为关键字发起POI检索。

Sug检索步骤

关键关键点,Activity要implements View.OnClickListener, OnGetSuggestionResultListener就是要继承这两个接口

步骤一 创建Sug检索实例

这句代码必不可少

mSuggestionSearch = SuggestionSearch.newInstance();

建议在一个函数中写,然后在onCreate中调用。 以保持代码的整洁,方便后期维护。

首先添加如下变量,在onCreate之前定义

//POI搜索private SuggestionSearch mSuggestionSearch = null;// 搜索关键字输入窗口private EditText mEditCity = null;private AutoCompleteTextView mKeyWordsView = null;private ListView mSugListView;

在定义一个方法来创建Sug检索实例

//开始POI搜索,此下位POI搜索方法//POIprivate void PoiSugSearch(){// 初始化建议搜索模块,注册建议搜索事件监听mSuggestionSearch = SuggestionSearch.newInstance();mSuggestionSearch.setOnGetSuggestionResultListener(this);}

步骤二 创建Sug检索监听器

核心代码为:

OnGetSuggestionResultListener listener = new OnGetSuggestionResultListener() {@Overridepublic void onGetSuggestionResult(SuggestionResult suggestionResult) {//处理sug检索结果}};

参考百度地图官方Demo,添加以下代码,作为一个方法引入:

/*** 获取在线建议搜索结果,得到requestSuggestion返回的搜索结果** @param suggestionResult Sug检索结果*/@Overridepublic void onGetSuggestionResult(SuggestionResult suggestionResult) {if (suggestionResult == null || suggestionResult.getAllSuggestions() == null) {return;}List<HashMap<String, String>> suggest = new ArrayList<>();for (SuggestionResult.SuggestionInfo info : suggestionResult.getAllSuggestions()) {if (info.getKey() != null && info.getDistrict() != null && info.getCity() != null) {HashMap<String, String> map = new HashMap<>();map.put("key",info.getKey());map.put("city",info.getCity());map.put("dis",info.getDistrict());suggest.add(map);}}SimpleAdapter simpleAdapter = new SimpleAdapter(getApplicationContext(),suggest,R.layout.item_layout,new String[]{"key", "city","dis"},new int[]{R.id.sug_key, R.id.sug_city, R.id.sug_dis});mSugListView.setAdapter(simpleAdapter);simpleAdapter.notifyDataSetChanged();}

此时会有item_layout报错。需要手动引入。如果有下载官方Demo可以直接在Demo中查找。也可以通过我分享的百度云链接直接下载。

链接:/s/1k4jV-LnixLQ7OhQ3HRkdAA

提取码:yjpj

下载完后打开

将item_layout复制到项目的layout目录下

可见加入后还有几个dimen报错,这是因为在dimen中还没更新,此时打开之前下载的资源包,打开values文件夹,将里面的dimens.xml复制到项目的values目录下,会自动把新的添加。

也可以直接复制下面的粘贴。

<resources><dimen name="activity_horizontal_margin">16dp</dimen><dimen name="activity_vertical_margin">16dp</dimen><dimen name="custom_profile_image">50dp</dimen><dimen name="custom_profile_padding">2dp</dimen><dimen name="margin">8dp</dimen><dimen name="poi_title_size">14sp</dimen><dimen name="ui_size">12sp</dimen><dimen name="actionbar_size">35sp</dimen></resources>

步骤三 设置SuggestionSearchOption对象,发起检索

直接添加以下代码,以一个方法的形式引入

private void request(){// 当输入关键字变化时,动态更新建议列表mKeyWordsView.addTextChangedListener(new TextWatcher() {@Overridepublic void afterTextChanged(Editable arg0) {}@Overridepublic void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {}@Overridepublic void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {if (cs.length() <= 0) {return;}// 使用建议搜索服务获取建议列表,结果在onSuggestionResult()中更新mSuggestionSearch.requestSuggestion((new SuggestionSearchOption()).keyword(cs.toString()) // 关键字.city(mEditCity.getText().toString())); // 城市}});}

记得在onCreate中调用request()方法

步骤四 初始化View,以及修改布局文件

初始化View,代码如下,直接复制粘贴,然后在onCreate中调用方法。

private void initView(){// 初始化view//mEditCity = (EditText) findViewById(R.id.city);mSugListView = (ListView) findViewById(R.id.sug_list);mKeyWordsView = (AutoCompleteTextView) findViewById(R.id.editText);mKeyWordsView.setThreshold(1);}

此处的id city sug_list editText 分别是城市,用于展示关键词搜索到的listView展示页面,地址输入框的id,可以根据自己的实际需求修改。

修改布局文件,添加以下布局

<ListViewandroid:id="@+id/sug_list"android:layout_width="match_parent"android:layout_height="wrap_content" />

<AutoCompleteTextViewandroid:id="@+id/editText"android:layout_width="@dimen/activity_main_editext_width"android:layout_height="wrap_content"android:layout_weight="6"android:ems="10"android:inputType="textPersonName"android:text="@string/main_editext_name"android:layout_marginLeft="@dimen/activity_main_editext__marleft"/>

到这里基本就完成了,个别有错误的自己修改,仔细检查后一般没有问题,可以根据自己需要修改一些地方。运行调试。输入时结果如下:

最后附上onCreate中的方法。

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);SDKInitializer.initialize(getApplicationContext());setContentView(R.layout.activity_main);SDKInitializer.setCoordType(CoordType.BD09LL);//没有这个HTTP申请无法实现路线规划SDKInitializer.setHttpsEnable(true);/* 设置定位代码 */this.context = this;//获取百度地图控件mMapView = (MapView) findViewById(R.id.bmapView);//获取地图控件对象mBaiduMap = mMapView.getMap();initMyLocation(); //定位方法/* 设置定位代码 *///设置地图默认定位位置,地图中心位target的经纬度MapStatusUpdate mapStatusUpdate= MapStatusUpdateFactory.newLatLng(target);mBaiduMap.setMapStatus(mapStatusUpdate);//设置地图缩放比例为15mapStatusUpdate = MapStatusUpdateFactory.zoomTo(18);mBaiduMap.setMapStatus(mapStatusUpdate);//路线规划方法initRoutePlan();//POI关键词检索的方法调用PoiSugSearch();initView();request();button();}

一些可以自定义的点

item_layout.xml

这个布局文件可以根据的需要修改,调试发现这个item布局文件就是前面listView中调用来展示关键词检索地点的,所以可以自己修改设计

Android studio百度地图SDK开发 最新超详细的Android 百度地图开发讲解(6) POI检索 根据地址输入提示检索 Sug

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。