项目中用到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高德地图画多边形,已知中心点宽高画矩形,实际距离千米转地图坐标距离...相关推荐

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

    项目中用到mapabc 绘制矩形区域.客户只能手动选择中心点,并填写区域的宽和高,切单位为km.要求实时显示规划区域. 记录笔记. 第一步找到地图绘制多边形api polygon = map.addP ...

  2. android+下落+动画,完美起航-Android面试题之动画+事件处理篇

    前言 提示:秋招在即,计蒙准备在国庆假期结束前整理一套Android初级面试题籍,希望对大家有所帮助 提示:以下是本篇文章正文内容 动画 1.Android 中的动画有哪几类 帧动画.补间动画.属性动 ...

  3. android studio crashlytics,完美解决Android Studio集成crashlytics后无法编译的问题

    问题描述: 在用fabric集成后编译出现如下错误, Error:Cause: hostname in certificate didn't match: != OR OR build.gradle部 ...

  4. android宫格式布局,Android 自定义TextView实现宫格布局,Drawable添加图片并控制宽高...

    上图: 需求: 宫格布局(宽高一致,在屏幕上高度始终更随宽度变化) 图片在上文字在下布局 可以控制图片的宽高 布局完成,废话不多说直接上代码: /** * 时 间 : 2019/7/22 0022 * ...

  5. android sdk v28,完美起航-androidstudio编译出错:Androidresourcelinkingfailed

    问题描述 今天在Android studio通过模拟器运行app的时候,出现了以下错误: Android resource linking failed AAPT: D:\developer\andr ...

  6. android onresume时view,Android中为什么在onResume之前(包括onResume)获取不到View的宽高?...

    已知点: 1.View绘制流程的起点是 ViewRootImpl#scheduleTraversals() : 2.在onCreate里的setContentView中 确定了布局文件中有哪些对象: ...

  7. android绘图拖影效果,Android自定义View绘图实现拖影动画

    前几天在"Android绘图之渐隐动画"一文中通过画线实现了渐隐动画,但里面有个问题,画笔较粗(大于1)时线段之间会有裂隙,我又改进了一下.这次效果好多了. 先看效果吧: 然后我们 ...

  8. android 自定义view 高度,自定义View之宽高的设置,全网最详解

    今天给大家带来的是自定义View,然后如何设置他的宽高,经常用自定义view的程序猿肯定都知道我们在给自定义view设置wrap_content或者match_parent,view都会占满全屏,就想 ...

  9. Android通知怎么实现?Android开发如何操作相机和相册?

    Android通知怎么实现?Android开发如何操作相机和相册? 前言 八.Android通知怎么实现?Android开发如何操作相机和相册? 8.1 通知介绍 8.2 通知的基本用法 8.3 An ...

最新文章

  1. Git常见疑难解答集锦
  2. 10-MySQL-Ubuntu-数据表中数据的查询(三)
  3. 服务器中同一个【ip:port】可以多次accept的问题
  4. sprinigboot(2.2.4)+mysql引入druid的性能监控StateFilter
  5. Leetcode 648.单词替换
  6. Chapter7-3_BERT and its family - ELMo, BERT, GPT, XLNet, MASS, BART, UniLM, ELECTRA, and more
  7. MaxCompute理解数据、运算和用户的大脑:基于代价的优化器
  8. java 找不到或无法加载类_解决Java中找不到或无法加载主类错误
  9. webservice 调用慢问题解决
  10. JAVA ftps设置_如何使用apache.commons.net.ftps配置客户端身份验证?
  11. 散射理论对微波遥感的重要性
  12. net bios支持服务器,禁用NetBIOS巧妙解决网络不通故障
  13. 搭建 WordPress 博客教程
  14. 树莓派4b使用vncview连接报错:Cannot currently show the desktop
  15. mysql中日期相减_Excel日期和时间运算
  16. 水星路由服务器无信号,水星路由器MW326R没有WiFi信号了怎么回事?【图解】
  17. 185 道必须掌握的大数据面试真题(附答案)
  18. ubuntu 18.04 VSCode沙绿色主题设置
  19. 支付宝固码php模拟,【推荐】PC_支付宝收款助手【支持支付宝固码+自动生成】...
  20. 哪些APP需要做ASO优化?

热门文章

  1. “测温枪”到底是怎样测出你的温度的?
  2. Rasterino 2.3.0版for AI 2020 (Illustrator裁切图片一键PS修图插件)
  3. 对JVM还一知半解?这篇文章让你彻底搞定JVM
  4. 如何写出三体的MATLAB程序-代码篇
  5. STM32的复位电路、ISP一键下载原理
  6. BUUCTF-Crypto【1-20T】
  7. 单片机常用的编程语言有哪些?怎样能快速提高编程水平?
  8. [转]轻松获得网通、电信、铁通IP地址分配段
  9. 新闻类客户端代码阅读笔记
  10. 数字经济商学院开班仪式成功举行 创新社《筱静观察》倾情支持