package com.xzjmyk.pm.activity.util; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.mapapi.map.BitmapDescriptor; import com.baidu.mapapi.map.BitmapDescriptorFactory; import com.baidu.mapapi.map.MapStatus; import com.baidu.mapapi.map.MapStatusUpdate; import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.MarkerOptions; import com.baidu.mapapi.map.OverlayOptions; import com.baidu.mapapi.model.LatLng; import com.baidu.mapapi.search.core.SearchResult; import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener; import com.baidu.mapapi.search.poi.PoiDetailResult; import com.baidu.mapapi.search.poi.PoiIndoorResult; 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.poi.PoiSortType; import com.baidu.mapapi.utils.DistanceUtil; import com.xzjmyk.pm.activity.R; import java.text.DecimalFormat; /** * 百度地图工具类(重复代码过多,放在工具类中) * Created by gongpm on 2016/7/15. */ public class BaiduMapUtil implements OnGetPoiSearchResultListener { private static BaiduMapUtil instence = null; private Handler handler; private PoiNearbySearchOption option; public static int NEAR_WHAT = 0x22; private int what = -1; private BaiduMapUtil() { } public static BaiduMapUtil getInstence() { if (instence == null) { synchronized (BaiduMapUtil.class) { instence = new BaiduMapUtil(); } } return instence; } public void setMapViewPoint(MapView mapView, LatLng point) { setMapViewPoint(mapView, point, false); } //计算距离 public String getDistance(LatLng a, LatLng b) { double distance = Math.abs(DistanceUtil.getDistance(a, b)); DecimalFormat df = new DecimalFormat(".##"); return df.format(distance); } //计算距离 public double getDistanceD(LatLng a, LatLng b) { double distance = DistanceUtil.getDistance(a, b); return distance; } public String getDistance(double a1, double a2, double b1, double b2) { LatLng a = new LatLng(a1, a2); LatLng b = new LatLng(b1, b2); return getDistance(a, b); } //显示当前位置 public void setMapViewPoint(MapView mapView, LatLng point, boolean isClear) { // 构建Marker图标 BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_gcoding); // 构建MarkerOption,用于在地图上添加Marker OverlayOptions option = new MarkerOptions().position(point).icon(bitmap); if (isClear) mapView.getMap().clear(); // 在地图上添加Marker,并显示 mapView.getMap().addOverlay(option); mapView.showZoomControls(false); MapStatus mapStatus = new MapStatus.Builder().zoom(mapView.getMap().getMaxZoomLevel() - 3).target(point).build(); MapStatusUpdate u = MapStatusUpdateFactory.newMapStatus(mapStatus); mapView.getMap().animateMapStatus(u);//设置为中心显示 } //监听周围信息的获取 radius=0 为默认显示周围1000米 public void getNearInfo(int radius, int pagerNum, LatLng location, PoiSearch mPoiSearch, Handler handler, int what) { this.handler = handler; this.what = what; if (option == null) option = new PoiNearbySearchOption(); option.keyword("写字楼"); option.sortType(PoiSortType.distance_from_near_to_far); option.location(location); if (radius != 0) { option.radius(radius); } else { option.radius(1000); } if (pagerNum != 0) { option.pageNum(pagerNum); } else { option.pageNum(1); } option.pageCapacity(20); mPoiSearch.setOnGetPoiSearchResultListener(this); mPoiSearch.searchNearby(option); } public void getLocation() { } public void getNearInfo(int radius, int pagerNum, LatLng location, Handler handler) { getNearInfo(radius, pagerNum, location, PoiSearch.newInstance(), handler, NEAR_WHAT); } private void setDataToHandler(SearchResult result) { if (handler == null) return; Message message = handler.obtainMessage(); message.what = this.what; Bundle bundle = new Bundle(); bundle.putParcelable("data", result); message.setData(bundle); handler.sendMessage(message); } @Override public void onGetPoiResult(PoiResult poiResult) { if (handler == null) return; Message message = handler.obtainMessage(); message.what = this.what; Bundle bundle = new Bundle(); bundle.putParcelable("data", poiResult); message.setData(bundle); handler.sendMessage(message); } @Override public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) { setDataToHandler(poiDetailResult); } @Override public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) { setDataToHandler(poiIndoorResult); } /** * 实现实位回调监听 */ public class MyLocationListener implements BDLocationListener { public void onReceiveLocation(BDLocation location) { //Receive Location StringBuffer sb = new StringBuffer(256); sb.append("time : "); sb.append(location.getTime());//获得当前时间 sb.append("\nerror code : "); sb.append(location.getLocType());//获得erro code得知定位现状 sb.append("\nlatitude : "); sb.append(location.getLatitude());//获得纬度 sb.append("\nlontitude : "); sb.append(location.getLongitude());//获得经度 sb.append("\nradius : "); sb.append(location.getRadius()); if (location.getLocType() == BDLocation.TypeGpsLocation) {//通过GPS定位 sb.append("\nspeed : "); sb.append(location.getSpeed());//获得速度 sb.append("\nsatellite : "); sb.append(location.getSatelliteNumber()); sb.append("\ndirection : "); sb.append("\naddr : "); sb.append(location.getAddrStr());//获得当前地址 sb.append(location.getDirection());//获得方位 } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {//通过网络连接定位 sb.append("\naddr : "); sb.append(location.getAddrStr());//获得当前地址 //运营商信息 sb.append("\noperationers : "); sb.append(location.getOperators());//获得经营商? } Log.i("BaiduLocationApiDem", sb.toString()); } } }