精华内容
下载资源
问答
  • POI搜索POI搜索

    2014-10-27 15:26:11
    POI搜索
  • POI搜索

    2018-07-02 16:18:06
    <title>POI搜索 html, body { width: 100%; height: 100%; margin: 0px; padding: 0; font-size: 13px; } #outer-box { height: 100%; padding-right: 300px; } #container { height: 100%; ...
    <!doctype html>
    <html lang="zh-CN">
    
    <head>
        <!-- 原始地址://webapi.amap.com/ui/1.0/ui/misc/PoiPicker/examples/search.html -->
        <base href="//webapi.amap.com/ui/1.0/ui/misc/PoiPicker/examples/" />
        <meta charset="utf-8">
        <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
        <title>POI搜索</title>
        <style>
        html,
        body {
            width: 100%;
            height: 100%;
            margin: 0px;
            padding: 0;
            font-size: 13px;
        }
        
        #outer-box {
            height: 100%;
            padding-right: 300px;
        }
        
        #container {
            height: 100%;
            width: 100%;
        }
        
        #panel {
            position: absolute;
            top: 0;
            bottom: 0;
            right: 0;
            height: 100%;
            overflow: auto;
            width: 300px;
            z-index: 999;
            border-left: 1px solid #eaeaea;
            background: #fff;
        }
        
        #searchBar {
            height: 30px;
            background: #ccc;
        }
        
        #searchInput {
            width: 100%;
            height: 30px;
            line-height: 30%;
            -webkit-box-sizing: border-box;
            box-sizing: border-box;
            border: none;
            border-bottom: 1px solid #ccc;
            padding: 0 5px;
        }
        
        #searchResults {
            overflow: auto;
            height: calc(100% - 30px);
        }
        
        .amap_lib_placeSearch,
        .amap-ui-poi-picker-sugg-container {
            border: none!important;
        }
        
        .amap_lib_placeSearch .poibox.highlight {
            background-color: #CAE1FF;
        }
        
        .poi-more {
            display: none!important;
        }
        </style>
    </head>
    
    <body>
        <div id="outer-box">
            <div id="container" class="map" tabindex="0"></div>
            <div id="panel" class="scrollbar1">
                <div id="searchBar">
                    <input id="searchInput" placeholder="输入关键字搜素POI" />
                </div>
                <div id="searchResults"></div>
            </div>
        </div>
        <script type="text/javascript" src='http://webapi.amap.com/maps?v=1.4.6&key=6202c32e3dccbecd6d7251d9f396db30'></script> 
    
        <!-- UI组件库 1.0 -->
        <script src="http:webapi.amap.com/ui/1.0/main.js?v=1.0.11"></script>
        <script type="text/javascript">
        var map = new AMap.Map('container', {
            zoom: 10
        });
    
        AMapUI.loadUI(['misc/PoiPicker'], function(PoiPicker) {
    
            var poiPicker = new PoiPicker({
                input: 'searchInput',
                placeSearchOptions: {
                    map: map,
                    pageSize: 10
                },
                searchResultsContainer: 'searchResults'
            });
    
            poiPicker.on('poiPicked', function(poiResult) {
    
                poiPicker.hideSearchResults();
    
                var source = poiResult.source,
                poi = poiResult.item;
    			debugger
                if (source !== 'search') {
    				
                    //suggest来源的,同样调用搜索
                    poiPicker.searchByKeyword(poi.name);
    
                } else {//点击marker触发
    				alert(poi.address)
                    //console.log(poi);
                }
            });
    
            poiPicker.onCityReady(function() {//默认值
                poiPicker.searchByKeyword('');
            });
        });
        </script>
    </body>
    
    </html>

    展开全文
  • 用户输入——用户输出-----------------------------------------------------------而POI搜索引擎,需要做的就是拿到输入条件,给出用户比较满意的结果。用户角度:输入:尽量简单,且符合心意输入时的假设:假设1...

    用户输入——用户输出

    -----------------------------------------------------------

    而POI搜索引擎,需要做的就是拿到输入条件,给出用户比较满意的结果。

    用户角度:

    输入:尽量简单,且符合心意

    输入时的假设:

    假设1:用户是不知道地点和具体名称的:此时用户只需要提供地域范围和类别。

    地域范围:POI搜索引擎也分为:某地点为中心搜索(如当前位置、目的地等)、沿导航线路搜索

    类别:POI搜索引擎可以提供类别选择,供用户选择,作为输入。并且在类别方面,有更细节子类可供筛选,如hotel的星级、价格区间、是否支持信用卡等。假设2:用户知道POI的具体名称或其他信息,不知道地点此时用户需要在假设1的基础上,输入过滤信息,如名称或电话,对搜索结果进行过滤,不应要求精确匹配,一些模糊匹配即可输出:

    POI的name、距离列表。每个POI还包含有详细的信息:包括地址、电话、邮编...

    一.含义:POI是“Point of Information”的缩写,可以翻译成“信息点”,每个POI包含四方面信息,名称、类别、经度纬度、附近的酒店饭店商铺等信息。我们可以叫它为“导航地图信息”,导航地图数据是整个导航产业的基石。

    POI具体是在地图上任何非地理意义的有意义的点:比如商店,酒吧,加油站,医院,车站等。不属于poi的是有地理意义的坐标:城市,河流,山峰

    二.POI搜索常见功能:

    关键字查询

    输入提示

    周边查询

    可视区域查询

    范围内查询

    道路查询(交叉口)

    自有数据检索(不需要数据库)等

    三.POI特性

    1. POI一般包含哪些信息?

    POI ID和version ID用于标识poi的身份,及更新信息。这些信息在PoiTable中应该是主键信息。

    POI的属性也就是POI的主要特性。分为主要主属性和次要属性。

    a. 主要属性包括:

    地理坐标, 一般是GPS绝对位置坐标

    名称,可以是多语言支持

    地域ID(region id)

    邮编

    电话

    b. 次要属性,用于提供特殊详细信息,细分POI搜索结果,与icon图标关联等。

    2. POI的分类

    POI数量巨大,其类型被分为两个级别:

    a. 抽象类别,包含子类,是一个抽象概念

    b. 具体子类,无任何子类,比较具体

    3. POI之间的联系

    两个POI之间可以的联系

    partof:POI是另外一个POI的一部分,如机场内的POI

    access:能进入另外一个POI,如停车场、大门、车库等

    LOGICAL_ACCESS:逻辑上进入另外一个POI的入口,如POI附近,高速路上的出口

    GUIDANCE_POINT:

    ACTIVATION: 如到达一个著名大楼之前,就有一个提示点(如标牌或视频等)。

    PREFERRED: 多个同类的POI中,最优的

    4. 目前车辆与POI的关系,也是POI的重要特性。

    展开全文
  • POI搜索​​的循环覆盖算法
  • POI搜索简介

    2017-02-17 14:30:00
    用户输入——用户输出-----------------------------------------------------------而POI搜索引擎,需要做的就是拿到输入条件,给出用户比较满意的结果。用户角度:输入:尽量简单,且符合心意输入时的假设:假设1...

    用户输入——用户输出
    -----------------------------------------------------------
    而POI搜索引擎,需要做的就是拿到输入条件,给出用户比较满意的结果。

    用户角度:
    输入:尽量简单,且符合心意
    输入时的假设:
    假设1:用户是不知道地点和具体名称的: 
       
    此时用户只需要提供地域范围和类别。
        地域范围:POI搜索引擎也分为:某地点为中心搜索(如当前位置、目的地等)、沿导航线路搜索
        类别:POI搜索引擎可以提供类别选择,供用户选择,作为输入。并且在类别方面,有更细节子类可供筛选,如hotel的星级、价格区间、是否支持信用卡等。

    假设2:用户知道POI的具体名称或其他信息,不知道地点
       
    此时用户需要在假设1的基础上,输入过滤信息,如名称或电话,对搜索结果进行过滤,不应要求精确匹配,一些模糊匹配即可

    输出:
    POI的name、距离列表。每个POI还包含有详细的信息:包括地址、电话、邮编...

     

    一.含义:POI是“Point of Information”的缩写,可以翻译成“信息点”,每个POI包含四方面信息,名称、类别、经度纬度、附近的酒店饭店商铺等信息。我们可以叫它为“导航地图信息”,导航地图数据是整个导航产业的基石。

    POI具体是在地图上任何非地理意义的有意义的点:比如商店,酒吧,加油站,医院,车站等。不属于poi的是有地理意义的坐标:城市,河流,山峰

    二.POI搜索常见功能:

    关键字查询

    输入提示

    周边查询

    可视区域查询

    范围内查询

    道路查询(交叉口)

    自有数据检索(不需要数据库)等

    三.POI特性

    1. POI一般包含哪些信息?
        POI ID和version ID用于标识poi的身份,及更新信息。这些信息在PoiTable中应该是主键信息。

        POI的属性也就是POI的主要特性。分为主要主属性和次要属性。
        a. 主要属性包括:
            地理坐标, 一般是GPS绝对位置坐标
            名称,可以是多语言支持
            地域ID(region id)
            邮编
            电话

        b. 次要属性,用于提供特殊详细信息,细分POI搜索结果,与icon图标关联等。
            
    2. POI的分类
    POI数量巨大,其类型被分为两个级别:
        a. 抽象类别,包含子类,是一个抽象概念
        b. 具体子类,无任何子类,比较具体

    3. POI之间的联系
    两个POI之间可以的联系
        partof:POI是另外一个POI的一部分,如机场内的POI
        access:能进入另外一个POI,如停车场、大门、车库等
        LOGICAL_ACCESS:逻辑上进入另外一个POI的入口,如POI附近,高速路上的出口
        GUIDANCE_POINT:
        ACTIVATION: 如到达一个著名大楼之前,就有一个提示点(如标牌或视频等)。
        PREFERRED: 多个同类的POI中,最优的

    4. 目前车辆与POI的关系,也是POI的重要特性。

    转载于:https://www.cnblogs.com/lyjin/p/6409712.html

    展开全文
  • POI(Point of Interest),中文可以翻译为“兴趣点”。在地理信息系统中,一个POI可以是一栋房子、一个商铺、一个邮筒、一个公交站等。通过本文给大家介绍Android 百度地图POI搜索功能实例代码,需要的朋友参考下
  • 完善程序地图poi搜索

    2014-11-26 09:28:19
    完善腾腾地图POI搜索1、自定义POI点选中图标2、自定义POI点详细信息弹框。详情请查看:http://xiaxveliang.blog.163.com/blog/static/297080342014102510537125/
  • 高德地图的基本使用过程,创建过程,配置过程,定位及附件区域的POI搜索Recyclerview列表展示
  • 百度地图之POI搜索

    千次阅读 2017-11-01 09:26:00
    百度地图Poi搜索

    在实现定位功能的基础上,继续实现搜索功能。

    搜索功能的实现,主要分为两步,分别是获取搜索结果,在地图上显示结果

    先附上XML布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <AutoCompleteTextView
                android:id="@+id/searchkey"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:hint="请输入地点"
                />
            <Button
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="5"
                android:onClick="searchButtonProcess"
                android:text="搜索"/>
        </LinearLayout>
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <com.baidu.mapapi.map.MapView
                android:id="@+id/map"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"/>
        </RelativeLayout>
    </LinearLayout>

    第一步 获取搜索结果

    1.创建POI检索实例

    mPoiSearch = PoiSearch.newInstance();

    2.创建POI检索监听

    OnGetPoiSearchResultListener poiListener = new OnGetPoiSearchResultListener(){  
    
        public void onGetPoiResult(PoiResult result){  
        //获取POI检索结果,并在这里将搜索结果显示在地图上
        }  
    
        public void onGetPoiDetailResult(PoiDetailResult result){  
        //获取Place详情页检索结果  
        }  
    };

    3.设置POI检索监听

    mPoiSearch.setOnGetPoiSearchResultListener(poiListener);

    4.发起检索请求

    String keystr=keyWorldsView.getText().toString();
    mPoiSearch.searchInCity(new PoiCitySearchOption().city("城市的名称").keyword("搜索的关键系").pageNum(0));

    pageNum官方的解释没看明白,设置为设置为非0值就会出现搜不到的情况。

    5.释放POI检索实例

    mPoiSearch.destroy();

    补充:AutoCompleteTextView的使用
    1.添加AutoCompleteTextView控件监听

     keyWorldsView.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
                }
    
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    if(s.length()<=0){
                        return;
                    }
                    /**
                     * 使用建议搜索服务获取建议列表,结果在onGetSuggestionResult中更新
                     */
                    mSuggestionSearch.requestSuggestion(new SuggestionSearchOption()
                            .keyword(s.toString()).city(mCityName));
                    Log.i("搜索关键字",s+"");
                }
    
                @Override
                public void afterTextChanged(Editable s) {
    
                }
            });

    2.创建OnGetSuggestionResultListener()

    OnGetSuggestionResultListener onGetSuggestionResultListener=new OnGetSuggestionResultListener() {
           /**
         * 获取在线建议搜索结果,得到requestSuggestion返回的搜索结果,填充到控件中
         * @param suggestionResult
         */
        @Override
        public void onGetSuggestionResult(SuggestionResult suggestionResult) {
            if(suggestionResult==null||suggestionResult.getAllSuggestions()==null){
                return;
            }
            suggest=new ArrayList<String>();
            for(SuggestionResult.SuggestionInfo info: suggestionResult.getAllSuggestions()){
                if(info.key!=null){
                    suggest.add(info.key);
                }
            }
            sugAdapter=new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_dropdown_item_1line,suggest);
            keyWorldsView.setAdapter(sugAdapter);
            sugAdapter.notifyDataSetChanged();
        }
        };

    第二步 显示搜索结果

    1.先定义OverlayManager基类,用于显示和管理多个Overlay

    package com.demo.map.overlayutil;
    
    import com.baidu.mapapi.map.BaiduMap;
    import com.baidu.mapapi.map.MapStatusUpdateFactory;
    import com.baidu.mapapi.map.Marker;
    import com.baidu.mapapi.map.Overlay;
    import com.baidu.mapapi.map.OverlayOptions;
    import com.baidu.mapapi.map.Polyline;
    import com.baidu.mapapi.model.LatLngBounds;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 该类提供了一个能够显示和管理多个Overlay的基类
     * Created by xiaowen on 2017/10/31.
     */
    
    public abstract class OverlayManager implements BaiduMap.OnMarkerClickListener,BaiduMap.OnPolylineClickListener{
    
        BaiduMap mBaiduMap=null;
        private List<OverlayOptions> mOverlayOptionList=null;
    
        List<Overlay> mOverlayList=null;
    
        /**
         * 通过一个BaiduMap 对象构造
         * @param baiduMap
         */
        public OverlayManager(BaiduMap baiduMap){
            mBaiduMap=baiduMap;
            if(mOverlayOptionList==null){
                mOverlayOptionList=new ArrayList<OverlayOptions>();
            }
            if(mOverlayList==null){
                mOverlayList=new ArrayList<Overlay>();
            }
        }
    
        /**
         * 复写此方法设置要管理的Overlay列表
         * @return 管理的Overlay列表
         */
        public abstract List<OverlayOptions> getOverlayOptions();
    
        /**
         * 将所有Overlay 添加到地图上
         */
        public final void addToMap(){
            if(mBaiduMap==null){
                return;
            }
            removeFromMap();
            List<OverlayOptions> overlayOptions=getOverlayOptions();
            if(overlayOptions!=null){
                mOverlayOptionList.addAll(getOverlayOptions());
            }
            for(OverlayOptions options:mOverlayOptionList){
                mOverlayList.add(mBaiduMap.addOverlay(options));
            }
    
        }
        public final void removeFromMap(){
            if(mBaiduMap==null){
                return;
            }
            for(Overlay marker:mOverlayList){
                marker.remove();
            }
            mOverlayOptionList.clear();
            mOverlayList.clear();
        }
    
        /**
         * 缩放地图,使所有Overlay都在合适的视野内
         */
        public void zoomToSpan(){
            if(mBaiduMap==null){
                return;
            }
            if(mOverlayList.size()>0){
                LatLngBounds.Builder builder=new LatLngBounds.Builder();
                for(Overlay overlay:mOverlayList){
                    //polyline中的点可能太多,只按marker缩放
                    if(overlay instanceof Marker){
                        builder.include(((Marker) overlay).getPosition());
                    }
                }
                mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLngBounds(builder.build()));
    
            }
        }
    }
    

    2.定义一个继承上述类的PoiOverlay,负责获取和管理poi搜索的到的数据

    package com.demo.map.overlayutil;
    
    import android.os.Bundle;
    
    import com.baidu.mapapi.map.BaiduMap;
    import com.baidu.mapapi.map.BitmapDescriptorFactory;
    import com.baidu.mapapi.map.Marker;
    import com.baidu.mapapi.map.MarkerOptions;
    import com.baidu.mapapi.map.OverlayOptions;
    import com.baidu.mapapi.map.Polyline;
    import com.baidu.mapapi.search.poi.PoiResult;
    import com.baidu.mapapi.search.poi.PoiSearch;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 用于显示poi的overly
     * Created by xiaowen on 2017/10/31.
     */
    
    public class PoiOverlay extends OverlayManager{
        private static final int MAX_POI_SIZE=10;
        private PoiResult mPoiResult=null;
        /**
         * 构造函数
         *该 PoiOverlay 引用的 BaiduMap 对象
         * @param baiduMap
         */
        public PoiOverlay(BaiduMap baiduMap) {
            super(baiduMap);
        }
    
        /**
         * 设置POI数据
         * @param poiResult
         */
        public void setData(PoiResult poiResult){
            this.mPoiResult=poiResult;
        }
        @Override
        public List<OverlayOptions> getOverlayOptions() {
            if(mPoiResult==null||mPoiResult.getAllPoi()==null){
                return null;
            }
            List<OverlayOptions> markerList=new ArrayList<OverlayOptions>();
            int markerSize=0;
            for(int i=0;i<mPoiResult.getAllPoi().size()&&markerSize<MAX_POI_SIZE;i++){
                if(mPoiResult.getAllPoi().get(i).location==null){
                    continue;
                }
                markerSize++;
                Bundle bundle=new Bundle();
                bundle.putInt("index",i);
                markerList.add(new MarkerOptions().icon(BitmapDescriptorFactory.fromAssetWithDpi("Icon_mark"
                +markerSize+".png")).extraInfo(bundle).position(mPoiResult.getAllPoi().get(i).location));
            }
            return markerList;
        }
    
        /**
         * 获取该PoiOverlay的poi数据
         * @return
         */
        public PoiResult getPoiResult(){
            return mPoiResult;
        }
    
        /**
         * 覆写此方法以改变默认点击行为
         * @param i
         * @return
         */
        public boolean onPoiClick(int i){
            return false;
        }
    
        @Override
        public boolean onMarkerClick(Marker marker) {
            if(!mOverlayList.contains(marker)){
                return false;
            }
            if(marker.getExtraInfo()!=null){
                return onPoiClick(marker.getExtraInfo().getInt("index"));
            }
            return false;
        }
    
        @Override
        public boolean onPolylineClick(Polyline polyline) {
            return false;
        }
    }

    最后附上Activity代码

    package com.demo.map;
    
    import android.Manifest;
    import android.app.Activity;
    import android.content.pm.PackageManager;
    import android.hardware.Sensor;
    import android.hardware.SensorEvent;
    import android.hardware.SensorEventListener;
    import android.hardware.SensorManager;
    import android.os.Bundle;
    import android.support.v4.app.ActivityCompat;
    import android.support.v4.content.ContextCompat;
    import android.text.Editable;
    import android.text.TextWatcher;
    import android.util.Log;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.AutoCompleteTextView;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    import com.baidu.location.BDLocation;
    import com.baidu.location.BDLocationListener;
    import com.baidu.location.LocationClient;
    import com.baidu.location.LocationClientOption;
    import com.baidu.mapapi.SDKInitializer;
    import com.baidu.mapapi.map.BaiduMap;
    import com.baidu.mapapi.map.BitmapDescriptor;
    import com.baidu.mapapi.map.MapStatus;
    import com.baidu.mapapi.map.MapStatusUpdateFactory;
    import com.baidu.mapapi.map.MapView;
    import com.baidu.mapapi.map.MyLocationConfiguration;
    import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode;
    import com.baidu.mapapi.map.MyLocationData;
    import com.baidu.mapapi.model.LatLng;
    import com.baidu.mapapi.search.core.CityInfo;
    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.PoiDetailSearchOption;
    import com.baidu.mapapi.search.poi.PoiIndoorResult;
    import com.baidu.mapapi.search.poi.PoiResult;
    import com.baidu.mapapi.search.poi.PoiSearch;
    import com.baidu.mapapi.search.sug.OnGetSuggestionResultListener;
    import com.baidu.mapapi.search.sug.SuggestionResult;
    import com.baidu.mapapi.search.sug.SuggestionSearch;
    import com.baidu.mapapi.search.sug.SuggestionSearchOption;
    import com.demo.map.overlayutil.PoiOverlay;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * Created by xiaowen on 2017/10/31.
     */
    
    public class MainActivity extends Activity implements OnGetPoiSearchResultListener,OnGetSuggestionResultListener{
    
    
        //地图相关
        /**
         * 百度地图控件
         */
        MapView mMapView=null;
        /**
         * 百度地图实例
         */
        BaiduMap mBaidumap=null;
    
    
        //定位相关
        /**
         * 定位客户端
         */
        LocationClient mLocClient;
        /**
         * 定位模式
         */
        private LocationMode mCurrentMode;
        /**
         * 定位图标
         */
        BitmapDescriptor mCurrentMarker;
        /**
         * 传感器管理器
         */
        private SensorManager mSensorManager;
        /**
         * 当前方向
         */
        private int mCurrentDirection=0;
        /**
         * 当前经度
         */
        private double mCurrentLat=0.0;
        /**
         * 当前纬度
         */
        private double mCurrentLon=0.0;
        /**
         * 当前经度
         */
        private float mCurrentAccracy;
        /**
         * 是否首次定位
         */
        boolean isFirstLoc=true;
        /**
         * 定位数据
         */
        private MyLocationData locData;
        /**
         * 定位监听
         */
        private MyLocationListener myListener=new MyLocationListener();
        /**
         * 方向监听
         */
        private DirectionSensorListener DirectionListener=new DirectionSensorListener();
        /**
         * 上一次的方向
         */
        private Double lastX=0.0;
        /**
         * 定位所在城市
         */
        private String mCityName;
        //poi搜索相关
        /**
         * Poi检索实例
         */
        private PoiSearch mPoiSearch=null;
        private SuggestionSearch mSuggestionSearch=null;
        private List<String> suggest;
    
        /**
         * 搜索关键字输入窗口
         */
        private AutoCompleteTextView keyWorldsView=null;
        private ArrayAdapter<String> sugAdapter=null;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            SDKInitializer.initialize(getApplicationContext());
            setContentView(R.layout.activity_main);
            mSensorManager= (SensorManager) getSystemService(SENSOR_SERVICE);//获取传感器管理服务
            mCurrentMode= LocationMode.NORMAL;
            //初始化地图
            mMapView= (MapView) findViewById(R.id.map);
            mBaidumap=mMapView.getMap();
            //开启定位图层
            mBaidumap.setMyLocationEnabled(true);
            initLocation();
            initPoiSearch();
    
        }
    
        /**
         * 初始化定位相关
         */
        private void initLocation(){
            mLocClient=new LocationClient(this);
            mLocClient.registerLocationListener(myListener);
            LocationClientOption option=new LocationClientOption();
            option.setOpenGps(true);//打开GPS
            option.setCoorType("bd09ll");//设置坐标类型
            option.setIsNeedAddress(true);//是否需要地址信息
            option.setScanSpan(1000);
            LocationPermission();
            mLocClient.setLocOption(option);
        }
    
        /**
         * poi搜索相关
         */
        private void initPoiSearch(){
            //初始化搜索模块,注册搜索事件监听
            mPoiSearch=PoiSearch.newInstance();
            mPoiSearch.setOnGetPoiSearchResultListener(this);
    
            //初始化建议搜索模块,注册建议搜索事件监听
            mSuggestionSearch=SuggestionSearch.newInstance();
            mSuggestionSearch.setOnGetSuggestionResultListener(this);
    
            keyWorldsView= (AutoCompleteTextView) findViewById(R.id.searchkey);
            sugAdapter=new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line);
            keyWorldsView.setAdapter(sugAdapter);
            keyWorldsView.setThreshold(1);
    
            keyWorldsView.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
                }
    
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    if(s.length()<=0){
                        return;
                    }
                    /**
                     * 使用建议搜索服务获取建议列表,结果在onGetSuggestionResult中更新
                     */
                    mSuggestionSearch.requestSuggestion(new SuggestionSearchOption()
                            .keyword(s.toString()).city(mCityName));
                    Log.i("搜索关键字",s+"");
                }
    
                @Override
                public void afterTextChanged(Editable s) {
    
                }
            });
        }
    
        /**
         * 响应城市内搜索按钮点击事件
         * @param v
         */
        public void searchButtonProcess(View v){
            String keystr=keyWorldsView.getText().toString();
            mPoiSearch.searchInCity(new PoiCitySearchOption().city(mCityName).keyword(keystr).pageNum(0));
        }
    
        /**
         * 获取GPS定位权限(Android6.0 以上需要动态获取权限)
         */
        private void LocationPermission() {
            int checkPermission = ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION);
            if (checkPermission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 1);
                Log.d("未获得定位权限", "弹出提示");
                return;
            }
        }
    
    
    
        /**
         * 方向监听
         */
        public class DirectionSensorListener implements SensorEventListener {
    
            @Override
            public void onSensorChanged(SensorEvent event) {
                double x=event.values[SensorManager.DATA_X];
                if(Math.abs(x-lastX)>1.0){
                    mCurrentDirection= (int) x;
                    //设置定位数据
                    locData=new MyLocationData.Builder()
                            .accuracy(mCurrentAccracy)//精度
                            .direction(mCurrentDirection) //此处设置开发者获取到的方向信息,顺时针0-360
                            .latitude(mCurrentLat)//经度
                            .longitude(mCurrentLon)//纬度
                            .build();
                    mBaidumap.setMyLocationData(locData);
                }
                lastX=x;
            }
    
            @Override
            public void onAccuracyChanged(Sensor sensor, int accuracy) {
    
            }
        }
    
    
        /**
         * 定位监听
         */
        public class MyLocationListener implements BDLocationListener {
    
            @Override
            public void onReceiveLocation(BDLocation bdLocation) {
                //map view销毁后不在处理新接受的位置
                if(bdLocation==null||mMapView==null)
                {
                    return;
                }
                mCurrentLat=bdLocation.getLatitude();
                mCurrentLon=bdLocation.getLongitude();
                mCurrentAccracy=bdLocation.getRadius();
                mCityName=bdLocation.getCity();
                //设置定位数据
                locData=new MyLocationData.Builder()
                        .accuracy(bdLocation.getRadius())//精度
                        .direction(mCurrentDirection) //此处设置开发者获取到的方向信息,顺时针0-360
                        .latitude(bdLocation.getLatitude())//经度
                        .longitude(bdLocation.getLongitude())//纬度
                        .build();
                mBaidumap.setMyLocationData(locData);
                //第一次定位时,将地图位置移动到当前位置
                if(isFirstLoc){
                    isFirstLoc=false;
                    LatLng ll=new LatLng(bdLocation.getLatitude(),bdLocation.getLongitude());
                    MapStatus.Builder builder=new MapStatus.Builder();
                    builder.target(ll).zoom(18.0f);
                    mBaidumap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
                    mCurrentMarker = null;
                    mBaidumap
                            .setMyLocationConfiguration(new MyLocationConfiguration(
                                    mCurrentMode, true, null));
                }
            }
        }
    
        //生命周期
    
        @Override
        protected void onStart() {
            //为系统的方向传感器注册监听器
            mSensorManager.registerListener(DirectionListener,mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION)
                    ,SensorManager.SENSOR_DELAY_UI);
            //启动监听
            mLocClient.start();
            super.onStart();
    
        }
    
        @Override
        protected void onPause() {
            mMapView.onPause();
            super.onPause();
        }
    
        @Override
        protected void onResume() {
            mMapView.onResume();
            super.onResume();
        }
    
        @Override
        protected void onStop() {
            //取消传感器监听
            mSensorManager.unregisterListener(DirectionListener);
            super.onStop();
        }
    
        @Override
        protected void onDestroy() {
            //退出时销毁定位
            mLocClient.stop();
            //关闭定位图层
            mBaidumap.setMyLocationEnabled(false);
            mMapView.onDestroy();
            mMapView=null;
            mPoiSearch.destroy();
            mSuggestionSearch.destroy();
            super.onDestroy();
        }
    
        private class MyPoiOverlay extends PoiOverlay{
            public MyPoiOverlay(BaiduMap baiduMap) {
                super(baiduMap);
            }
    
            @Override
            public boolean onPoiClick(int i) {
                super.onPoiClick(i);
                PoiInfo poi=getPoiResult().getAllPoi().get(i);
                mPoiSearch.searchPoiDetail(new PoiDetailSearchOption().poiUid(poi.uid));
                return true;
            }
        }
        /**
         * 获取POI搜索结果
         * @param poiResult
         */
        @Override
        public void onGetPoiResult(PoiResult poiResult) {
            if(poiResult==null||poiResult.error== SearchResult.ERRORNO.RESULT_NOT_FOUND){
                Toast.makeText(MainActivity.this,"未找到结果",Toast.LENGTH_LONG).show();
                return;
            }
            if(poiResult.error==SearchResult.ERRORNO.NO_ERROR){
                mBaidumap.clear();
                PoiOverlay overlay=new MyPoiOverlay(mBaidumap);
                mBaidumap.setOnMarkerClickListener(overlay);
                overlay.setData(poiResult);
                overlay.addToMap();
                overlay.zoomToSpan();
            }
            if(poiResult.error==SearchResult.ERRORNO.AMBIGUOUS_KEYWORD){
                //当输入关键字在本市没有找到,但是在其他城市找到时,返回包含该关键字信息的城市列表
                 String strInfo="在";
                for(CityInfo cityInfo:poiResult.getSuggestCityList()){
                    strInfo+=cityInfo.city;
                    strInfo+=",";
                }
                strInfo+="找到结果";
                Toast.makeText(MainActivity.this, strInfo,Toast.LENGTH_LONG).show();
            }
        }
    
        /**
         * 获取POI详情搜索结果,得到searchPoiDetail返回的搜索结果
         * @param poiDetailResult
         */
        @Override
        public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {
            if(poiDetailResult.error!=SearchResult.ERRORNO.NO_ERROR){
                Toast.makeText(MainActivity.this,"抱歉,未找到结果",Toast.LENGTH_SHORT).show();
            }else {
                Toast.makeText(MainActivity.this,poiDetailResult.getName()+":"+poiDetailResult.getAddress(),Toast.LENGTH_LONG).show();
            }
        }
    
        @Override
        public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {
    
        }
    
        /**
         * 获取在线建议搜索结果,得到requestSuggestion返回的搜索结果,填充到控件中
         * @param suggestionResult
         */
        @Override
        public void onGetSuggestionResult(SuggestionResult suggestionResult) {
            if(suggestionResult==null||suggestionResult.getAllSuggestions()==null){
                return;
            }
            suggest=new ArrayList<String>();
            for(SuggestionResult.SuggestionInfo info: suggestionResult.getAllSuggestions()){
                if(info.key!=null){
                    suggest.add(info.key);
                }
            }
            sugAdapter=new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_dropdown_item_1line,suggest);
            keyWorldsView.setAdapter(sugAdapter);
            sugAdapter.notifyDataSetChanged();
        }
    }

    源码下载:百度地图Poi搜索
    重新申请一下密钥应该就可以运行了

    展开全文
  • 百度地图Poi搜索(Android studio),有兴趣的可以下载看看。
  • 自己参考高德地图API文档做的POI搜索地点的例子,显示锚点和锚点位置信息,且锚点显示的位置信息可以随着锚点在地图上位置的变化而变化
  • 百度地图——poi搜索

    2019-03-13 14:14:37
    定义 POI(Point of Interest),中文可以翻译为“兴趣点”。在地理信息系统中,一个POI可以是一栋房子、一...城市内POI搜索 百度地图SDK搜索主要通过初始化MKSearch类,同时监听对象MKSearchListener类来实现搜索服...
  • 百度地图地位poi搜索导航可以参考集成到自己项目中
  • 主要介绍了android 高德地图之poi搜索功能的实现代码,在实现此功能时遇到很多问题,在文章都给大家提到,需要的朋友可以参考下
  • 基于百度地图API -- 周边POI搜索
  • 自己参考高德地图API文档做的POI搜索地点的例子,显示锚点和锚点位置信息,且锚点显示的位置信息可以随着锚点在地图上位置的变化而变化,这一版和上一版基本一致,没办法免费了,所以设置1分,有需要我账号中任意...
  • poi搜索demo

    2018-07-27 11:06:53
    基于es的搜索demo,es版本5.6.10,基于transportclient api
  • POI(Point of Interest),即“兴趣点”。在地理信息系统中,一个POI可以是一栋房子、一个景点、一个邮筒或者一个公交站等。... 讲解 POI 城市内检索、周边检索和区域检索(即矩形区域检索),以及推荐搜索
  • 实现了poi搜索和定位的结合 解决了结合时出现的“定位圈消失”问题
  • 高德地图-搜索服务-POI搜索 之前公司项目收货地址仿饿了么的收货地址,结果发现自己实现的关键字搜索和周边搜索,搜索到的poi列表跟饿了么的并不完全一样,后来考虑了下,应该是搜索的范围、类型之类的设置的不...
  • Android学习笔记之百度地图(POI搜索之城市poi检索poiSearchInCity)
  • POI搜索有三种方式。依据范围和检索词发起范围检索poiSearchInbounds。城市poi检索poiSearchInCity,周边检索poiSearchNearBy。 下以周边检索为例介绍怎样进行检索并显示覆盖物PoiOverlay: public ...
  • 地图poi搜索

    2016-12-03 16:02:55
    高德地图搜索SDK实现位置的搜索
  • 高德地图,百度地图,腾讯地图的显示,定位,poi搜索结果以tableView展示,集成webService中poi的接口
  • 高德定位及poi搜索.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 腾讯地图 周边 poi 搜索及参数配置 https://lbs.qq.com/mobile/androidMapSDK/developerGuide/suggestionInput TencentSearch.suggestion(SuggestionParam object, HttpResponseListener listener) 1–regionFix...
  • POI搜索类型共分为以下20种: 汽车服务|汽车销售|汽车维修|摩托车服务|餐饮服务|购物服务|生活服务|体育休闲服务| 医疗保健服务|住宿服务|风景名胜|商务住宅|政府机构及社会团体|科教文化服务| 交通设施服务|金融...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,518
精华内容 607
关键字:

poi搜索