http://www.th2w.com/article/85

依据地图上的经纬度坐标计算某个点到多边形各边的距离

最近公司有一个需求:依据地图上的经纬度坐标计算某个点到多边形各边的距离。 主要原理:

  1. 依据当前点p和多边形相邻两点(pb, pe)组成三角形
  2. 由于是坐标系,比用海伦公式要好
  3. 用坐标向量差求得两点构成的线l与X坐标的余弦值平方()
  4. 依据点pb和pe计算出tan值,依据tan值计算出线l与p点纬度线的交集值
  5. 计算出p点到交集的距离,作为y轴向量差
  6. 依据余弦计算出直线距离

具体查看java实现代码:

package distance;import java.math.BigDecimal;public class Point {private BigDecimal x;private BigDecimal y;public Point (double y, double x) {this.x = new BigDecimal(x);this.y = new BigDecimal(y);}public Point (BigDecimal y, BigDecimal x) {this.x = x;this.y = y;}/*** 当前点和顶点之间构成的余弦值平方* * @param p* @return*/private BigDecimal cos2(Point p) {BigDecimal vector2 = (p.x.subtract(x).pow(2)).add(p.y.subtract(y).pow(2));return (p.x.subtract(x).pow(2)).divide(vector2, 11, BigDecimal.ROUND_HALF_DOWN);}/*** 当前点到顶点之间的Y向量差* * @param p* @return*/private BigDecimal toY(Point p) {return p.y.subtract(y);}/*** 当前点到顶点之间的x向量差* * @param p* @return*/private BigDecimal toX(Point p) {return p.x.subtract(x);}/*** 1度多少米* @return*/private BigDecimal itude1() {return new BigDecimal(Math.cos(y.doubleValue())).multiply(new BigDecimal(111194.92474777778)).abs();}/*** 当前顶点到两点之间的距离* * @param pb 起始点* @param pe 结束点* @return*/public double distance(Point pb, Point pe) {if(pe.toX(pb).doubleValue() == 0) {BigDecimal dist2 = pe.toY(this).pow(2);return itude1().multiply(new BigDecimal(Math.sqrt(dist2.doubleValue()))).doubleValue();} else {BigDecimal vector = pe.toY(pb).multiply(toX(pb)).divide(pe.toX(pb), 11, BigDecimal.ROUND_HALF_DOWN).subtract(toY(pb));BigDecimal dist2 = pb.cos2(pe).multiply(vector.pow(2));return itude1().multiply(new BigDecimal(Math.sqrt(dist2.doubleValue()))).doubleValue();}} public static void main(String[] args) {// 地图上画一个多边形Point[] points = {new Point(40.049409, 116.300804), new Point(40.052924, 116.309191), new Point(40.054781, 116.307524), new Point(40.052312, 116.300339)};// 地图多边形内随机某一点Point p = new Point(40.050740, 116.302464);// 当前点到多边形各边的距离for (int i = 0; i < points.length; i++) {System.out.println("distance=" + p.distance(points[i], points[i == points.length - 1 ? 0 : i+1]) + "米");}}
}

依据地图上的经纬度坐标计算某个点到多边形各边的距离相关推荐

  1. 点击获取GOOGLE MAP地图上的经纬度坐标的方法

    GOOGLE  map api让我们可以在自己的网站上显示GOOGLE MAP 那样强大的功能,只要你编程够牛逼,数据库数据多.你的GOOGLE MAP会比GOOGLE 的MAP更牛.万丈高楼平地起, ...

  2. 计算坐标点的距离计算机公式,使用经纬度坐标计算多个点之间距离的Excel公式...

    我目前正在制定一个带有两个表格的模拟数据库架构:Booking和Waypoint.使用经纬度坐标计算多个点之间距离的Excel公式 预定存储出租车预订信息. 航点存储该拾取和在行程中脱落点,与纬度经度 ...

  3. python学习-108-根据经纬度坐标计算距离

    前言: 根据经纬度坐标计算两点距离,并不能直接使用欧氏距离,因为经纬度是在曲面上的要计算弧度的影响.因此本文根据经纬度坐标公式代码实现. 参考链接: https://blog.csdn.net/xie ...

  4. 给定经纬度计算距离_通过经纬度坐标计算距离的方法(经纬度距离计算)ZZ

    通过经纬度坐标计算距离的方法(经纬度距离计算) 最近在网上搜索"通过经纬度坐标计算距离的方法",发现网上大部分都是如下的代码: #define PI 3.14159265 stat ...

  5. 通过经纬度坐标计算距离的方法(实为通过一个经纬度和距离角度求另一个经纬度)

    转自:https://www.cnblogs.com/softfair/p/lat_lon_distance_bearing_new_lat_lon.html 通过经纬度坐标计算距离的方法(经纬度距离 ...

  6. 通过经纬度坐标计算距离的方法(经纬度距离计算)

    通过经纬度坐标计算距离的方法(经纬度距离计算) 最近在网上搜索"通过经纬度坐标计算距离的方法",发现网上大部分都是如下的代码: #define PI 3.14159265 stat ...

  7. 已知点的经纬度坐标计算/读取DEM高程信息/海拔高度

    已知点的经纬度坐标计算/读取DEM高程信息/海拔高度 思路 环境 依赖 安装GDAL 安装依赖包 测试GDAL 数据依赖 python代码 参考 思路 实现条件 1.GDAL库 2.DEM数据 开发语 ...

  8. 根据经纬度坐标计算实际距离

    double  hypot( double  x,  double  y)  ... {       return sqrt(x * x + y * y); } double  distance( d ...

  9. 高德地图定位传值经纬度坐标为null,null

    高德地图定位传值经纬度坐标为null,null 因为传null导致切割字符串时崩溃,所以要加上非空判断 if (amapLocation.getLatitude() != 0 && a ...

最新文章

  1. web开发中目录路径问题的解决
  2. window和linux下遍历目录的比较
  3. 流程控制 - PHP手册笔记
  4. python的心得体会200字_python_学习心得
  5. JavaWeb课程复习资料(九)——删除功能
  6. Android10创建文件Permission denied 失败
  7. pivot 与 unpivot 函数是SQL05新提供的2个函数
  8. USACO 6.3 章节 你对搜索和剪枝一无所知QAQ
  9. 统计学基础学习笔记:正态分布
  10. (12)ISE14.7仿真流程(FPGA不积跬步101)
  11. python全栈 操作系统
  12. Scala的Tuple元素个数的限制问题
  13. ZOJ Problem Set - 1292 Integer Inquiry
  14. 机器学习笔记(二十一):决策边界
  15. Keras中文文档 评估标准Metrics
  16. 如何将本地项目上传到码云
  17. 7时过2小时是几时_一个时辰等于几个小时
  18. 《Java并发编程的艺术》读书笔记 - 第八章 - Java中的并发工具类
  19. 博主已开启评论精选什么意思_双十一前夕,小红书砸掉了博主的饭碗
  20. SAP ABAP SD常用函数或BAPI

热门文章

  1. MyBatis 特殊字符处理
  2. 中国移动IM-飞信-0802上线新版本 试用手记
  3. ecshop 标签使用 非常好的例子
  4. 用Python创建漂亮的交互式可视化效果
  5. leetcode 767. 重构字符串(贪心算法)
  6. css注释_CSS注释示例–如何注释CSS
  7. assign复制对象_JavaScript标准对象:assign,values,hasOwnProperty和getOwnPropertyNames方法介绍...
  8. 异步解耦_如何使用异步生成器解耦业务逻辑
  9. 如何使用ArchUnit测试Java项目的体系结构
  10. Spring.net的一个小例子