高德定位+poi搜索
2017-01-16 15:58
239 查看
先贴张图
![](https://img-blog.csdn.net/20170117174854077?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzUzNjY5MDg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
不忙的时候自己研究了下可以实现上诉图片功能展示的实现。通过功能来分析,实现上述功能首先获取当前位置信息,这是先进行定位操做mLocationClient.startLocation();定位成功后调用onLocationChanged(AMapLocation amapLocation)方法,通过ampLocation实例可以获取当前定位点的信息,如地理 位置信息经纬度等。
再根据获取的当前位置经纬度进行poi查询。通过对PoiSearch.Query 对象的设置可以自定义查询关键字“keyword”,查询类型、查询地点范围、查询结果每页多少条数据等条件。
我是在高德的demo基础上更改的哦,我自己还是挺喜欢高德的demo的,写很精简哦!
不忙的时候自己研究了下可以实现上诉图片功能展示的实现。通过功能来分析,实现上述功能首先获取当前位置信息,这是先进行定位操做mLocationClient.startLocation();定位成功后调用onLocationChanged(AMapLocation amapLocation)方法,通过ampLocation实例可以获取当前定位点的信息,如地理 位置信息经纬度等。
再根据获取的当前位置经纬度进行poi查询。通过对PoiSearch.Query 对象的设置可以自定义查询关键字“keyword”,查询类型、查询地点范围、查询结果每页多少条数据等条件。
package com.amap.map2d.demo.location; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.Window; import android.widget.ListView; import android.widget.RadioGroup; import android.widget.TextView; import com.amap.api.location.AMapLocation; import com.amap.api.location.AMapLocationClient; import com.amap.api.location.AMapLocationClientOption; import com.amap.api.location.AMapLocationListener; import com.amap.api.maps2d.AMap; import com.amap.api.maps2d.CameraUpdateFactory; import com.amap.api.maps2d.LocationSource; import com.amap.api.maps2d.MapView; import com.amap.api.maps2d.model.BitmapDescriptorFactory; import com.amap.api.maps2d.model.MyLocationStyle; 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.poisearch.PoiResult; import com.amap.api.services.poisearch.PoiSearch; import com.amap.map2d.demo.R; import com.amap.map2d.demo.adapter.CustomLocationAdapter; import java.util.ArrayList; import java.util.List; /** * AMapV2地图中介绍自定义定位小蓝点+搜索周边商务住宅 */ public class CustomLocationActivity extends Activity implements LocationSource, AMapLocationListener { private AMap aMap; private MapView mapView; private OnLocationChangedListener mListener; private AMapLocationClient mlocationClient; private AMapLocationClientOption mLocationOption; private RadioGroup mGPSModeGroup; private TextView mLocationErrText; private static final int STROKE_COLOR = Color.argb(180, 3, 145, 255); private static final int FILL_COLOR = Color.argb(10, 0, 0, 180); private ListView lv_listaddress; private CustomLocationAdapter madapter; private List list; private PoiSearch.Query query; private int currentPage = 0; private LatLonPoint lp;//当前位置 private PoiSearch poiSearch; @Override protected void onCreate(Bundle savedInstanceState) { Log.e("onCreate", "onCreate++++++"); super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE);// 不显示程序的标题栏 setContentView(R.layout.locationsource_activity); mapView = (MapView) findViewById(R.id.map); mapView.onCreate(savedInstanceState);// 此方法必须重写 init(); initlv(); } private void initlv() { list = new ArrayList<>(); lv_listaddress = (ListView) findViewById(R.id.lv_listaddress); } /** * 初始化 */ private void init() { Log.e("init", "init++++++"); if (aMap == null) { aMap = mapView.getMap(); setUpMap(); } mLocationErrText = (TextView) findViewById(R.id.location_errInfo_text); mLocationErrText.setVisibility(View.GONE); } /** * 设置一些amap的属性 */ private void setUpMap() { Log.e("setUpMap", "setUpMap++++++"); aMap.setLocationSource(this);// 设置定位监听 aMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示 aMap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false setupLocationStyle(); } private void setupLocationStyle() { Log.e("setupLocationStyle", "setupLocationStyle++++++"); // 自定义系统定位蓝点 MyLocationStyle myLocationStyle = new MyLocationStyle(); // 自定义定位蓝点图标 myLocationStyle.myLocationIcon(BitmapDescriptorFactory. fromResource(R.drawable.gps_point)); // 自定义精度范围的圆形边框颜色 myLocationStyle.strokeColor(STROKE_COLOR); //自定义精度范围的圆形边框宽度 myLocationStyle.strokeWidth(5); // 设置圆形的填充颜色 myLocationStyle.radiusFillColor(FILL_COLOR); // 将自定义的 myLocationStyle 对象添加到地图上 aMap.setMyLocationStyle(myLocationStyle); } /** * 方法必须重写 */ @Override protected void onResume() { Log.e("onResume", "onResume++++++"); super.onResume(); mapView.onResume(); } /** * 方法必须重写 */ @Override protected void onPause() { Log.e("onPause", "onPause++++++"); super.onPause(); mapView.onPause(); deactivate(); } /** * 方法必须重写 */ @Override protected void onSaveInstanceState(Bundle outState) { Log.e("onSaveInstanceState", "onSaveInstanceState++++++"); super.onSaveInstanceState(outState); mapView.onSaveInstanceState(outState); } /** * 方法必须重写 */ @Override protected void onDestroy() { Log.e("onDestroy", "onDestroy++++++"); super.onDestroy(); mapView.onDestroy(); if (null != mlocationClient) { mlocationClient.onDestroy(); } } /** * 定位成功后回调函数 */ @Override public void onLocationChanged(AMapLocation amapLocation) { Log.e("onLocationChanged", "onLocationChanged++++++"); if (mListener != null && amapLocation != null) { if (amapLocation != null && amapLocation.getErrorCode() == 0) { mLocationErrText.setVisibility(View.GONE); mListener.onLocationChanged(amapLocation);// 显示系统小蓝点 Log.e("current+address", amapLocation.getAddress()); Log.e("current+address", amapLocation.getPoiName()); //自定义小蓝点外部圆的范围 aMap.moveCamera(CameraUpdateFactory.zoomTo(30)); queryPoi(amapLocation); // aMap.moveCamera(CameraUpdateFactory.zoomTo(18)); Log.e("经纬度", "经度" + amapLocation.getLatitude() + "纬度=====" + amapLocation.getLongitude()); } else { String errText = "定位失败," + amapLocation.getErrorCode() + ": " + amapLocation.getErrorInfo(); Log.e("AmapErr", errText); mLocationErrText.setVisibility(View.VISIBLE); mLocationErrText.setText(errText); } } } /** * 查询附近地址 */ private void queryPoi(AMapLocation amapLocation) { String keyword = ""; query = new PoiSearch.Query(keyword, "商务住宅", amapLocation.getProvince());// 第一个参数表示搜索字符串,第二个参数表示poi搜索类型,第三个参数表示poi搜索区域(空字符串代表全国) query.setPageSize(100);// 设置每页最多返回多少条poiitem query.setPageNum(currentPage);// 设置查第一页 lp = new LatLonPoint(amapLocation.getLatitude(), amapLocation.getLongitude()); if (lp != null) { poiSearch = new PoiSearch(this, query); poiSearch.setOnPoiSearchListener(new PoiSearch.OnPoiSearchListener() { @Override public void onPoiSearched(PoiResult poiResult, int i) { if (i == AMapException.CODE_AMAP_SUCCESS) { if (poiResult != null && poiResult.getQuery() != null) {// 搜索poi的结果 if (poiResult.getQuery().equals(query)) {// 是否是同一条 list = poiResult.getPois(); if (list != null && list.size() > 0) { if (madapter == null) { madapter = new CustomLocationAdapter(CustomLocationActivity.this, list); lv_listaddress.setAdapter(madapter); } madapter.notifyDataSetChanged(); } } } } else { Log.e("error", "失败"); } } @Override public void onPoiItemSearched(PoiItem poiItem, int i) { } }); poiSearch.setBound(new PoiSearch.SearchBound(lp, 3000, true));// // 设置搜索区域为以lp点为圆心,其周围3000米范围 poiSearch.searchPOIAsyn();// 异步搜索 } } /** * 激活定位 */ @Override public void activate(OnLocationChangedListener listener) { Log.e("activate", "activate++++++"); mListener = listener; if (mlocationClient == null) { mlocationClient = new AMapLocationClient(this); mLocationOption = new AMapLocationClientOption(); //设置定位监听 mlocationClient.setLocationListener(this); //设置定位模式为高精度模式,Battery_Saving 为低功耗模式,Device_Sensors是仅设备模式 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); //设置是否犯规地址信息)默认返回) mLocationOption.setNeedAddress(true); //设置是否只定位一次 mLocationOption.setOnceLocation(true); if (mLocationOption.isOnceLocationLatest()) { //设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。 //如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会。 mLocationOption.setOnceLocationLatest(true); } //设置是否强制刷新wify,默认为强制 mLocationOption.setWifiActiveScan(true); //设置是否允许模拟位置 ,默认为FALSE不允许 mLocationOption.setMockEnable(false); //设置定位间隔 单位毫秒,默认为2000ms mLocationOption.setInterval(2000); //给定位客户端设置参数 mlocationClient.setLocationOption(mLocationOption); // 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗, // 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求 // 在定位结束后,在合适的生命周期调用onDestroy()方法 // 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除 mlocationClient.startLocation(); } } /** * 停止定位 */ @Override public void deactivate() { Log.e("deactivate", "deactivate++++++"); mListener = null; if (mlocationClient != null) { mlocationClient.stopLocation(); mlocationClient.onDestroy(); } mlocationClient = null; } }
我是在高德的demo基础上更改的哦,我自己还是挺喜欢高德的demo的,写很精简哦!
相关文章推荐
- 高德地图定位+搜索自动提示+poi搜索+移动地图选址
- 高德地图定位 poi搜索 移动地图选址显示周边
- 百度地图最新版本sdk使用系列(七)-实现定位,poi搜索和导航
- 高德地图输入提示,POI搜索并显示经纬度
- 高德js_API开发O2O项目客户端地图定位周边检索 定位选址 POI搜索选址 多边形范围指定城市 不再范围不可服务
- android 高德地图之poi搜索功能的实现
- 百度地图API 之 定位周边搜索POI(奉上源代码)+ GoogleMap 详细
- android POI搜索,附近搜索,周边搜索定位介绍
- 微信小程序:高德地图搜索周边poi接口实践
- 高仿百度外卖地址添加功能(百度地图拖动定位,poi搜索,设置配送范围)
- 高德地图---显示/定位/POI搜索/大头针/气泡
- 高德地图之周边搜索及两点间距离计算(Poi的使用)
- 微信小程序---地图使用(定位/展示/周边信息展示/poi搜索)
- 高德地图---显示/定位/POI搜索/大头针/气泡
- binbinyang-----百度地图拖动定位,显示附近地址poi提示搜索
- Android百度地图API 之 定位周边搜索POI
- 仿百度外卖3_7_1百度地图拖动定位,显示附近地址poi提示搜索
- 百度地图的定位和poi搜索
- [android] 百度地图开发 (二).定位城市位置和城市POI搜索
- windowphone 高德地图之搜索定位地点的周边热点