Android之百度地图开发,包含定位,覆盖物,经纬度位置转换,长按设置中心位置
来源:互联网 发布:开淘宝店的计划书 编辑:程序博客网 时间:2024/05/17 02:44
public class MainActivity extends Activity implements View.OnLongClickListener { private static final String TAG = MainActivity.class.getSimpleName(); // 定位相关 LocationClient mLocClient; public MyLocationListenner myListener = new MyLocationListenner(); MapView mMapView; BaiduMap mBaiduMap; boolean isFirstLoc = true; // 是否首次定位 private LatLng point; private Marker markerA; private Marker markerB; private Marker markerC; private LatLng point2; private LatLng point3; private GeoCoder geoCoder; private Button button1; private Button button; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); // 地图初始化 mMapView = (MapView) findViewById(R.id.bmapView); mBaiduMap = mMapView.getMap(); // 开启定位图层 mBaiduMap.setMyLocationEnabled(true); // 创建地理编码检索实例 geoCoder = GeoCoder.newInstance(); // 定位初始化 mLocClient = new LocationClient(this); mLocClient.registerLocationListener(myListener); LocationClientOption option = new LocationClientOption(); option.setOpenGps(true); // 打开gps option.setCoorType("bd09ll"); // 设置坐标类型 option.setScanSpan(1000); mLocClient.setLocOption(option); mLocClient.start(); mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { button = new Button(MainActivity.this); button.setBackgroundResource(R.drawable.btn); if (marker == markerA) { button.setText("我是A"); myLatLng(point); //创建InfoWindow , 传入 view, 地理坐标, y 轴偏移量 InfoWindow mInfoWindow = new InfoWindow(button, point, -110); //显示InfoWindow mBaiduMap.showInfoWindow(mInfoWindow); } if (marker == markerB) { button.setText("我是B"); InfoWindow mInfoWindow = new InfoWindow(button, point2, -110); mBaiduMap.showInfoWindow(mInfoWindow); } if (marker == markerC) { button.setText("我是C"); InfoWindow mInfoWindow = new InfoWindow(button, point3, -110); mBaiduMap.showInfoWindow(mInfoWindow); } // Toast.makeText(MainActivity.this, ""+point.latitude+":"+point.longitude+":"+marker, Toast.LENGTH_SHORT).show(); return false; } }); mBaiduMap.setOnMapLongClickListener(new BaiduMap.OnMapLongClickListener() { @Override public void onMapLongClick(LatLng latLng) { MapStatus maps = new MapStatus.Builder().target(latLng).zoom(18).build(); MapStatusUpdate m = MapStatusUpdateFactory.newMapStatus(maps); //改变地图状态 mBaiduMap.setMapStatus(m); // Log.i(TAG, "onMapLongClick: "+latLng.latitude+":"+latLng.longitude); // I/MainActivity: onMapLongClick: 22.54988914359645:113.93814237509572 } }); } @Override public boolean onLongClick(View view) { return false; } @Override public boolean onKeyLongPress(int keyCode, KeyEvent event) { event.getDownTime(); Log.i(TAG, "onKeyLongPress: " + event.getDownTime()); return super.onKeyLongPress(keyCode, event); } /** * 定位SDK监听函数 */ public class MyLocationListenner implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { // map view 销毁后不在处理新接收的位置 if (location == null || mMapView == null) { return; } MyLocationData locData = new MyLocationData.Builder() .accuracy(location.getRadius()) // 此处设置开发者获取到的方向信息,顺时针0-360 .direction(100).latitude(location.getLatitude()) .longitude(location.getLongitude()).build(); latitude = location.getLatitude(); longitude = location.getLongitude(); // Log.i(TAG, "onReceiveLocation: " + location.getLongitude() + ":" + location.getLatitude()); addMyLocation(); mBaiduMap.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); mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build())); } } } //当前位置经纬度 private double latitude; private double longitude; /** * 定位并添加标注 */ private void addMyLocation() { List<OverlayOptions> var = new ArrayList(); //定义Maker坐标点 point = new LatLng(latitude, longitude); //构建Marker图标 BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_marka); //构建MarkerOption,用于在地图上添加Marker OverlayOptions option = new MarkerOptions() .position(point) .icon(bitmap); var.add(option); point2 = new LatLng(latitude + 0.001123, longitude + 0.001256); //构建Marker图标 BitmapDescriptor bitmapb = BitmapDescriptorFactory.fromResource(R.drawable.icon_markb); //构建MarkerOption,用于在地图上添加Marker OverlayOptions option2 = new MarkerOptions() .position(point2) .icon(bitmapb); //在地图上添加Marker,并显示 var.add(option2); point3 = new LatLng(latitude - 0.001123, longitude - 0.001256); //构建Marker图标 BitmapDescriptor bitmapc = BitmapDescriptorFactory.fromResource(R.drawable.icon_markc); //构建MarkerOption,用于在地图上添加Marker OverlayOptions option3 = new MarkerOptions() .position(point3) .icon(bitmapc); //在地图上添加Marker,并显示 var.add(option3); mBaiduMap.addOverlays(var); markerA = (Marker) mBaiduMap.addOverlay(option); markerB = (Marker) mBaiduMap.addOverlay(option2); markerC = (Marker) mBaiduMap.addOverlay(option3); } @Override protected void onPause() { mMapView.onPause(); super.onPause(); } @Override protected void onResume() { mMapView.onResume(); super.onResume(); } @Override protected void onDestroy() { // 退出时销毁定位 mLocClient.stop(); // 关闭定位图层 mBaiduMap.setMyLocationEnabled(false); mMapView.onDestroy(); mMapView = null; super.onDestroy(); } /** * 经纬度转换成地址 */ private void myLatLng(LatLng latLng) { // 设置反地理经纬度坐标,请求位置时,需要一个经纬度 geoCoder.reverseGeoCode(new ReverseGeoCodeOption().location(latLng)); //设置地址或经纬度反编译后的监听,这里有两个回调方法, geoCoder.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() { @Override public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) { // addre = "地址:"+reverseGeoCodeResult.getAddress(); // Log.i(TAG, "onGetReverseGeoCodeResult: "+reverseGeoCodeResult.getAddress()); } /** * * @param reverseGeoCodeResult */ @Override public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) { if (reverseGeoCodeResult == null || reverseGeoCodeResult.error != SearchResult.ERRORNO.NO_ERROR) { Toast.makeText(MainActivity.this, "找不到该地址!", Toast.LENGTH_SHORT).show(); } Log.i(TAG, "onGetGeoCodeResult: " + reverseGeoCodeResult.getAddress()); // String addre = "地址:"+geoCodeResult.getAddress(); button.setText( "地址:"+reverseGeoCodeResult.getAddress()); // I/MainActivity: onGetReverseGeoCodeResult: 地址:广东省深圳市南山区科苑路15号 } }); }}
布局
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.yang.yin.myapplication.MainActivity"> <com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="match_parent" android:layout_height="fill_parent" android:clickable="true" /></RelativeLayout>
相关配置
sourceSets{ main{ jniLibs.srcDir 'libs'
相关代码
1 0
- Android之百度地图开发,包含定位,覆盖物,经纬度位置转换,长按设置中心位置
- android 百度地图定位开发之时时定位-位置获取
- 百度地图 使覆盖物显示在地图中心位置
- 百度地图API: 通过经纬度定位到百度地图位置
- Android 百度地图(二)——地图切换、定位、添加覆盖物、搜索位置、连线
- 百度地图的经纬度位置
- 高德地图之设置中心位置
- android百度地图开发之自动定位所在位置与固定位置进行驾车,步行,公交路线搜索
- android百度地图开发之自动定位所在位置与固定位置进行驾车,步行,公交路线搜索
- Android百度地图,定位自己的位置。
- 百度Android定位SDK实现获取当前经纬度及位置
- 百度Android定位SDK实现获取当前经纬度及位置
- 百度Android定位SDK实现获取当前经纬度及位置
- 百度Android定位SDK实现获取当前经纬度及位置
- 百度Android定位SDK实现获取当前经纬度及位置
- Android中百度地图计算MapView任意位置的经纬度
- 利用HTML5定位功能获取经纬度,在根据经纬度利用百度地图获取位置信息
- 百度地图----->地图类型、定位模式、实时交通、我的位置、添加覆盖物、覆盖物详情及提示
- 通过Socket实现最基础的群聊天功能
- [完]虚拟机中安装X86版的Android系统
- 浅谈iOS中MVVM的架构设计与团队协作
- uva 11971 Polygon 连续概率
- ListView 的item中有多个控件导致列表点击事件失效解决
- Android之百度地图开发,包含定位,覆盖物,经纬度位置转换,长按设置中心位置
- Android下jni开发之ndk的使用(下载、配置、编译遇到的问题)
- 将代码从 spark 1.x 移植到 spark 2.x
- android点击屏幕上EditText区域以外的任何地方隐藏键盘的方法
- 搭建Kafka集群环境
- 《毛泽东思想和中国特色社会主义理论体系概论》课程 社会实践调研报告 题目:大学生理财能力调查与分析
- 刷刷笔试题--贪心算法
- 动态查询一个树形结构表中:某一个节点的所有父节点或者子节点
- 安装eclipse部分注意事项