高德地图——关键字检索POI
如何你想集成高德地图SDK:跳转这儿
如何你想获取定位信息:跳转这儿
下面我们介绍下:根据关键字检索适用于在某个城市搜索某个名称相关的POI
即类似于 朋友圈获取附近位置功能
先看下效果图:
下面介绍怎么实现此功能:
类需要继承 OnPoiSearchListener 监听
public class SearchActivity extends AppCompatActivity implements PoiSearch.OnPoiSearchListener{}
开启权限 :
//设置定位权限if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_PERMISSION_LOCATION);} else {//监听EditText输入initListener();}
构造 PoiSearch.Query 对象,通过 PoiSearch.Query(String query, String ctgr, String city) 设置搜索条件,构造 PoiSearch 对象,并设置监听,调用 PoiSearch 的 searchPOIAsyn() 方法发送请求。
注意:
PoiSearch.Query(String query, String ctgr, String city)第一个参数表示搜索字符串,第二个参数表示poi搜索类型,第三个参数表示poi搜索区域(空字符串代表全国)
1、关键字未设置城市信息(默认为全国搜索)时,如果涉及多个城市数据返回,仅会返回建议城市,请根据APP需求,选取城市进行搜索。
2、不设置POI的类别,默认返回“餐饮服务”、“商务住宅”、“生活服务”这三种类别的POI,下方提供了POI分类码表,请按照列表内容设置希望检索的POI类型。(建议使用POI类型的代码进行检索)
/*** 开始进行poi搜索*/protected void doSearchQuery(String key) {currentPage = 0;//不输入城市名称有些地方搜索不到// 第一个参数表示搜索字符串,第二个参数表示poi搜索类型,第三个参数表示poi搜索区域(空字符串代表全国)query = new PoiSearch.Query(key, "", "");// 设置每页最多返回多少条poiitemquery.setPageSize(10);// 设置查询页码query.setPageNum(currentPage);//构造 PoiSearch 对象,并设置监听poiSearch = new PoiSearch(this, query);poiSearch.setOnPoiSearchListener(this);//调用 PoiSearch 的 searchPOIAsyn() 方法发送请求。poiSearch.searchPOIAsyn();}
通过回调接口 onPoiSearched 解析返回的结果
/*** POI信息查询回调方法*/@Overridepublic void onPoiSearched(PoiResult result, int rCode) {//rCode 为1000 时成功,其他为失败if (rCode == AMapException.CODE_AMAP_SUCCESS) {// 解析result 获取搜索poi的结果if (result != null && result.getQuery() != null) {if (result.getQuery().equals(query)) { // 是否是同一条poiResult = result;ArrayList<LocationAddressInfo> data = new ArrayList<LocationAddressInfo>();//自己创建的数据集合// 取得第一页的poiitem数据,页数从数字0开始//poiResult.getPois()可以获取到PoiItem列表List<PoiItem> poiItems = poiResult.getPois();//若当前城市查询不到所需POI信息,可以通过result.getSearchSuggestionCitys()获取当前Poi搜索的建议城市List<SuggestionCity> suggestionCities = poiResult.getSearchSuggestionCitys();//如果搜索关键字明显为误输入,则可通过result.getSearchSuggestionKeywords()方法得到搜索关键词建议。List<String> suggestionKeywords = poiResult.getSearchSuggestionKeywords();//解析获取到的PoiItem列表for(PoiItem item : poiItems){//获取经纬度对象LatLonPoint llp = item.getLatLonPoint();double lon = llp.getLongitude();double lat = llp.getLatitude();//返回POI的名称String title = item.getTitle();//返回POI的地址String text = item.getSnippet();data.add(new LocationAddressInfo(String.valueOf(lon), String.valueOf(lat), title, text));}listAdapter = new LocationListAdapter(this, data);listView.setAdapter(listAdapter);}} else {Toast.makeText(SearchActivity.this,"无搜索结果",Toast.LENGTH_SHORT).show();}} else {Toast.makeText(SearchActivity.this,"错误码"+rCode,Toast.LENGTH_SHORT).show();}}
下面附上 PoiItem类 方法: 跳转这儿查看详细方法说明
限定符和类型 | 方法和说明 |
---|---|
boolean
|
equals(java.lang.Object obj)
比较两个POI 的id 是否相等。 |
java.lang.String
|
getAdCode()
返回POI 的行政区划代码。 |
java.lang.String
|
getAdName()
返回POI 的行政区划名称。 |
java.lang.String
|
getBusinessArea()
返回POI的所在商圈。 |
java.lang.String
|
getCityCode()
返回POI的城市编码 |
java.lang.String
|
getCityName()
返回POI的城市名称。 |
java.lang.String
|
getDirection()
返回逆地理编码查询时POI坐标点相对于地理坐标点的方向。 |
int
|
getDistance()
获取 POI 距离中心点的距离。 |
java.lang.String
|
getEmail()
返回POI的电子邮件地址。 |
LatLonPoint
|
getEnter()
返回POI入口经纬度。 |
LatLonPoint
|
getExit()
返回POI出口经纬度。 |
IndoorData
|
getIndoorData()
返回POI的室内信息,如楼层、建筑物。 |
LatLonPoint
|
getLatLonPoint()
返回POI的经纬度坐标 |
java.lang.String
|
getParkingType()
返回POI的停车场类型 |
java.util.List<Photo>
|
getPhotos()
返回POI的图片信息。 |
PoiItemExtension
|
getPoiExtension()
返回POI的扩展信息。 |
java.lang.String
|
getPoiId()
返回POI 的id,即其唯一标识。 |
java.lang.String
|
getPostcode()
返回POI的邮编。 |
java.lang.String
|
getProvinceCode()
返回 POI 的省/自治区/直辖市/特别行政区编码。 |
java.lang.String
|
getProvinceName()
返回POI的省/自治区/直辖市/特别行政区名称 。 |
java.lang.String
|
getSnippet()
返回POI的地址。 |
java.util.List<SubPoiItem>
|
getSubPois()
子POI信息获取。 |
java.lang.String
|
getTel()
返回POI的电话号码。 |
java.lang.String
|
getTitle()
返回POI的名称。 |
java.lang.String
|
getTypeCode()
返回兴趣点类型编码。 |
java.lang.String
|
getTypeDes()
返回POI 的类型描述。 |
java.lang.String
|
getWebsite()
返回POI的网址。 |
int
|
hashCode()
继承自Object,直接返回POI id 的hashcode。 |
boolean
|
isIndoorMap()
返回是否支持室内地图 。 |
java.lang.String
|
toString()
继承自Object,返回POI 的名称(name)。 |
下面附上完整代码如下:
import android.Manifest;
import android.annotation.TargetApi;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.Toast;import com.amap.api.services.core.AMapException;
import com.amap.api.services.core.LatLonPoint;
import com.amap.api.services.core.PoiItem;
import com.amap.api.services.core.SuggestionCity;
import com.amap.api.services.poisearch.PoiResult;
import com.amap.api.services.poisearch.PoiSearch;import java.util.ArrayList;
import java.util.List;public class SearchActivity extends AppCompatActivity implements PoiSearch.OnPoiSearchListener{private EditText mEt_keyword;private RecyclerView listView;private static final int REQUEST_PERMISSION_LOCATION = 0;private String keyWord = "";// 要输入的poi搜索关键字private PoiResult poiResult; // poi返回的结果private int currentPage = 0;// 当前页面,从0开始计数private PoiSearch.Query query;// Poi查询条件类private PoiSearch poiSearch;// POI搜索private List<LocationAddressInfo> mData = new ArrayList<>();private LocationListAdapter listAdapter;@TargetApi(Build.VERSION_CODES.M)@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_search);mEt_keyword = (EditText) findViewById(R.id.et_keyword);listView = (RecyclerView) findViewById(R.id.irc_listview);listView.setLayoutManager(new LinearLayoutManager(this));//设置定位权限if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_PERMISSION_LOCATION);} else {//监听EditText输入initListener();}}private void initListener() {mEt_keyword.addTextChangedListener(new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}@Overridepublic void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {keyWord = String.valueOf(charSequence);if ("".equals(keyWord)) {Toast.makeText(SearchActivity.this,"请输入搜索关键字",Toast.LENGTH_SHORT).show();return;} else {doSearchQuery(keyWord);}}@Overridepublic void afterTextChanged(Editable editable) {}});}/*** 开始进行poi搜索*/protected void doSearchQuery(String key) {currentPage = 0;//不输入城市名称有些地方搜索不到// 第一个参数表示搜索字符串,第二个参数表示poi搜索类型,第三个参数表示poi搜索区域(空字符串代表全国)query = new PoiSearch.Query(key, "", "");// 设置每页最多返回多少条poiitemquery.setPageSize(10);// 设置查询页码query.setPageNum(currentPage);//构造 PoiSearch 对象,并设置监听poiSearch = new PoiSearch(this, query);poiSearch.setOnPoiSearchListener(this);//调用 PoiSearch 的 searchPOIAsyn() 方法发送请求。poiSearch.searchPOIAsyn();}/*** POI信息查询回调方法*/@Overridepublic void onPoiSearched(PoiResult result, int rCode) {//rCode 为1000 时成功,其他为失败if (rCode == AMapException.CODE_AMAP_SUCCESS) {// 解析result 获取搜索poi的结果if (result != null && result.getQuery() != null) {if (result.getQuery().equals(query)) { // 是否是同一条poiResult = result;ArrayList<LocationAddressInfo> data = new ArrayList<LocationAddressInfo>();//自己创建的数据集合// 取得第一页的poiitem数据,页数从数字0开始//poiResult.getPois()可以获取到PoiItem列表List<PoiItem> poiItems = poiResult.getPois();//若当前城市查询不到所需POI信息,可以通过result.getSearchSuggestionCitys()获取当前Poi搜索的建议城市List<SuggestionCity> suggestionCities = poiResult.getSearchSuggestionCitys();//如果搜索关键字明显为误输入,则可通过result.getSearchSuggestionKeywords()方法得到搜索关键词建议。List<String> suggestionKeywords = poiResult.getSearchSuggestionKeywords();//解析获取到的PoiItem列表for(PoiItem item : poiItems){//获取经纬度对象LatLonPoint llp = item.getLatLonPoint();double lon = llp.getLongitude();double lat = llp.getLatitude();//返回POI的名称String title = item.getTitle();//返回POI的地址String text = item.getSnippet();data.add(new LocationAddressInfo(String.valueOf(lon), String.valueOf(lat), title, text));}listAdapter = new LocationListAdapter(this, data);listView.setAdapter(listAdapter);}} else {Toast.makeText(SearchActivity.this,"无搜索结果",Toast.LENGTH_SHORT).show();}} else {Toast.makeText(SearchActivity.this,"错误码"+rCode,Toast.LENGTH_SHORT).show();}}/*** POI信息查询回调方法*/@Overridepublic void onPoiItemSearched(PoiItem item, int rCode) {}
}
详细 获取POI数据 sdk介绍请看 高德开发指南:https://lbs.amap.com/api/android-sdk/guide/map-data/poi/?sug_index=2
demo下载链接:https://download.csdn.net/download/shanshan_1117/10679670
demo效果图:
高德地图——关键字检索POI相关推荐
- 利用高德地图关键字检索POI-实现仿微信发朋友圈搜索附近位置
转载请注明出处:http://blog.csdn.net/Alpha58/article/details/57079874 前言 由于项目中需要实现搜索附近位置作为收获地址,所以采用了高德地图的关键字 ...
- 高德地图-搜索服务-POI搜索
高德地图-搜索服务-POI搜索 之前公司项目收货地址仿饿了么的收货地址,结果发现自己实现的关键字搜索和周边搜索,搜索到的poi列表跟饿了么的并不完全一样,后来考虑了下,应该是搜索的范围.类型之类的设置 ...
- 高德地图——定位 检索 导航全套
附上DEMO 申请key http://lbs.amap.com/dev/key#/ 秘钥生成方法 测试版SHA1获取方法: public String sHA1(Context context) { ...
- 高德地图关键字提示搜索获取经纬度
效果图: 具体代码: <!doctype html> <html> <head><meta charset="utf-8">< ...
- 高德地图——定位,POI搜索
1.创建应用获取KEY 创建应用 填写应用相关的信息 获取SHA1值 获取KEY值 2.Android studio 项目配置,集成SDK 配置Gradle,通过build.gradle进行sdk的配 ...
- 百度地图、高德地图都用POI吸引你,不过它到底是什么?
原文地址:http://www.leiphone.com/news/201612/u8F791BLvlIENtZa.html 对于地图产品而言,某个地理位置周边的信息,称之为 POI .本文作者将简单 ...
- 高德地图-兴趣点(POI)
兴趣点(POI->Point of Interest) <!DOCTYPE html> <html lang="en"> <head>&l ...
- 高德地图关键字搜索oc版
.h文件 // MapSearchViewController.h // JMT // // Created by walker on 16/10/11. // Copyright © 201 ...
- 腾讯,百度,高德地图兴趣点(POI)的获取以及查询,逆解析解析
1.POI数据介绍 POI数据介绍 POI是"Point of Interest"的缩写,中文可以翻译为"兴趣点".POI数据会包含各种信息,如前面提到的名称. ...
最新文章
- Eclipse + Spring boot +mybatis + mysql(后续)
- elasticsearch-5.0.0初见
- 统计_statistics_不同的人_大样本_分析_统计方法_useful ?
- RAC环境下创建本地数据文件的解决方法
- 个人信息管理系统代码_Thymeleaf+SpringBoot+Mybatis实现的易游网旅游信息管理系统...
- 用solidity语言开发代币智能合约
- 增强服务器安全性能,加强Linux服务器安全的20项建议
- Java8新特性:Stream介绍和总结
- 算法移植优化(六)tensorflow模型移植推理优化
- vertica 数据库 linux,配置访问列式数据库vertica的php环境
- 无人驾驶——路径规划的学习笔记
- 解析HttpURLConnection与代理服务器
- 21世纪十大营销法则
- 作为程序员的我,大学四年一直自学,全靠这些实用工具和学习网站!
- 汽车4G车载TBOX智能信息终端
- CHM:新生儿肠道微生物菌群研究
- java从小白到架构师学习路线
- 无人驾驶技术的7大典型应用场景
- 小米商城热销模块样式
- 如何更改layui弹出层样式