百度地图定位

//布局文件
    android:id="@+id/bmapView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="true"
    />

    android:id="@+id/tv_location"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="位置:你去哪儿了"
    android:layout_centerInParent="true"/>




public class Second extends AppCompatActivity { private TextView text ; private MapView mapView ; private BaiduMap baiduMap ; Boolean isFirstLoc= true; public LocationClient mLocationClient = null; public BDLocationListener myListener = new MyLocationListener() ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState) ; SDKInitializer. initialize(getApplicationContext()) ; setContentView(R.layout. first) ; mapView = (MapView) findViewById(R.id. bmapView) ; text = (TextView) findViewById(R.id. tv_location) ; //获取地图 baiduMap = mapView.getMap() ; //开启定位图层 baiduMap.setMyLocationEnabled( true) ; mLocationClient = new LocationClient(getApplicationContext()) ; //注册监听函数 mLocationClient.registerLocationListener( myListener) ; initLocation() ; mLocationClient.start() ; } public class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { //获取定位结果 StringBuffer sb = new StringBuffer( 256) ; sb.append( "time : ") ; sb.append(location.getTime()) ; //获取定位时间 sb.append( " \n error code : ") ; sb.append(location.getLocType()) ; //获取类型类型 sb.append( " \n latitude : ") ; sb.append(location.getLatitude()) ; //获取纬度信息 sb.append( " \n lontitude : ") ; sb.append(location.getLongitude()) ; //获取经度信息 sb.append( " \n radius : ") ; sb.append(location.getRadius()) ; //获取定位精准度 //---------------------将地图跟定位关联起来---------------------------------------- MyLocationData locData = new MyLocationData.Builder() .accuracy(location.getRadius()) // 此处设置开发者获取到的方向信息,顺时针0-360 .direction( 100).latitude(location.getLatitude()) .longitude(location.getLongitude()).build() ; // 设置定位数据 baiduMap.setMyLocationData(locData) ; if ( isFirstLoc) { isFirstLoc = false; LatLng ll = new LatLng(location.getLatitude() , location.getLongitude()) ; MapStatus.Builder builder = new MapStatus.Builder() ; builder.target(ll).zoom( 18.0f) ; baiduMap.animateMapStatus(MapStatusUpdateFactory. newMapStatus(builder.build())) ; } //---------------------将地图跟定位关联起来---------------------------------------- if (location.getLocType() == BDLocation. TypeGpsLocation) { // GPS定位结果 sb.append( " \n speed : ") ; sb.append(location.getSpeed()) ; // 单位:公里每小时 sb.append( " \n satellite : ") ; sb.append(location.getSatelliteNumber()) ; //获取卫星数 sb.append( " \n height : ") ; sb.append(location.getAltitude()) ; //获取海拔高度信息,单位米 sb.append( " \n direction : ") ; sb.append(location.getDirection()) ; //获取方向信息,单位度 sb.append( " \n addr : ") ; sb.append(location.getAddrStr()) ; //获取地址信息 sb.append( " \n describe : ") ; sb.append( "gps定位成功") ; } else if (location.getLocType() == BDLocation. TypeNetWorkLocation) { // 网络定位结果 sb.append( " \n addr : ") ; sb.append(location.getAddrStr()) ; //获取地址信息 sb.append( " \n operationers : ") ; sb.append(location.getOperators()) ; //获取运营商信息 sb.append( " \n describe : ") ; sb.append( "网络定位成功") ; } else if (location.getLocType() == BDLocation. TypeOffLineLocation) { // 离线定位结果 sb.append( " \n describe : ") ; sb.append( "离线定位成功,离线定位结果也是有效的") ; } else if (location.getLocType() == BDLocation. TypeServerError) { sb.append( " \n describe : ") ; sb.append( "服务端网络定位失败,可以反馈IMEI号和大体定位时间到[email protected],会有人追查原因") ; } else if (location.getLocType() == BDLocation. TypeNetWorkException) { sb.append( " \n describe : ") ; sb.append( "网络不同导致定位失败,请检查网络是否通畅") ; } else if (location.getLocType() == BDLocation. TypeCriteriaException) { sb.append( " \n describe : ") ; sb.append( "无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机") ; } sb.append( " \n locationdescribe : ") ; sb.append(location.getLocationDescribe()) ; //位置语义化信息 final List list = location.getPoiList() ; // POI数据 if (list != null) { sb.append( " \n poilist size = : ") ; sb.append(list.size()) ; for (Poi p : list) { sb.append( " \n poi= : ") ; sb.append(p.getId() + " " + p.getName() + " " + p.getRank()) ; } } //此方法运行在子线程 runOnUiThread( new Runnable() { @Override public void run() { text.setText( list.get( 2).getName()) ; } }) ; Log. i( "BaiduLocationApiDem" , sb.toString() + ",目前位置:" + list.get( 2).getName()) ; } @Override public void onConnectHotSpotMessage(String s , int i) { } } private void initLocation() { LocationClientOption option = new LocationClientOption() ; option.setLocationMode(LocationClientOption.LocationMode. Hight_Accuracy) ; //可选,默认高精度,设置定位模式,高精度,低功耗,仅设备 option.setCoorType( "bd09ll") ; //可选,默认gcj02,设置返回的定位结果坐标系 int span = 1000 ; option.setScanSpan(span) ; //可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的 option.setIsNeedAddress( true) ; //可选,设置是否需要地址信息,默认不需要 option.setOpenGps( true) ; //可选,默认false,设置是否使用gps option.setLocationNotify( true) ; //可选,默认false,设置是否当GPS有效时按照1S/1次频率输出GPS结果 option.setIsNeedLocationDescribe( true) ; //可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近” option.setIsNeedLocationPoiList( true) ; //可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到 option.setIgnoreKillProcess( false) ; //可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死 option.SetIgnoreCacheException( false) ; //可选,默认false,设置是否收集CRASH信息,默认收集 option.setEnableSimulateGps( false) ; //可选,默认false,设置是否需要过滤GPS仿真结果,默认需要 mLocationClient.setLocOption(option) ; }}

你可能感兴趣的:(百度地图定位)