百度地图POI周边检索/自定义覆盖物
来源:互联网 发布:淘宝 管控 临时下架 编辑:程序博客网 时间:2024/05/14 08:07
鉴于百度地图不计其数的poi兴趣点 很多app在开发的时候都会选择调用百度地图资源
//主界面Activitypackage com.zhuang.search;import java.util.ArrayList;import java.util.List;import com.baidu.mapapi.map.BaiduMap;import com.baidu.mapapi.map.BitmapDescriptor;import com.baidu.mapapi.map.BitmapDescriptorFactory;import com.baidu.mapapi.map.MapView;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.model.LatLng;import com.baidu.mapapi.overlayutil.OverlayManager;import com.baidu.mapapi.search.core.CityInfo;import com.baidu.mapapi.search.core.PoiInfo;import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;import com.baidu.mapapi.search.poi.PoiDetailResult;import com.baidu.mapapi.search.poi.PoiDetailSearchOption;import com.baidu.mapapi.search.poi.PoiNearbySearchOption;import com.baidu.mapapi.search.poi.PoiResult;import com.baidu.mapapi.search.poi.PoiSearch;import com.baidu.mapapi.search.core.SearchResult;import android.os.Bundle;import android.widget.Toast;import android.app.Activity;public class MainActivity extends Activity implements OnGetPoiSearchResultListener{/** * POI周边检索 */private PoiSearch Mpoisearch;private MapView mapView;private BaiduMap Mmap;private double latitude,longitude; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); //开始poi检索 //参数 keyword("关键字").radius(半径).location(new LatLng(坐标))) Mpoisearch.searchNearby(new PoiNearbySearchOption().keyword("养生").radius(5000).location(new LatLng(latitude,longitude))); } private void initView() { mapView = (MapView) findViewById(R.id.bmapView); Mmap = mapView.getMap(); latitude = Double.parseDouble(SPUtils.getString(MainActivity.this, "latitude","")); longitude = Double.parseDouble(SPUtils.getString(MainActivity.this, "longitude","")); //获取poi检索实例 Mpoisearch = PoiSearch.newInstance(); //实现检索监听 Mpoisearch.setOnGetPoiSearchResultListener(this); } /********************* POI检索结果的方法 ***********************/ public void onGetPoiResult(PoiResult result) { if (result == null|| result.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) { Toast.makeText(MainActivity.this, "未找到结果", Toast.LENGTH_LONG).show(); return; } if (result.error == SearchResult.ERRORNO.NO_ERROR) { //清除数据 Mmap.clear(); //添加poi覆盖物 并添加覆盖物的监听事件 MyPoiOverlay overlay = new MyPoiOverlay(Mmap); Mmap.setOnMarkerClickListener(overlay); overlay.setResult(result); overlay.addToMap(); overlay.zoomToSpan(); return; } if (result.error == SearchResult.ERRORNO.AMBIGUOUS_KEYWORD) { // 当输入关键字在本市没有找到,但在其他城市找到时,返回包含该关键字信息的城市列表 String strInfo = "在"; for (CityInfo cityInfo : result.getSuggestCityList()) { strInfo += cityInfo.city; strInfo += ","; } strInfo += "找到结果"; Toast.makeText(MainActivity.this, strInfo, Toast.LENGTH_LONG).show(); } } public void onGetPoiDetailResult(PoiDetailResult result) { if (result.error != SearchResult.ERRORNO.NO_ERROR) { Toast.makeText(MainActivity.this, "抱歉,未找到结果", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, result.getName() + ":" + result.getAddress(), Toast.LENGTH_SHORT).show(); } } //自定义poi检索覆盖物 private class MyPoiOverlay extends OverlayManager { private PoiResult result; private boolean flag = false; public void setResult(PoiResult result) { this.result = result; } public MyPoiOverlay(BaiduMap baiduMap) { super(baiduMap); } @Override public boolean onMarkerClick(Marker marker) { onClick(marker.getZIndex()); return true; } public boolean onClick(int index) { PoiInfo poi = result.getAllPoi().get(index); //if(poi.hasCaterDetails){ Mpoisearch.searchPoiDetail((new PoiDetailSearchOption()).poiUid(poi.uid)); // } return true; } @Override public boolean onPolylineClick(Polyline arg0) { return false; } @Override public List<OverlayOptions> getOverlayOptions() { List<OverlayOptions> ops = new ArrayList<OverlayOptions>(); List<PoiInfo> pois = result.getAllPoi(); OverlayOptions op = null; BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_green); BitmapDescriptor bitmap2 = BitmapDescriptorFactory.fromResource(R.drawable.icon_red); for (int i = 0; i < pois.size(); i++) { if(flag){ op = new MarkerOptions().position(pois.get(i).location).icon(bitmap); } else{ op = new MarkerOptions().position(pois.get(i).location).icon(bitmap2); } ops.add(op); Mmap.addOverlay(op).setZIndex(i); } return ops; } } @Override protected void onPause() { mapView.onPause(); super.onPause(); } @Override protected void onResume() { mapView.onResume(); super.onResume(); } @Override protected void onDestroy() { MyApp app = (MyApp) getApplication(); app.mLocClient.stop(); mapView.onDestroy(); mapView = null; super.onDestroy(); }}//Applicationpackage com.zhuang.search;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;import com.baidu.location.LocationClientOption.LocationMode;import com.baidu.mapapi.SDKInitializer;import android.app.Application;public class MyApp extends Application { public LocationClient mLocClient; @Override public void onCreate() { super.onCreate(); //初始化百度地图 SDKInitializer.initialize(getApplicationContext()); // 开始定位 // 创建定位客户端 mLocClient = new LocationClient(getApplicationContext()); // 注册定位的监听,获取定位的结果 mLocClient.registerLocationListener(new BDLocationListener() { // 获取定位结果 @Override public void onReceiveLocation(BDLocation location) { //将定位的经纬度存入SharedPreferences // 纬度 SPUtils.putString(getApplicationContext(), "latitude", String.valueOf(location.getLatitude())); // 经度 SPUtils.putString(getApplicationContext(), "longitude", String.valueOf(location.getLongitude())); } }); // 对客户端进行各种配置 // 创建定位客户端的选项 LocationClientOption options = new LocationClientOption(); options.setLocationMode(LocationMode.Hight_Accuracy);// 设置定位模式 options.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02 options.setScanSpan(5000);// 设置发起定位请求的间隔时间为5000ms options.setIsNeedAddress(true);// 返回的定位结果包含地址信息 options.setNeedDeviceDirect(true);// 返回的定位结果包含手机机头的方向 mLocClient.setLocOption(options); // 开始定位 mLocClient.start(); }}//sp工具类package com.zhuang.search;import android.content.Context;import android.content.SharedPreferences;public class SPUtils { private static SharedPreferences sharedPreferences; // 存double(上下文,key,value) public static void putString(Context context, String key, String value) { if (sharedPreferences == null) { sharedPreferences = context.getSharedPreferences("config",Context.MODE_PRIVATE); } sharedPreferences.edit().putString(key, value).commit(); } // 取 public static String getString(Context context, String key, String defValue) { if (sharedPreferences == null) { sharedPreferences = context.getSharedPreferences("config",Context.MODE_PRIVATE); } return sharedPreferences.getString(key, defValue); }}
0 0
- 百度地图POI周边检索/自定义覆盖物
- 新版百度地图POI检索以及POI覆盖物
- Android POI 百度地图——周边检索
- 百度地图POI检索
- Android学习笔记之百度地图(POI搜索之周边检索poiSearchNearBy)
- 百度地图POI+覆盖物+导航 实现
- 百度地图自定义覆盖物
- 百度地图自定义覆盖物
- 百度地图自定义覆盖物
- 百度地图POI检索实例
- 百度地图Android POI检索
- 百度地图周边检索功能的一些设置及自定义marker点
- android百度地图自定义覆盖物
- 基于百度地图,绘制自定义覆盖物
- 百度地图自定义覆盖物替换
- 百度地图API-自定义图标覆盖物
- Android百度地图——搜索服务之周边检索
- 百度地图-实现POI的搜索(搜索周边)
- Window ferformance toolkit 学习
- Android 4.4.2 - java.lang.RuntimeException: Performing stop of activity that is not resumed
- iOS 数字保留两位小数
- 网络编程部分案例总结
- debian安装rz sz
- 百度地图POI周边检索/自定义覆盖物
- RSA DES SHA1加密总结
- oracle ASM 初装
- mysql 一些用法 总结
- yum安装mysql5.7
- Android(Lollipop/5.0) Material Design(七) 自定义动画
- 测试用例方法
- 用volley从网页获取json数据
- 关于Android打造一款适用所有view的刷新和加载