项目中用到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) 第三个参数做手脚即可

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

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

  1. 高德 android 多边形中心点,完美起航-android高德地图画多边形,已知中心点宽高画矩形,实际距离千米转地图坐标距离...

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

  2. vue2+高德地图绘制多个圆形覆盖物和多边形覆盖物

    vue2+高德地图绘制圆形覆盖物以及多边形覆盖物 直接贴代码 直接贴代码 添加复选款 <el-checkbox v-model="checkedAri" @change=&q ...

  3. 地图绘制边界。高德。PPMAP。 鼠标点击经纬度坐标 。地图图标点点击弹窗窗口。地图图标点点击事件。

    边界: == 第一种:绘制边界. 通过绘制多边形的API来绘制边界. 高德API:多边形 Polygon. 矢量图形-覆盖物-教程-地图 JS API | 高德地图API 将关键的边界轮廓 经纬度坐标 ...

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

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

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

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

  6. Matlab绘制三维定限截面柱体;已知(隐)函数方程,绘制三维空间图形

    文章目录 fimplicit3绘制三维隐函数 基本语法: 基础示例: fimplicit3绘制空间定限截面柱体 柱体的隐函数方程: 添加线条样式: 添加平面(截面)方程: 二型线积分-斯托克斯公式例题 ...

  7. 高德地图markevents_GitHub - mingxuWang/Map: 高德地图API二次封装

    Map组件设计文档 组件设计目的 分析当前各业务方向(销售端.商城.数据可视化.TMS)内地图相关应用的地图功能使用情况,封装Map组件供给各业务向进行使用. 将高德地图API进行二次封装,降低地图相 ...

  8. 天地图(全国版)根据已知点集合绘制直线

    场景: 最近又开始整天地图了,先前整的是福建省的,这次整全国版的(http://lbs.tianditu.gov.cn/),省级的和全国的天地图用的竟然是不一样的,国家搞一套,省级搞一套,市级不知道是 ...

  9. matlab画曲面二次,如何用matlab绘制二次B样条三维曲面(已知控制点和节点矢量)?...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 小弟初来乍到,现在需要用matlaB绘制二次B样条曲面,现在已知信息: 小弟做这个已经一个星期了,现在无任何进展,现在是万分着急,希望高手们给小弟指点一二 ...

最新文章

  1. 《抓住听众心理——演讲者要知道的100件事》一20.人们学习的最优长度是20分钟...
  2. iOS UI_APPEARANCE_SELECTOR
  3. Map集合 java
  4. 深度学习——NMS(非极大抑制)
  5. 预告 | 大咖Live X 数字绿土 CTO 赵宝林:高精度地图上车之路究竟还有多远?
  6. 关于51CTO民意调查之自主添加google广告代码的几点意见
  7. 计算机网络基础中职期中,中职计算机网络基础期中试卷
  8. likeshop搭建商城系统,一步到位
  9. 【Scratch】青少年蓝桥杯_每日一题_12.01_角色装扮
  10. 第十四周 项目一 二叉排序树
  11. 2007福布斯名人榜完全名单 巩俐收入盖过章子怡
  12. linux命令之cal详解
  13. C# DataGridView数据导出Excel文件
  14. java华氏温度与摄氏度的互相转换
  15. 入侵和攻击模拟(BAS)实践
  16. 【应用实例】基于单片机的激光相位测距仪
  17. Typora常用快捷键(MarkDown)
  18. java工程师的自我评价_Java开发工程师-自我评价怎么写(范文)
  19. AHCI导致启动win7蓝屏的解决
  20. Linux下的vim如何保存并退出

热门文章

  1. 激光雷达赛道“白刃战”?硅光芯片级FMCW技术进入量产周期
  2. python换脸完整程序_小 200 行 Python 代码做了一个换脸程序
  3. TP5.1 支付宝app支付 (沙箱本地测试)
  4. spring boot初始化完成时(两种方式)执行某种操作
  5. 科创人·和讯网CTO杨扬:技术独狼到业务驱动者的修行之道
  6. 一种Cortex-M内核中的精确延时方法
  7. 面向对象程序设计实验报告
  8. 云服务器cvm系统,cvm云服务器如何登录
  9. 智慧社区如何设计 智慧社区解决方案
  10. HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1);出现异常