android中高德地图基础功能

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位置根据屏幕移动
}

 

 

 

 

转载于:https://my.oschina.net/u/2558429/blog/871202

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值