百度地图 地图选点

来源:互联网 发布:西安美林数据是外包 编辑:程序博客网 时间:2024/06/11 05:23

最近要做一个导航项目,看了百度地图app后,自己的项目中要用到地图选点功能,于是在网上找地图选点功能,找是找到了,可是对于现在的百度地图sdk不再适用,于是自己根据api文档自己研究了一下。

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 com.baidu.mapapi.map.BaiduMap;import com.baidu.mapapi.map.BaiduMap.OnMapStatusChangeListener;import com.baidu.mapapi.map.MapStatus;import com.baidu.mapapi.map.MapStatus.Builder;import com.baidu.mapapi.map.MapStatusUpdate;import com.baidu.mapapi.map.MapStatusUpdateFactory;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.model.LatLng;import com.baidu.mapapi.search.core.SearchResult;import com.baidu.mapapi.search.geocode.GeoCodeResult;import com.baidu.mapapi.search.geocode.GeoCoder;import com.baidu.mapapi.search.geocode.OnGetGeoCoderResultListener;import com.baidu.mapapi.search.geocode.ReverseGeoCodeOption;import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult;import android.annotation.SuppressLint;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.util.DisplayMetrics;import android.view.WindowManager;public class ItenizdActivity extends Activity {private MapView mapView = null;private BaiduMap map;public LocationClient mLocationClient = null;public BDLocationListener myListener = new MyLocationListener();private double latitude;private double longitude;private GeoCoder mSearch;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);SDKInitializer.initialize(getApplicationContext());setContentView(R.layout.baidumap);mapView = (MapView) findViewById(R.id.map);getLocation();getGeo();}@SuppressLint("NewApi")private void getMap(){//获取屏幕高度宽度WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);DisplayMetrics dm = new DisplayMetrics();wm.getDefaultDisplay().getMetrics(dm);int width = dm.widthPixels;int height = dm.heightPixels;//去掉logomapView.removeViewAt(1);map = mapView.getMap();// 设置地图模式为交通地图map.setTrafficEnabled(true);// 设置启用内置的缩放控件mapView.showZoomControls(true);//获得百度地图状态Builder builder = new MapStatus.Builder();//builder.targetScreen(new Point(width/2,height/2));//定位的坐标点LatLng latLng = new LatLng(latitude, longitude);//BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher);//OverlayOptions overlay = new MarkerOptions().position(latLng).icon(bitmap);//map.addOverlay(overlay);//设置地图中心为定位点builder.target(latLng);//设置缩放级别 18对应比例尺50米builder.zoom(18);MapStatus mapStatus = builder.build();MapStatusUpdate m = MapStatusUpdateFactory.newMapStatus(mapStatus);map.setMapStatus(m);map.setOnMapStatusChangeListener(new OnMapStatusChangeListener() {@Overridepublic void onMapStatusChangeStart(MapStatus arg0) {// TODO Auto-generated method stub}@Overridepublic void onMapStatusChangeFinish(MapStatus arg0) {// TODO Auto-generated method stubLatLng target = map.getMapStatus().target;System.out.println(target.toString());mSearch.reverseGeoCode(new ReverseGeoCodeOption().location(target));}@Overridepublic void onMapStatusChange(MapStatus arg0) {// TODO Auto-generated method stub}});}private void getLocation(){mLocationClient = new LocationClient(getApplicationContext());     //声明LocationClient类    LocationClientOption option = new LocationClientOption();option.setLocationMode(LocationMode.Hight_Accuracy);//设置定位模式option.setCoorType("bd09ll");//返回的定位结果是百度经纬度,默认值gcj02option.setScanSpan(5000);//设置发起定位请求的间隔时间为5000msoption.setIsNeedAddress(true);//返回的定位结果包含地址信息option.setNeedDeviceDirect(true);//返回的定位结果包含手机机头的方向mLocationClient.setLocOption(option);mLocationClient.registerLocationListener( myListener );    //注册监听函数mLocationClient.start();mLocationClient.requestLocation();}private void getGeo(){mSearch = GeoCoder.newInstance();OnGetGeoCoderResultListener listener = new OnGetGeoCoderResultListener() {      public void onGetGeoCodeResult(GeoCodeResult result) {          if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {              //没有检索到结果          }          //获取地理编码结果      }       @Override      public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {          if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {              //没有找到检索结果          }          //获取反向地理编码结果          System.out.println(result.getAddress());    }  };mSearch.setOnGetGeoCodeResultListener(listener);}@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();mapView.onPause();}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();mapView.onResume();}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();mapView.onDestroy();mLocationClient.stop();mSearch.destroy();}class MyLocationListener implements BDLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) {if (location == null)            return ;latitude = location.getLatitude();longitude = location.getLongitude();getMap();StringBuffer sb = new StringBuffer(256);sb.append("time : ");sb.append(location.getTime());sb.append("\nerror code : ");sb.append(location.getLocType());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){sb.append("\nspeed : ");sb.append(location.getSpeed());sb.append("\nsatellite : ");sb.append(location.getSatelliteNumber());} else if (location.getLocType() == BDLocation.TypeNetWorkLocation){sb.append("\naddr : ");sb.append(location.getAddrStr());} System.out.println(sb.toString());                        mLocationClient.stop();}}}
运行效果是这样的,进入地图,先定位自己的位置,在xml布局中间放一个定位图片,当拖动地图时,获取定位图片定位的坐标值,然后根据坐标得到自己的位置。这个位置只能显示街道门牌号,显示不了具体名称。但对于导航,只要坐标就够了,基本能实现地图选点功能。

xml代码:

?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <com.baidu.mapapi.map.MapView        android:layout_width="match_parent"        android:layout_height="match_parent"        android:id="@+id/map"        /><ImageView     android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:src="@drawable/ic_launcher"    android:layout_centerInParent="true"    /></RelativeLayout>


0 0
原创粉丝点击