android高德地图绘制多边形_Android安卓高德地图实现多边形绘制与编辑

需求:使用高德地图api实现多边形的绘制与编辑,从而实现圈中房屋的效果。

在js中有相关插件,效果很好。点我跳转

但是在高德开放平台中并未找到安卓ios的相关插件或者方法,于是提交工单,5个工作日才能回复,算了不等了,自己写吧!

思路:

1.首先根据当前定位的点绘制一个矩形,在矩形的四个顶点(LatLng)创建Marker,并给四个顶点初始化一个状态(MyLatLng.ABLE)和一个索引值。

2.计算矩形四边的中点经纬度(LatLng),四个中点创建Marker,并给四个顶点初始化一个状态(MyLatLng.UNABLE)和一个索引值。

3.绘制多边形样式,并调用AMap.addPolygon方法创建多边形。

4.aMap.setOnMarkerDragListener给Marker添加拖拽事件

5.在onMarkerDragStart方法移除拖拽的Marker

6.在onMarkerDragEnd方法添加新的Marker并判断该点左右两个Marker的状态:如果状态为MyLatLng.ABLE,则表示该点拖拽后需要在该点两侧创建新Marker。如果状态为MyLatLng.UNABLE则不需要创建新的点,而是替换两侧的点的坐标(该坐标为新点到两侧点的中间点)。

7、重新根据新的点绘制多边形

效果图

444.png

代码:

1.集成高德地图和申请位置权限就不说了

2.初始化地图

/**

* 初始化地图

*/

private void initMap() {

if (aMap == null) {

aMap = mMapView.getMap();

MyLocationStyle myLocationStyle;

myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。

myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);

myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。

aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style

aMap.setMinZoomLevel(20);//不让用户缩放地图

aMap.moveCamera(CameraUpdateFactory.zoomTo(20));

mlocationClient = new AMapLocationClient(this.getApplicationContext());

locationOption = getDefaultOption();

mlocationClient.setLocationOption(locationOption);

mlocationClient.setLocationListener(locationListener);

// 启动定位

mlocationClient.startLocation();

}

}

/**

* 设置默认的定位参数

*/

private AMapLocationClientOption getDefaultOption() {

AMapLocationClientOption mOption = new AMapLocationClientOption();

mOption.setLocationMode(

AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//可选,设置定位模式,可选的模式有高精度、仅设备、仅网络。默认为高精度模式

mOption.setGpsFirst(false);//可选,设置是否gps优先,只在高精度模式下有效。默认关闭

mOption.setHttpTimeOut(30000);//可选,设置网络请求超时时间。默认为30秒。在仅设备模式下无效

mOption.setInterval(300000);//可选,设置定位间隔。默认为2秒

mOption.setNeedAddress(true);//可选,设置是否返回逆地理地址信息。默认是true

mOption.setOnceLocation(true);//可选,设置是否单次定位。默认是false

mOption.setOnceLocationLatest(false);//可选,设置是否等待wifi刷新,默认为false.如果设置为true,会自动变为单次定位,持续定位时不要使用

AMapLocationClientOption.setLocationProtocol(

AMapLocationClientOption.AMapLocationProtocol.HTTP);//可选, 设置网络请求的协议。可选HTTP或者HTTPS。默认为HTTP

mOption.setWifiScan(

true); //可选,设置是否开启wifi扫描。默认为true,如果设置为false会同时停止主动刷新,停止以后完全依赖于系统刷新,定位位置可能存在误差

return mOption;

}

3.定位的监听

/**

* 定位监听

*/

AMapLocationListener locationListener = new AMapLocationListener() {

@Override

public void onLocationChanged(AMapLocation amapLocation) {

if (null != amapLocation) {

//errCode等于0代表定位成功,其他的为定位失败,具体的可以参照官网定位错误码说明

if (amapLocation.getErrorCode() == 0) {

latitude = amapLocation.getLatitude();

longitude = amapLocation.getLongitude();

aMap.a

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值