1.显示地图
1.1在高德地图api中创建项目,获得key
1.2在AndroidManifest.xml文件中的applicaton节点下,添加
<meta-data android:name="com.amap.api.v2.apikey" android:value="申请的key" />
1.3添加权限
<!-- 允许程序打开网络套接字 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- 允许程序设置内置sd卡的写权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 允许程序获取网络状态 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 允许程序访问WiFi网络信息 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 允许程序读写手机状态和身份 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 允许程序访问CellID或WiFi热点来获取粗略的位置 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
1.4代码部分
private MapView gaodemap_mv; private AMap aMap;//地图控制器 //实现定位蓝点 MyLocationStyle myLocationStyle; private UiSettings mUiSettings;//定义一个UiSettings对象
gaodemap_mv = (MapView) findViewById(R.id.gaodemap_mv);
gaodemap_mv.onCreate(savedInstanceState);//必须要 //初始化地图控制器 if (aMap == null) { CameraUpdate cameraUpdate = CameraUpdateFactory.zoomTo(17); aMap = gaodemap_mv.getMap(); aMap.moveCamera(cameraUpdate); } /** * 设置希望展示的地图缩放级别,地图的缩放级别一共分为 18 级, * 从 3 到 21。数字越大,展示的图面信息越精细 *14代表500米 */ aMap.setOnCameraChangeListener(this);//手指平滑移动监听 // aMap.showIndoorMap(true);//开启室内地图 // aMap.setTrafficEnabled(true);//设置交通路况 mUiSettings = aMap.getUiSettings();//实例化UiSettings类对象 mUiSettings.setZoomControlsEnabled(true);//显示缩放按钮,默认打开,每次点击改变1个级别 mUiSettings.setScaleControlsEnabled(true);//比例尺控件是否显示
@Override protected void onResume() { super.onResume(); gaodemap_mv.onResume(); } @Override protected void onPause() { super.onPause(); gaodemap_mv.onPause(); } @Override protected void onDestroy() { super.onDestroy(); gaodemap_mv.onDestroy(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态 gaodemap_mv.onSaveInstanceState(outState); }
2.显示蓝点定位
//设置定位蓝点样式 private void setLocationStyle() { myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类 myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW);//只定位一次 myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。 aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style aMap.getUiSettings().setMyLocationButtonEnabled(true);//设置默认定位按钮是否显示,非必需设置。 aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。 }
3.添加marker
private void addMarker(){ //定位marker marker = aMap.addMarker(new MarkerOptions() .anchor(0.5f, 0.5f) .icon(BitmapDescriptorFactory.fromResource(R.mipmap.ic_launcher))); }
4.添加线段
ArrayList<LatLng> latLngs=new ArrayList<>(); latLngs.add(new LatLng(lat.latitude+0.0004, lat.longitude+0.0004)); latLngs.add(new LatLng(lat.latitude-0.0003,lat.longitude-0.0003)); latLngs.add(new LatLng(lat.latitude+0.0005,lat.longitude+0.0005)); latLngs.add(new LatLng(lat.latitude-0.0005,lat.longitude-0.0005));
polyline = aMap.addPolyline(new PolylineOptions(). addAll(latLngs).width(10).color(Color.argb(255, 1, 1, 1)));
5.根据触摸移动marker位置
implements AMap.OnCameraChangeListener
aMap.setOnCameraChangeListener(this);//手指平滑移动监听
/** * 移动中 * @param cameraPosition */ @Override public void onCameraChange(CameraPosition cameraPosition) { } /** * 移动后 * @param cameraPosition */ @Override public void onCameraChangeFinish(CameraPosition cameraPosition) { lat = new LatLng(cameraPosition.target.latitude, cameraPosition.target.longitude); show_tv.setText(lat + ""); LocationUtils.latitude = lat.latitude; LocationUtils.longitude = lat.longitude; aMap.moveCamera(CameraUpdateFactory.newLatLng(lat));//把地图移到定位中心点 marker.setPosition(lat);//移动marker位置根据屏幕移动 }