高德 android 多边形中心点,完美起航-android高德地图画多边形,已知中心点宽高画矩形,实际距离千米转地图坐标距离...
项目中用到mapabc 绘制矩形区域。客户只能手动选择中心点,并填写区域的宽和高,切单位为km。要求实时显示规划区域。
记录笔记。
第一步找到地图绘制多边形api
polygon = map.addPolygon(new PolygonOptions()
.addAll(createRectangle(marker.getPosition(), 1, 1))//绘制多边形顶点坐标
.fillColor(0x1A1677FF)//填充颜色
.strokeColor(0xDE1677FF)//边界颜色
.strokeWidth(5));//边界宽度
我们已知顶点坐标和客户输入的宽高km 需要计算多边形的顶点坐标(矩形):
/**
* 生成一个长方形的四个坐标点
*/
private ListcreateRectangle(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) 第三个参数做手脚即可
如果是参照点为矩形的一个顶点,参照上面方法更简单。
高德 android 多边形中心点,完美起航-android高德地图画多边形,已知中心点宽高画矩形,实际距离千米转地图坐标距离...相关推荐
- android高德地图绘制多边形_android 高德地图画多边形,已知中心点 宽高画矩形 ,实际距离 千米转地图坐标距离...
项目中用到mapabc 绘制矩形区域.客户只能手动选择中心点,并填写区域的宽和高,切单位为km.要求实时显示规划区域. 记录笔记. 第一步找到地图绘制多边形api polygon = map.addP ...
- android+下落+动画,完美起航-Android面试题之动画+事件处理篇
前言 提示:秋招在即,计蒙准备在国庆假期结束前整理一套Android初级面试题籍,希望对大家有所帮助 提示:以下是本篇文章正文内容 动画 1.Android 中的动画有哪几类 帧动画.补间动画.属性动 ...
- android studio crashlytics,完美解决Android Studio集成crashlytics后无法编译的问题
问题描述: 在用fabric集成后编译出现如下错误, Error:Cause: hostname in certificate didn't match: != OR OR build.gradle部 ...
- android宫格式布局,Android 自定义TextView实现宫格布局,Drawable添加图片并控制宽高...
上图: 需求: 宫格布局(宽高一致,在屏幕上高度始终更随宽度变化) 图片在上文字在下布局 可以控制图片的宽高 布局完成,废话不多说直接上代码: /** * 时 间 : 2019/7/22 0022 * ...
- android sdk v28,完美起航-androidstudio编译出错:Androidresourcelinkingfailed
问题描述 今天在Android studio通过模拟器运行app的时候,出现了以下错误: Android resource linking failed AAPT: D:\developer\andr ...
- android onresume时view,Android中为什么在onResume之前(包括onResume)获取不到View的宽高?...
已知点: 1.View绘制流程的起点是 ViewRootImpl#scheduleTraversals() : 2.在onCreate里的setContentView中 确定了布局文件中有哪些对象: ...
- android绘图拖影效果,Android自定义View绘图实现拖影动画
前几天在"Android绘图之渐隐动画"一文中通过画线实现了渐隐动画,但里面有个问题,画笔较粗(大于1)时线段之间会有裂隙,我又改进了一下.这次效果好多了. 先看效果吧: 然后我们 ...
- android 自定义view 高度,自定义View之宽高的设置,全网最详解
今天给大家带来的是自定义View,然后如何设置他的宽高,经常用自定义view的程序猿肯定都知道我们在给自定义view设置wrap_content或者match_parent,view都会占满全屏,就想 ...
- Android通知怎么实现?Android开发如何操作相机和相册?
Android通知怎么实现?Android开发如何操作相机和相册? 前言 八.Android通知怎么实现?Android开发如何操作相机和相册? 8.1 通知介绍 8.2 通知的基本用法 8.3 An ...
最新文章
- Git常见疑难解答集锦
- 10-MySQL-Ubuntu-数据表中数据的查询(三)
- 服务器中同一个【ip:port】可以多次accept的问题
- sprinigboot(2.2.4)+mysql引入druid的性能监控StateFilter
- Leetcode 648.单词替换
- Chapter7-3_BERT and its family - ELMo, BERT, GPT, XLNet, MASS, BART, UniLM, ELECTRA, and more
- MaxCompute理解数据、运算和用户的大脑:基于代价的优化器
- java 找不到或无法加载类_解决Java中找不到或无法加载主类错误
- webservice 调用慢问题解决
- JAVA ftps设置_如何使用apache.commons.net.ftps配置客户端身份验证?
- 散射理论对微波遥感的重要性
- net bios支持服务器,禁用NetBIOS巧妙解决网络不通故障
- 搭建 WordPress 博客教程
- 树莓派4b使用vncview连接报错:Cannot currently show the desktop
- mysql中日期相减_Excel日期和时间运算
- 水星路由服务器无信号,水星路由器MW326R没有WiFi信号了怎么回事?【图解】
- 185 道必须掌握的大数据面试真题(附答案)
- ubuntu 18.04 VSCode沙绿色主题设置
- 支付宝固码php模拟,【推荐】PC_支付宝收款助手【支持支付宝固码+自动生成】...
- 哪些APP需要做ASO优化?
热门文章
- “测温枪”到底是怎样测出你的温度的?
- Rasterino 2.3.0版for AI 2020 (Illustrator裁切图片一键PS修图插件)
- 对JVM还一知半解?这篇文章让你彻底搞定JVM
- 如何写出三体的MATLAB程序-代码篇
- STM32的复位电路、ISP一键下载原理
- BUUCTF-Crypto【1-20T】
- 单片机常用的编程语言有哪些?怎样能快速提高编程水平?
- [转]轻松获得网通、电信、铁通IP地址分配段
- 新闻类客户端代码阅读笔记
- 数字经济商学院开班仪式成功举行 创新社《筱静观察》倾情支持