如何你想集成高德地图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的经纬度坐标
如果使用该POI进行导航时,可以检查POI是否有PoiItem.getExit() 和 PoiItem.getEnter(),如果有建议使用它们作为导航的起终点。

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相关推荐

  1. 利用高德地图关键字检索POI-实现仿微信发朋友圈搜索附近位置

    转载请注明出处:http://blog.csdn.net/Alpha58/article/details/57079874 前言 由于项目中需要实现搜索附近位置作为收获地址,所以采用了高德地图的关键字 ...

  2. 高德地图-搜索服务-POI搜索

    高德地图-搜索服务-POI搜索 之前公司项目收货地址仿饿了么的收货地址,结果发现自己实现的关键字搜索和周边搜索,搜索到的poi列表跟饿了么的并不完全一样,后来考虑了下,应该是搜索的范围.类型之类的设置 ...

  3. 高德地图——定位 检索 导航全套

    附上DEMO 申请key http://lbs.amap.com/dev/key#/ 秘钥生成方法 测试版SHA1获取方法: public String sHA1(Context context) { ...

  4. 高德地图关键字提示搜索获取经纬度

    效果图: 具体代码: <!doctype html> <html> <head><meta charset="utf-8">< ...

  5. 高德地图——定位,POI搜索

    1.创建应用获取KEY 创建应用 填写应用相关的信息 获取SHA1值 获取KEY值 2.Android studio 项目配置,集成SDK 配置Gradle,通过build.gradle进行sdk的配 ...

  6. 百度地图、高德地图都用POI吸引你,不过它到底是什么?

    原文地址:http://www.leiphone.com/news/201612/u8F791BLvlIENtZa.html 对于地图产品而言,某个地理位置周边的信息,称之为 POI .本文作者将简单 ...

  7. 高德地图-兴趣点(POI)

    兴趣点(POI->Point of Interest) <!DOCTYPE html> <html lang="en"> <head>&l ...

  8. 高德地图关键字搜索oc版

    .h文件 //  MapSearchViewController.h //  JMT // //  Created by walker on 16/10/11. //  Copyright © 201 ...

  9. 腾讯,百度,高德地图兴趣点(POI)的获取以及查询,逆解析解析

    1.POI数据介绍 POI数据介绍 POI是"Point of Interest"的缩写,中文可以翻译为"兴趣点".POI数据会包含各种信息,如前面提到的名称. ...

最新文章

  1. Eclipse + Spring boot +mybatis + mysql(后续)
  2. elasticsearch-5.0.0初见
  3. 统计_statistics_不同的人_大样本_分析_统计方法_useful ?
  4. RAC环境下创建本地数据文件的解决方法
  5. 个人信息管理系统代码_Thymeleaf+SpringBoot+Mybatis实现的易游网旅游信息管理系统...
  6. 用solidity语言开发代币智能合约
  7. 增强服务器安全性能,加强Linux服务器安全的20项建议
  8. Java8新特性:Stream介绍和总结
  9. 算法移植优化(六)tensorflow模型移植推理优化
  10. vertica 数据库 linux,配置访问列式数据库vertica的php环境
  11. 无人驾驶——路径规划的学习笔记
  12. 解析HttpURLConnection与代理服务器
  13. 21世纪十大营销法则
  14. 作为程序员的我,大学四年一直自学,全靠这些实用工具和学习网站!
  15. 汽车4G车载TBOX智能信息终端
  16. CHM:新生儿肠道微生物菌群研究
  17. java从小白到架构师学习路线
  18. 无人驾驶技术的7大典型应用场景
  19. 小米商城热销模块样式
  20. 如何更改layui弹出层样式

热门文章

  1. 烙铁头不沾锡原因分析,及烙铁头保养!
  2. Windows orb-slam2 单目测试工程
  3. CANoe.DiVa 操作指南 - 时间参数配置
  4. apache配置wss
  5. Cocos2d-x Lua库函数剖析(二)cocos2d
  6. linux双系统uefi启动顺序,UEFI下Windows启动引导的顺序(附带linux双系统)
  7. 神武4 电脑版天魔里职业玩法攻略(原创)
  8. 1nm晶体管诞生 秒杀当前14nm主流芯片制程
  9. ChatGPT版必应疑似「发疯」?微软紧急限制回答数目
  10. 商业智能系统实施步骤