高德地图搜索附近的实现
来源:互联网 发布:电子信息工程学软件 编辑:程序博客网 时间:2024/04/30 12:35
最近项目中有用到搜索附近4S店和加油站的功能,于是我写了个Demo,输入你想查找的内容,就可以显示相关的信息.效果如下:
PS:listview中有两个纬度,后一个应该是经度的,不小心写错了名称。
这里使用的是高德地图,先需要去高德SDK网站申请一个key,下载相应的SDK导入工程,需要地图SDK和定位SDK,网站在此,然后配置AndroidManifest文件。
配置对应权限:
<!-- 地图包、搜索包需要的基础权限 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 定位包、导航包需要的额外权限(注:基础权限也需要) --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />配置key
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <meta-data android:name="com.amap.api.v2.apikey" android:value="0f9baee65aefab8f09065d4e60942305" /> <!--输入你申请的key -->配置定位的服务
<service android:name="com.amap.api.location.APSService" >现在编写代码了。先实现定位,获取手机的经纬度,先创建一个AMapLocationClient 对象, 然后设置定位回调监听,需要创建一个mLocationListener对象
// 声明定位回调监听器public AMapLocationListener mLocationListener = new AMapLocationListener() {@Overridepublic void onLocationChanged(AMapLocation amapLocation) {if (amapLocation != null) { if (amapLocation.getErrorCode() == 0) { //定位成功回调信息,设置相关消息 Latitude=amapLocation.getLatitude();//获取纬度 Longitude=amapLocation.getLongitude();//获取经度 } else { //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。 Log.e("AmapError","location Error, ErrCode:" + amapLocation.getErrorCode() + ", errInfo:" + amapLocation.getErrorInfo()); } }}};再获取定位参数配置AMapLocationClientOption的实例,进行一些参数的配置,比如定位模式,间隔等。
<pre name="code" class="java"> // 初始化定位参数mLocationOption = new AMapLocationClientOption();// 设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy);// 设置是否返回地址信息(默认返回地址信息)mLocationOption.setNeedAddress(true);// 设置是否只定位一次,默认为falsemLocationOption.setOnceLocation(false);// 设置是否强制刷新WIFI,默认为强制刷新mLocationOption.setWifiActiveScan(true);// 设置是否允许模拟位置,默认为false,不允许模拟位置mLocationOption.setMockEnable(false);// 设置定位间隔,单位毫秒,默认为2000msmLocationOption.setInterval(2000);给客户端对象设置参数,开始监听
// 给定位客户端对象设置定位参数mLocationClient.setLocationOption(mLocationOption);// 启动定位mLocationClient.startLocation();在mLocationListener的回调监听里可以获得经纬度,下一步就是搜索附近的实现了,PS: 别忘了在onDestory方法里关闭定位.
先通过new PoiSearch.Query(keyword, type,cityCode )创建一个Query对象。 传入三个参数,keyword是你要查找的内容,type是要查找的类型,默认为:生活服务、餐饮服务、商务住宅,共有20种,cityCode是城市编号,可以传空值,空值表示在全国范围里查找。获取Query对象后,可以设置返回多少条结果,查第几页。传入context和Query对象获得PoiSearch对象,通过setBound方法设置中心点和查找区域,中心点则是之前获取的定位的经纬度。
之后设置回调监听器,然后调用searchPOIAsyn()方法开始搜索。
query = new PoiSearch.Query(content, "汽车维修|修车服务", "");// keyWord表示搜索字符串,第二个参数表示POI搜索类型,默认为:生活服务、餐饮服务、商务住宅// 共分为以下20种:汽车服务|汽车销售|// 汽车维修|摩托车服务|餐饮服务|购物服务|生活服务|体育休闲服务|医疗保健服务|// 住宿服务|风景名胜|商务住宅|政府机构及社会团体|科教文化服务|交通设施服务|// 金融保险服务|公司企业|道路附属设施|地名地址信息|公共设施// cityCode表示POI搜索区域,(这里可以传空字符串,空字符串代表全国在全国范围内进行搜索)query.setPageSize(10);// 设置每页最多返回多少条poiitemquery.setPageNum(1);// 设置查第一页PoiSearch poiSearch = new PoiSearch(this, query);//如果不为空值if(Latitude!=0.0&&Longitude!=0.0){poiSearch.setBound(new SearchBound(new LatLonPoint(Latitude,Longitude), 6000));// 设置周边搜索的中心点以及区域poiSearch.setOnPoiSearchListener(this);// 设置数据返回的监听器poiSearch.searchPOIAsyn();// 开始搜索}else{Toast.makeText(MainActivity.this, "定位失败", 0).show();}
返回的结果在onPoiSearched方法里,就是参数PoiResult,这里我用listview展示了结果。result.getPois()返回类型为Poiltem的Arraylist集合,Poiltem有许多属性,例如通过getTel()获取电话,getDistance()获取距离,getLatLonPoint获取纬度等。
@Overridepublic void onPoiSearched(PoiResult result, int code) { MyAdapter mAdapter=new MyAdapter(MainActivity.this,result.getPois()); result_listview.setAdapter(mAdapter); }
就这样完成了附近搜索功能,大家可以自己尝试下。
Demo地址:点击打开链接
- 高德地图搜索附近的实现
- 高德地图POI搜索,附近地图搜索,类似附近的人搜索
- 高德地图POI搜索,附近地图搜索,类似附近的人搜索
- unity3d,android平台下,高德地图搜索附近
- 百度地图搜索附近的地方ipa接口
- 模仿高德地图搜索控件
- andriod 高德地图搜索的marker显示中心的数字
- 高德地图搜索以后生成的marker的点击事件
- 仿滴滴打车的平滑移动附近车辆效果实现全流程,基于高德地图
- Android实现高仿QQ附近的人搜索展示
- 利用高德云图开发附近的人功能
- 基于SVG的WebGIS地图搜索研究与实现
- 基于SVG的WebGIS地图搜索研究与实现
- “附近的人”功能实现
- 附近的人,实现思路
- 有趣的google地图搜索
- 高德地图定位和附近功能
- 利用高德地图关键字检索POI-实现仿微信发朋友圈搜索附近位置
- Android-自定义PopupWindow
- C关键字Register
- 基于GDAL的栅格数据/遥感影像IO (非分块)
- Java中StringTokenizer用法
- 算法和数据结构学习(一)基于数组的栈的实现
- 高德地图搜索附近的实现
- 模拟登陆新浪微博【直接填入Cookie】(转)
- 数据库基础操作
- Servlet生命周期,Servlet3.0使用注解自动加载
- 什么时候要用虚析构函数?
- Java数组里装数组,将map对象生成JSON
- 分布式架构2.0发布 企业级分布式架构
- 1016 Red and Black
- Java 回调机制(Callback)