/*** 假设地球为一半径为R的表面光滑圆球体,* 表面上同一经线圈上相差1"两点间的距离为 2πR/360/3600* 表面上同一纬线圈上相差1"两点间的距离为 2πR×cos(纬度)/360/3600* 当R取半径平均值6371km时,* 地球表面上同一经线圈上相差1"两点间的距离约为30.887m* 地球表面上同一纬线圈上相差1"两点间的距离约为30.887m×cos(纬度)** @param center* @param radius*/private List<LatLng> calculateLl(LatLng center, double radius) {List<LatLng> mList = new ArrayList<>();double latitude = center.latitude;//维度double longitude = center.longitude;//经度//地球周长Double perimeter = 2 * Math.PI * 6371000;//纬度latitude的地球周长:latitudeDouble perimeter_latitude = perimeter * Math.cos(Math.PI * latitude / 180);//一米对应的经度(东西方向)1M实际度double longitude_per_mi = 360 / perimeter_latitude;double latitude_per_mi = 360 / perimeter;Logger.debug(TAG, "经度(东西方向)1M实际度 ==" + longitude_per_mi);Logger.debug(TAG, "纬度(南北方向)1M实际度 ==" + latitude_per_mi);Double leftLo = longitude - (radius * longitude_per_mi);Double rightLo = longitude + (radius * longitude_per_mi);Double topLa = latitude + (radius * latitude_per_mi);Double bottomLa = latitude - (radius * latitude_per_mi);LatLng left = new LatLng(latitude, leftLo);LatLng right = new LatLng(latitude, rightLo);LatLng top = new LatLng(topLa, longitude);LatLng bottom = new LatLng(bottomLa, longitude);Logger.debug(TAG, "left ==" + left.toString());Logger.debug(TAG, "right ==" + right.toString());Logger.debug(TAG, "top ==" + top.toString());Logger.debug(TAG, "bottom ==" + bottom.toString());mList.add(left);mList.add(right);mList.add(top);mList.add(bottom);return mList;}

计算Circle和Polygon是否全部包含

/*** 圆是否包含在圆内* 正反计算第一个圆到第二个圆心距离 加上 第一个圆半径是否大于第二个圆** @return*/public boolean CircleContainsCircle( LatLng ll1 , double radius1 , LatLng ll2 , double radius2 ){double dis = getPointDistace( ll1 , ll2 ) ;if ( (dis + radius1) < radius2){return true ;}return false ;}/*** 圆是否包含在矩形内* 1 ,判断圆心在矩形内* 2 ,计算圆形到所有个点距离是否大于半径,* 3 ,在计算圆心到每条边距离大于半径* @return*/public boolean CircleContainsPolygon(LatLng ll1 , double radius1 , List<LatLng> listLL ){Polygon mPolygon = addMapPolygon( mAMap , listLL ) ;if ( !mPolygon.contains(ll1)){// 如果圆形在方块外,必定不包含return false ;}for (int i = 0; i < listLL.size() ; i++) {double dis = getPointDistace( ll1 , listLL.get(i) ) ;if (dis < radius1){// 如果有点到圆心小于半径的就必定不包含return false ;}}// 将所有点计算成屏幕坐标计算List<LatLng>  mListLL = calculateLl(ll1 , radius1 ) ;// 中心点屏幕坐标Point mPoint = toScreenLocation( mAMap , ll1 ) ;// 圆周某一个点屏幕尺寸Point mPoint1 = toScreenLocation( mAMap , mListLL.get(0) ) ;// 中心圆的屏幕尺寸double radius2 = lineSpace(mPoint.x ,  mPoint.y , mPoint1.x , mPoint1.y ) ;for (int i = 0; i < listLL.size() ; i++) {Point mPointP = null ;Point mPointN = null ;if (i == listLL.size() -1){mPointP = toScreenLocation(mAMap, listLL.get(i));mPointN = toScreenLocation(mAMap, listLL.get(0));}else {mPointP = toScreenLocation(mAMap, listLL.get(i));mPointN = toScreenLocation(mAMap, listLL.get(i + 1));}double d1 = pointToLine(mPointP.x , mPointP.y , mPointN.x , mPointN.y , mPoint.x , mPoint.y ) ;if (d1 < radius2 ){return false ;}}return true ;}/*** 矩形是否包含在圆内* 计算五个点是否在圆内* @return*/public boolean PolygonContainsCircle( List<LatLng> listLL1 , LatLng ll1 , double radius1 ){Circle mCircle = addMapCircle( mAMap , ll1 , radius1 );for (int i = 0; i < listLL1.size() ; i++) {if ( !mCircle.contains(listLL1.get(i))){return false ;}}return true ;}/*** 矩形是否包含在矩形内* 比较所有点是否相同 , 并且最后一个点是否在前一个方内* @return*/public boolean PolygonContainsPolygon(List<LatLng> listLL1 , List<LatLng> listLL2){Polygon mPolygon = addMapPolygon( mAMap , listLL2 ) ;for (int i = 0 ; i < listLL1.size() ; i++) {if ( !mPolygon.contains(listLL1.get(i))){return false ;}}return true ;}

计算点到线的最短距离

/*** 计算点到线距离* @param x1* @param y1* @param x2* @param y2* @param x0* @param y0* @return*/private double pointToLine(int x1, int y1, int x2, int y2, int x0, int y0) {double space = 0;double a, b, c;a = lineSpace(x1, y1, x2, y2);// 线段的长度b = lineSpace(x1, y1, x0, y0);// (x1,y1)到点的距离c = lineSpace(x2, y2, x0, y0);// (x2,y2)到点的距离if (c <= 0.000001 || b <= 0.000001) {space = 0;return space;}if (a <= 0.000001) {space = b;return space;}if (c * c >= a * a + b * b) {space = b;return space;}if (b * b >= a * a + c * c) {space = c;return space;}double p = (a + b + c) / 2;// 半周长double s = Math.sqrt(p * (p - a) * (p - b) * (p - c));// 海伦公式求面积space = 2 * s / a;// 返回点到线的距离(利用三角形面积公式求高)return space;}/*** 计算两点之间的距离*/private double lineSpace(int x1, int y1, int x2, int y2) {double lineLength = 0;lineLength = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));return lineLength;}

Android 高德地图计算 Circle 计算上下左右四个点经纬度,Circle和Polygon是否全部包含,计算地图中点到线的最短距离相关推荐

  1. 皮尔森相关性系数的计算python代码(四)(热力图版)

    部分代码: import numpy import pandas as pd import numpy as np from matplotlib.font_manager import FontPr ...

  2. android+高德地图教程,Android高德地图开发(三)地图简单操作

    一.概述 上一节中我们了解到地图的定位,图层切换,离线地图等基础操作,接下来学习地图的基本操作. 二.本章内容 --- 地图交互设置 --- 地图绘制 1.地图交互设置 在使用地图的时候,不可避免的会 ...

  3. Android 高德地图自定义线路规划选择方案之后按照方案进行导航

    Android 高德地图自定义线路规划选择方案之后按照方案进行导航 因为我这边导航需求的问题,导致我这边不能使用高德地图官方的线路规划和导航.所以我这边线路规划和导航界面都是根据高德地图那边给的api ...

  4. Android 高德地图API(详细步骤+源码)

    高德地图API使用详解 前言 正文 一.创建应用 ① 获取PackageName ② 获取调试版安全码SHA1 ③ 获取发布版安全码SHA1 二.配置Android Studio工程 ① 导入SDK ...

  5. Android高德地图开发详解

    这段时间开发的时候用到了高德地图,对高德地图开发有心得体会,现在分享给大家,对我开发过百度地图的我来说,总体来说高德地图Demo,没有百度讲解的详细 个人更偏向于使用百度地图,但是没办发,项目需要使用 ...

  6. Android高德地图自定义Markers的例子

    下文为各位重点介绍关于Android高德地图自定义Markers的例子,希望这篇文章能够让各位理解到Android高德地图自定义Markers的方法. 之前的博客里说了地图的嵌入和定位,今天就说说在地 ...

  7. Android 高德地图(带有定位和点击显示经度纬度)

    Android高德地图测试,如下: 1.Android高德地图Demo地址下载:       下载android高德地图Demo 1.2 Android定位SDK 一键下载 1.3 下载好的文件zip ...

  8. android 高德地图动画,Android 高德地图上自定义动画

    高德提供了SmoothMoveMarkerAPI的调用,用于平滑移动,只需要给point点就好了 还有animation的封装,对 RotateAnimation,AlphaAnimation,Sca ...

  9. Android 高德地图给指定坐标显示图片,以及聚合显示

    官网实例请点击:Android 高德地图聚合官网 下面是一个案例: 效果图: MainActivity public class MainActivity extends AppCompatActiv ...

最新文章

  1. js进阶 9-11 select选项框如何动态添加和删除元素
  2. 深度学习表征的不合理有效性——从头开始构建图像搜索服务(二)
  3. 【渝粤题库】国家开放大学2021春2108刑法学(2)答案
  4. 一篇文章搞定css3 3d效果
  5. 前端学习(1378):express静态资源处理
  6. 数据库备份DBS商业化发布
  7. linux-所有者与所属组的修改
  8. 静能沉淀浮躁,过滤浅薄,调节精神。 静能解读生命的安宁,拥有了然于心的平静。...
  9. [C++] - C++11 多线程 - Mutex
  10. 《零基础入门学习Python》学习过程笔记【016列表,元组,字符串的转化及共用技巧】...
  11. linux系统与命令
  12. python检测局域网IP
  13. 10行代码解析krc歌词文件
  14. lgg7刷机包下载_LGG7One刷机包
  15. java碳纤维山地车车架咋样_自行车碳纤维车架值得买吗?它有哪些优缺点?老骑手来给你答案!...
  16. 推荐系统(十一) 2021-2022年工业界推荐算法实践经验汇总
  17. 7-204 毕达哥拉斯三元组
  18. 创建一个 Spring Boot 项目的4种方法,你会几种?- 第396篇
  19. 前端鼠标触碰实现遮罩方法
  20. 阿里妈妈获得商品详情 API 返回值说明

热门文章

  1. 三国群雄传ol服务器 修改,三国群雄传四大兵营进阶改造攻略详解
  2. 一,这份333页关于性能优化知识点的PDF你不能不看
  3. 纯CSS3实现旋转风车
  4. 河南计算机与科学研究生招生,2021年河南理工大学计算机科学与技术(081200)硕士研究生招生信息_考研招生计划和招生人数 - 学途吧...
  5. 一键部署天猫精灵高分电影推荐语音技能
  6. 国家宝藏第三季开篇神级文案
  7. JAVA 中 Redis与ehcache对比与使用
  8. 抗衰老秘方盘点:枸杞子可养肝防衰老
  9. IT人士常喝点菊花茶泡枸杞
  10. CUDA C++ Programming Guide——编程模型