百度地图 地图选点
来源:互联网 发布:西安美林数据是外包 编辑:程序博客网 时间: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
- 百度地图 地图选点
- 百度地图选点(百度地图3.1版本)
- 高德地图-地图选点实现
- 仿百度地图自行车路线搜索和地图选点,覆盖物,途经点阅览,路线总长度计算等
- Android studio 百度地图开发(4)触摸选点、地理编码
- js百度地图-鼠标选点连线,最终生成多边形覆盖物
- 百度地图-----显示地图
- 百度地图-放大地图
- 百度地图 定位 地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- Linux 下 ftp的详细配置
- Linux内核源代码情景分析-insmod
- failover
- 解决小米Note adb调试无法发现设备
- 程序基本功之遍历二叉树
- 百度地图 地图选点
- jeecg部署说明
- mysql绑定端口报错
- 第二章 jQuery技术解密 (五)
- android AsyncTask介绍
- LeetCode 25 Reverse Nodes in k-Group K个一组反转节点
- Xcode 6.2需要设置文件unrecognized selector sent to class(20150506)
- 看到这样的翻译,我也是醉了。。。
- IOS 调用系统循环震动