| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- 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());
- }
- }
- }
|