zoukankan      html  css  js  c++  java
  • 高德地图-搜索服务-POI搜索

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

    之前公司项目收货地址仿饿了么的收货地址,结果发现自己实现的关键字搜索和周边搜索,搜索到的poi列表跟饿了么的并不完全一样,后来考虑了下,应该是搜索的范围、类型之类的设置的不一样。后来搜索了下,也的确是这样,,现在记录下来,留给自己也留给大家。

    关键字搜索

    周边搜索

    区域搜索

    高德地图 Android SDK 提供了千万级别的POI(Point Of Interesting,兴趣点)的搜索。

    目前支持关键字搜索、周边搜索、指定区域搜索的同步、异步方法。搜索返回 POI 的基本信息,如POI ID,POI 名称、类型、经纬度、地址等。

    关键字搜索

    通过 PoiSearch.Query(String query, String ctgr, String city) 设置搜索条件。参数“query”为搜索的关键字,“ctgr”为搜索类型(类型参照表从相关下载处获取)、“city”为搜索城市,是必填参数,关键字和类型至少输入一个。

    设置搜索条件,发送请求

     

            query = new PoiSearch.Query(keyWord, "", cityCode);
    
    // keyWord表示搜索字符串,
    
    //第二个参数表示POI搜索类型,二者选填其一,
    
    //POI搜索类型共分为以下20种:汽车服务|汽车销售|
    
    //汽车维修|摩托车服务|餐饮服务|购物服务|生活服务|体育休闲服务|医疗保健服务|
    
    //住宿服务|风景名胜|商务住宅|政府机构及社会团体|科教文化服务|交通设施服务|
    
    //金融保险服务|公司企业|道路附属设施|地名地址信息|公共设施
    
    //cityCode表示POI搜索区域的编码,是必须设置参数
    
            query.setPageSize(10);// 设置每页最多返回多少条poiitem
    
            query.setPageNum(currentPage);//设置查询页码
    
            PoiSearch poiSearch = new PoiSearch(this, query);//初始化poiSearch对象
    
            poiSearch.setOnPoiSearchListener(this);//设置回调数据的监听器
    
            poiSearch.searchPOIAsyn();//开始搜索

     

    通过回调接口接受并解析返回的结果。

    public void onPoiSearched(PoiResult result, int rCode) {
    //可以在回调中解析result,获取POI信息
    //result.getPois()可以获取到PoiItem列表,Poi详细信息可参考PoiItem类
    //若当前城市查询不到所需Poi信息,可以通过result.getSearchSuggestionCitys()获取当前Poi搜索的建议城市
    //如果搜索关键字明显为误输入,则可通过result.getSearchSuggestionKeywords()方法得到搜索关键词建议
    //返回结果成功或者失败的响应码。0为成功,其他为失败(详细信息参见网站开发指南-错误码对照表)
    }

    显示效果如图所示:

    周边搜索

    使用 PoiSearch.searchPOIAsyn() 搜索 POI。使用 PoiSearch.setOnPoiSearchListener() 方法设置监听器,在 PoiSearch.OnPoiSearchListener 接口回调方法 onPoiSearched(PoiResult poiResult,int rCode)中处理返回结果。当指定搜索城市时,若没有返回 POI 结果,则会返回包含关键字的建议城市名称。当关键字搜索无结果时,则会返回搜索建议关键字。

    设置搜索条件,发送请求

    query = new PoiSearch.Query(keyWord, "汽车维修|餐饮服务", cityCode);
    // keyWord表示搜索字符串,第二个参数表示POI搜索类型,默认为:生活服务、餐饮服务、商务住宅
    //共分为以下20种:汽车服务|汽车销售|
    //汽车维修|摩托车服务|餐饮服务|购物服务|生活服务|体育休闲服务|医疗保健服务|
    //住宿服务|风景名胜|商务住宅|政府机构及社会团体|科教文化服务|交通设施服务|
    //金融保险服务|公司企业|道路附属设施|地名地址信息|公共设施
    //cityCode表示POI搜索区域,(这里可以传空字符串,空字符串代表全国在全国范围内进行搜索)
    query.setPageSize(10);// 设置每页最多返回多少条poiitem
    query.setPageNum(currentPage);//设置查第一页
    PoiSearch poiSearch = new PoiSearch(this,query);
    poiSearch.setBound(new SearchBound(new LatLonPoint(locationMarker.getPosition().latitude,
            locationMarker.getPosition().longitude), 1000));//设置周边搜索的中心点以及区域
    poiSearch.setOnPoiSearchListener(this);//设置数据返回的监听器
    poiSearch.searchPoiAsyn();//开始搜索

    通过回调接口获取数据

    public void onPoiSearched(PoiResult result, int rCode) {
    //在回调函数中解析result获取POI信息
    //result.getPois()可以获取到PoiItem列表,Poi详细信息可参考PoiItem类
    //若当前城市查询不到所需Poi信息,可以通过result.getSearchSuggestionCitys()获取当前Poi搜索的建议城市
    //如果搜索关键字明显为误输入,则可通过result.getSearchSuggestionKeywords()方法得到搜索关键词建议
    //返回结果成功或者失败的响应码。0为成功,其他为失败(详细信息参见网站开发指南-错误码对照表)
    }

    显示效果如图所示:

    image

     

    区域搜索

    在周边搜索的基础上,增加了矩形限定区域。根据搜索矩形区域左下角和右上角的顶点坐标,使用 PoiSearch.SearchBound(LatLonPoint lowerLeft, LatLonPoint upperRight) 设置搜索范围。

    输入提示搜索

    在输入关键字(至少两个字符)时,可以使用Inputtips类的 Inputtips.InputtipsListener 接口监听输入信息,并使用 requestInputtips(String keyword, String city) 发送提示请求。

    注:提示中会出现相同的关键字,但是这些关键字所在区域不同,使用时可以通过 tipList.get(i).getDistrict() 获得区域,也可以在提示时在关键字后加上区域。

    例如用户输入“高德”,输入框下方的列表会显示包含关键字字段的输入提示信息。

    显示效果如图所示:

    示例代码如下:

    image

    image

    // 发送输入提示请求 
    // newText表示提示关键字,第二个参数默认代表全国,也可以为城市区号
    inputTips.requestInputtips(newText, "");

    通过回调接口获取数据

    public void onGetInputtips(List<Tip> inputTips, int rcode){
    //在回调函数中解析inputTips,获取输入提示返回的信息
    //Tip类中包含Poi的Adcode、District、Name信息
    //返回结果成功或者失败的响应码。0为成功,其他为失败(详细信息参见网站开发指南-错误码对照表)
    }

    行政区划搜索

    根据县(区)级行政区划名称查询其下级区划的详细信息,如:中心点坐标、编码等等。

    DistrictSearch search = new DistrictSearch(mContext);
    DistrictSearchQuery query = new DistrictSearchQuery();
    query.setKeywords("keywords");//传入关键字
    query.setKeywordsLevel(DistrictSearchQuery.KEYWORDS_CITY);
    query.setShowBoundary(true);//是否返回边界值
    search.setQuery(query);
    search.setOnDistrictSearchListener(this);//绑定监听器
    search.searchDistrictAnsy();//开始搜索

    通过回调接口获取数据

    public void onDistrictSearched(DistrictResult districtResult) {
    //在回调函数中解析districtResult获取行政区划信息
    //在districtResult.getAMapException().getErrorCode()=0时调用districtResult.getDistrict()方法
    //获取查询行政区的结果,详细信息可以参考DistrictItem类。
    }

     显示效果如图所示:

     

     
    image
  • 相关阅读:
    mojo 接口示例
    MojoliciousLite: 实时的web框架 概述
    接口返回json
    centos 6.7 perl 版本 This is perl 5, version 22 安装DBI DBD
    centos 6.7 perl 5.22 安装DBD 需要使用老的perl版本
    商业智能改变汽车行业
    商业智能改变汽车行业
    读MBA经历回顾(上)目的决定手段——北漂18年(48)
    perl 升级到5.20版本
    Group Commit of Binary Log
  • 原文地址:https://www.cnblogs.com/dingzq/p/5581365.html
Copyright © 2011-2022 走看看