android高德地图绘制多边形_android 高德地图画多边形,已知中心点 宽高画矩形 ,实际距离 千米转地图坐标距离...

这篇博客介绍了如何在Android的高德地图上根据中心点和客户输入的宽度、高度(单位:千米)动态绘制矩形。通过计算坐标点和角度,实现了将实际距离转换为地图上的像素距离,从而准确画出矩形。
摘要由CSDN通过智能技术生成

项目中用到mapabc 绘制矩形区域。客户只能手动选择中心点,并填写区域的宽和高,切单位为km。要求实时显示规划区域。

记录笔记。

第一步找到地图绘制多边形api

polygon = map.addPolygon(new PolygonOptions()

.addAll(createRectangle(marker.getPosition(), 1, 1))//绘制多边形顶点坐标

.fillColor(0x1A1677FF)//填充颜色

.strokeColor(0xDE1677FF)//边界颜色

.strokeWidth(5));//边界宽度

我们已知顶点坐标和客户输入的宽高km  需要计算多边形的顶点坐标(矩形):

/**

* 生成一个长方形的四个坐标点

*/

private List createRectangle(LatLng center, double halfWidth,

double halfHeight) {

float distance = (float) Math.sqrt(halfWidth * halfWidth + halfHeight * halfHeight);//计算直角三角形斜边 。

float degree= getDegree(0.0,0.0,-halfWidth,0.0,-halfWidth,halfHeight);//计算三角形锐角角度

//生成四边形四个点坐标

return Arrays.asList(

getLatlng(distance, center,90-degree),

getLatlng(distance, center, 90+degree),

getLatlng(distance, center, 270-degree),

getLatlng(distance, center, 270+degree)

);

}

步骤1,通过宽高算矩形顶点到中心点的距离

float distance = (float) Math.sqrt(halfWidth * halfWidth + halfHeight * halfHeight);

步骤2,通过虚拟坐标轴定位计算y轴和矩形对角线的夹角

float degree= getDegree(0.0,0.0,-halfWidth,0.0,-halfWidth,halfHeight);

以虚拟坐标系的方式运用数学知识计算夹角

/**

* 在坐标系中计算两条相交线夹角

* @param vertexPointX 交点坐标

* @param vertexPointY

* @param point0X A点坐标

* @param point0Y

* @param point1X b点坐标

* @param point1Y

* @return

*/

private int getDegree(Double vertexPointX, Double vertexPointY, Double point0X, Double point0Y, Double point1X, Double point1Y) {

//向量的点乘

Double vector = (point0X - vertexPointX) * (point1X - vertexPointX) + (point0Y - vertexPointY) * (point1Y - vertexPointY);

//向量的模乘

double sqrt = Math.sqrt(

(Math.abs((point0X - vertexPointX) * (point0X - vertexPointX)) + Math.abs((point0Y - vertexPointY) * (point0Y - vertexPointY)))

* (Math.abs((point1X - vertexPointX) * (point1X - vertexPointX)) + Math.abs((point1Y - vertexPointY) * (point1Y - vertexPointY)))

);

//反余弦计算弧度

double radian = Math.acos(vector / sqrt);

//弧度转角度制

return (int) (180 * radian / Math.PI);

}

步骤3,通过地图中心点,实际距离(矩形顶点到中心点距离),及夹角计算出顶点在地图上的坐标。

getLatlng(distance, center,90-degree)

/**

*

* @param distance 距离

* @param latlngA 中心点坐标

* @param angle 夹角

* @return

*/

public static LatLng getLatlng(float distance, LatLng latlngA, double angle) {

return new LatLng(latlngA.latitude + (distance * Math.cos(angle * Math.PI / 180)) / 111,

latlngA.longitude + (distance * Math.sin(angle * Math.PI / 180)) / (111 * Math.cos(latlngA.latitude * Math.PI / 180))

);

}

我默认画的图为正方向显示。如果需要倾斜。在getLatlng(distance, center,90-degree) 第三个参数做手脚即可

如果是参照点为矩形的一个顶点,参照上面方法更简单。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值