[原创]求两个经纬度之间的距离

2023-05-16

经常要根据两个经纬度值,求它们之间的距离。

delphi实现代码:

ContractedBlock.gif ExpandedBlockStart.gif 求两个经纬度之间的距离
function Distince(const lon1,lat1,lon2,lat2:double):double;
var
  alpha1,alpha2,beta1,beta2:double;
  dist : double;
begin
  Result := 0.0;
  alpha1 := (lon1 / 180* Pi;
  alpha2 := (lon2 / 180* Pi;
  beta1 := (lat1 / 180* Pi;
  beta2 := (lat2 / 180* Pi;
  Result :=  (2 * ArcSin(Sqrt(Sin((beta1 - beta2) / 2* Sin((beta1 - beta2) / 2+
           Cos(beta1) * Cos(beta2) * Sin((alpha1 - alpha2) / 2* Sin((alpha1 - alpha2) / 2)))) * 6371000;

end;

另一种实现方式:

ContractedBlock.gif ExpandedBlockStart.gif Code
function GetDistance(d_x1, d_y1, d_x2, d_y2: Single): Double;
const
  math_pi = 3.1415926535897932384626433832795;
var
  mDistance: double;
  Lon1,Lon2,Lat1,Lat2,LonDist,LatDist: Double;
  A,C,D,E,U: Double;
begin
  mDistance := 0;
  Lon1 := d_x1 * math_pi / 180.0 ;
  Lon2 := d_x2 * math_pi / 180.0 ;
  Lat1 := d_y1 * math_pi / 180.0 ;
  Lat2 := d_y2 * math_pi / 180.0 ;

  
//计算经差及纬差
  LonDist := Lon1-Lon2 ;
  LatDist := Lat1-Lat2 ;

  
//以FEET为单位,计算两点之间的距离
  A := sin( LatDist / 2.0 ) * sin( LatDist / 2.0+ cos(Lat1) * cos( Lat2 ) * sin(LonDist /2.0)*sin(LonDist /2.0);

  
if sqrt(A) > 1 then
    E := 1.0
  
else
    E := sqrt(A);

  C := 2 * arctan(E/sqrt(1-E*E));
  D := (3963 - 13 * sin((Lat1 + Lat2) / 2)) * C;
  mDistance := D * 5280 ;//距离,单位为FEET

  
//将单位FEET转换为公里
  mDistance := mDistance * (3048.0/10000000.0);

  U := 10.0*10.0*10.0 ;
  mDistance := int(mDistance*U+(5.0/10.0))/U ;

  Result := mDistance ;
  Result := mDistance * 1000;  //转换成米
end;

 

JavaScript实现方式

 

function distance(x1,y1,x2,y2) {

  var R = 6371; // earth's mean radius in km

  var lon1 = x1* Math.PI / 180;

  var lat1 = y1 * Math.PI / 180;

  var lon2 = x2 * Math.PI / 180;

  var lat2 = y2 * Math.PI / 180;

  var deltaLat = lat1 - lat2

  var deltaLon = lon1 - lon2

  var step1 = Math.pow(Math.sin(deltaLat/2), 2) + Math.cos(lat2) * Math.cos(lat1) * Math.pow(Math.sin(deltaLon/2), 2);

  var step2 = 2 * Math.atan2(Math.sqrt(step1), Math.sqrt(1 - step1));

  alert("两点间距离是:" + step2 * R);

 

SQL Server实现代码 :

-- =============================================

-- Author: wanghongsheng

-- Create date: 2009.11.07

-- Description: 计算两个经纬度之间的直线距离

-- =============================================

alter FUNCTION GetDistance 

(

@d_x1 float,

@d_y1 float,

    @d_x2 float,

    @d_y2 float

)

RETURNS float

AS

BEGIN

declare @mDistance float,@Lon1 float,@Lon2 float,@Lat1 float,@Lat2 float,@LonDist float,@LatDist float

    declare @A float ,@C float ,@D float ,@E float ,@U float

    set @mDistance = 0

    set @Lon1 = @d_x1 * pi() / 180.0

    set @Lon2 = @d_x2 * pi() / 180.0

    set @Lat1 = @d_y1 * pi() / 180.0

    set @Lat2 = @d_y2 * pi() / 180.0


    -- 计算经差与纬差

    set @LonDist = @Lon1 - @Lon2

    set @LatDist = @Lat1 - @Lat2


    -- 以FEET为单位,计算两点之间的距离

    set @A = sin( @LatDist / 2.0 ) * sin( @LatDist / 2.0) + cos(@Lat1) * cos( @Lat2 ) * sin(@LonDist /2.0)*sin(@LonDist /2.0)

    if sqrt(@A) > 1 

    begin

      set @E = 1.0

    end

    else

      set @E = sqrt(@A)


    set @C = 2 * atan(@E/sqrt(1-(@E*@E)));

    set @D = (3963 - 13 * sin((@Lat1 + @Lat2) / 2)) * @C

    set @mDistance = @D * 5280  -- 距离单位为FEET


    --将单位FEET转换为公里

    set @mDistance = @mDistance * (3048.0/10000000.0)

    set @U = 10.0*10.0*10.0 

    set @mDistance = ceiling(@mDistance*@U+(5.0/10.0))/@U 

    -- 返回的结果,距离单位是公里

    Return (@mDistance) 

END

GO 

 

 

 

 

 

转载于:https://www.cnblogs.com/gis_gps/archive/2008/12/11/1352956.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[原创]求两个经纬度之间的距离 的相关文章

  • STM32-正弦波可调(50HZ~20KHZ可调、峰峰值0~3.3V可调)

    1 原理 通过定时器每隔一段时间触发一次DAC转换 然后通过DMA发送正玄波码表值给DAC 当需要改变频率HZ 时 只需要修改定时器频率 即可 最高只能达到20KHz 当需要改变 正玄波的正峰峰值 负峰峰值 时 只需要修改正玄波码表 即可
  • .Net ASP.NET 打开指定文件夹

    比如要打开指定的文件夹 xff0c 而不是弹出对话框 System Diagnostics Process Start 64 34 D 34 这样就打开了D盘 和正常打开D盘是一样的
  • 几种更新(Update语句)查询的方法

    正 文 数据库更新就一种方法Update xff0c 其标准格式 xff1a Update 表名 set 字段 61 值 where 条件 只是依据数据的来源不同 xff0c 还是有所差别的 xff1a 1 从外部输入 这样的比較简单 例
  • mysql8.0.13 cmd 登陆报错

    今天打算配置一个php运行环境 xff0c 将php mysql apache依次下载好 xff0c 我首先安装的是mysql xff0c 安装过程很顺利 xff0c 在cmd输入mysql uroot p的时候 xff0c 我靠 xff0
  • vue移动端的自适应布局的两种解决方案

    目标 前端开发移动端及H5时候 xff0c 不需要再关心移动设备的大小 xff0c 只需要按照固定 设计稿的px值布局 基础知识 dpr xff08 设备像素比 xff09 css的像素px不等于设备像素 分辨率 各种值 xff0c css
  • 对单片机数码管显示段选位选的理解

    在51单片机的数码管的应用开发中一些小的细节还是应该注意到的 其中位选信号应该在段选之前打开 xff0c 下面是一段示例代码 xff08 我用的是国信长天开发板 xff09 xff1a include lt reg51 h gt 包含51单
  • http请求中get请求可以缓存和post请求不可缓存

    2019独角兽企业重金招聘Python工程师标准 gt gt gt GET请求后退 刷新无害 xff0c POST后退 刷新则会导致重新提交数据 GET书签可被收藏 POST为书签不可收藏 GET能被缓存 POST不能被缓存 GET编码类型
  • VMWare中虚拟机(CentOS)如何开启虚拟化功能

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 需求说明 xff1a VMware版本如下示 xff0c 在此VMware上创建了虚拟机并安装了CentOS6 5系统 现在需要在此客户机 xff08 VM xff09 上
  • C# 常见的错误类型

    Exception 应用程序执行期间发生错误 SystemException 系统异常 所有Exception的基类 ArgumentException 当方法提供的任意一个参数无效时 xff0c 引发此异常 ArithmeticExcep
  • 字典树 trie树 学习

    一字典树 字典树 xff0c 又称单词查找树 xff0c Trie树 xff0c 是一种树形结构 xff0c 哈希表的一个变种 二 性质 根节点不包含字符 xff0c 除根节点以外的每一个节点都只包含一个字符 xff1b 从根节点到某一节点
  • 《Linux 内核完全注释》阅读笔记

    在阅读源代码之前 xff0c 有必要对Linux内核的体系结构 源代码的目录结构有个宏观地了解 xff0c Linux内核完全注释 非常详细地介绍了这方面的内容 xff0c 所以 这里仅仅进行概述性的讨论 xff0c 以便让所有的笔记构成一
  • 抽象工厂模式(C++)

    define win 0 define mac 1 include lt iostream gt using namespace std class button public button virtual button virtual v
  • 大智慧显示切换服务器,大智慧怎么改界面 大智慧改界面教程

    很多软件的界面都可以根据每个用户不同的需求进行定制 xff0c 大智慧炒股软件也是如此 在大智慧的版面设计功能中 xff0c 用户可以将几十种不同功能的窗口自由组合摆放 xff0c 直到配置出满意的界面 大智慧的版面设计可以建立分析功能窗口
  • threadx将linux作为进程,如何在Windows操作系统上模拟ThreadX应用程序

    是的 xff0c 你可以的 xff0c 如果你愿意投入的工作 首先观察到每个线程系统调用都有一个等价的posix调用 xff0c 除了事件 因此 xff0c 您的线程程序可以使用posix线程 xff0c 互斥锁等作为单个进程运行 事件可以
  • STL"源码"剖析-重点知识总结

    STL是C 43 43 重要的组件之一 xff0c 大学时看过 STL源码剖析 这本书 xff0c 这几天复习了一下 xff0c 总结出以下LZ认为比较重要的知识点 xff0c 内容有点略多 1 STL概述 STL提供六大组件 xff0c
  • inter处理器(CPU)的分类

    对于台式机和笔记本电脑 xff0c 最常见的是酷睿 奔腾和赛扬系列 xff0c 同代产品中他们的性能依次减弱 xff0c 酷睿最强 xff0c 奔腾次之 xff0c 赛扬最弱 xff08 酷睿 gt 奔腾 gt 赛扬 xff09 对于智能手
  • 利用iftop查看网络带宽使用情况

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 利用iftop查看服务器实时流量 yum install y gcc flex byacc libpcap ncurses ncurses devel libpcap de
  • matlab程序改为m文件名,在MATLAB中,程序文件的扩展名为.m,所以程序文件也称为M文件...

    在MATLAB中 xff0c 程序文件的扩展名为 m xff0c 所以程序文件也称为M文件 答 xff1a 磷酸果糖激酶 2催化6 磷酸果糖生成的产物是 答 xff1a 2 xff0c 6 二磷酸果糖 人类行为的经济学分析 的作者是 答 x
  • 学习ASP.NET Core Razor 编程系列十八——并发解决方案

    学习ASP NET Core Razor 编程系列目录 学习ASP NET Core Razor 编程系列一 学习ASP NET Core Razor 编程系列二 添加一个实体 学习ASP NET Core Razor 编程系列三 创建数据

随机推荐

  • Kubernetes运行监控-使用Helm快速部署Prometheus和Grafana

    2019独角兽企业重金招聘Python工程师标准 gt gt gt Kubernetes运行监控 使用Helm快速部署Prometheus和Grafana 使用Helm快速部署Pormetheus和Grafana非常方便 xff0c 很多手
  • linux交叉编译c++

    下载g 43 43 交叉编译工具链 sudo apt install g 43 43 arm linux gnueabihf 测试程序 include lt iostream gt using namespace std int main
  • 因子分析factor analysis_spss运用_python建模(推荐AAA)

    sklearn实战 乳腺癌细胞数据挖掘 xff08 博主亲自录制视频 xff09 https study 163 com course introduction htm courseId 61 1005269003 amp utm camp
  • 清除ListBox的列表项(删除所有项目)

    如何清除ListBox的列表项 删除所有项目 xff0c 今天开发程序时 xff0c 有尝试使用此功能 一开始并不是很顺利 循环所有item去做remove时 xff0c 需要执行两次才可以完成清除 debug进行步进跟踪 xff0c 发现
  • SVN查看所有日志提交记录

    1 svn默认显示最近一周的文件提交和修改记录 xff0c 怎么查看更长时间的日志记录呢 xff1f 2 TortoiseSVN 3 点击show all 或者NEXT 100 xff0c 就可显示更长时间的文件提交记录
  • Nearest neighbor graph | 近邻图

    最近在开发一套自己的单细胞分析方法 xff0c 所以copy paste事业有所停顿 实例 xff1a R eNetIt v0 1 1 data ralu site Saturated spatial graph sat graph lt
  • 手把手教你实现一个简单的编译器

    手把手教你实现一个简单的编译器 1 概述 今天我们将学习开发一个编译器 xff0c 但是呢 xff0c 这个编译器并不是说什么都能都编译 xff0c 它只是一个超级小的编译器 xff0c 主要用于说明编译器的一些基本的原理 我们这个编译器可
  • 查看struts版本号

    2019独角兽企业重金招聘Python工程师标准 gt gt gt struts版本信息查看方法 xff1a 查看lib中的 struts2 core jar META INF MANIFEST MF 找到Implementation Ve
  • R语言读取大数据 data.table包 fread函数

    gt setwd 34 D R Tardy 34 gt library data table data table 1 9 6 For help type data table or https github com Rdatatable
  • Android中读取文本文件中内容的方法

    这几天在项目开发中 xff0c 要读取文本文件中内容的 xff0c 因此写了个读取文本文件中内容的方法 xff0c 代码如下 xff1a 读取文本文件中的内容 public static String ReadTxtFile String
  • Error creating bean with name 'objectMapperConfigurer' defined in class path resource

    转载于 https www cnblogs com qianjinyan p 10879065 html
  • C#实现Windows 服务的制作安装和删除[转]

    关于C 实现windows服务的制作与安装还有删除 运行Visual Studio NET xff0c 建立一个C 的Windows服务项目 主程序代码 xff1a 以下是引用片段 xff1a Code using System using
  • 相机与IMU联合标定

    相机与IMU联合标定 1 imu utils 标定IMU的内参1 1 安装环境1 2 录制IMU数据集 2 kalibr 标定工具2 1 安装2 2 校准相机的内外参2 3 校准相机与IMU外参 总结参考资料 1 imu utils标定IM
  • matlab练习程序(寻找凸包,Graham扫描法)

    我不太清楚这个凸包在图像处理中到底会怎样的运用 xff0c 因为这个好像更多的是计算几何或是图形学里面的东西 不过作为一个算法 xff0c 我感觉还是有必要研究一下的 我主要的参考资料是 算法导论 的33 3和这个博客 代码在这里 xff0
  • 1

    stage 1 xff1a 尝试直接使用Adobe acrobat xff0c foxit阅读器 xff0c 以及CAJ等PDF阅读器 xff0c 尝试使用CAJ是因为CAJ有文字识别功能 xff0c 但是对于加密的文档 xff0c 依然是
  • Python自动化备份系统及网站

    随着目前IT迅猛的发展 xff0c 自动化运维对于Linux运维人员也越来越重要 xff0c 传统的运维方式靠大量的人力 xff0c 现在也逐渐转向自动化运维 xff0c 我们常见的跟自动化有关的软件有哪些呢 今天我们来简单列举一下 xff
  • AI 黑箱难题怎么破?基于神经网络模型的算法使机器学习透明化

    编者按 xff1a 人们可以训练人工智能 xff08 AI xff09 和机器人完成任务 xff0c 但整个过程在黑箱中运作 我们并不知道 AI 和机器人是如何决策的 一家名为 OptimizingMind 的初创公司想要解决这个问题 这篇
  • 技术面试介绍

    内容 xff1a 1 技术面试的形式 2 技术面试的大致环节 3 技术面试应具备的素质 4 技术面试的经验建议 参考 xff1a 剑指offer 第二版 第一章 Java程序员面试笔试宝典 第一章 第二章 1 技术面试的形式 技术面试大致上
  • 今天是 Java 诞生日,Java 24 岁了!

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 今天是 Java 诞生日 xff0c Java 今年 24 岁了 xff0c 比栈长还年轻 还有得搞 xff0c 别慌 xff01 作为一名Java语言的学习者 xff0c
  • [原创]求两个经纬度之间的距离

    经常要根据两个经纬度值 求它们之间的距离 delphi实现代码 xff1a 求两个经纬度之间的距离 function Distince const lon1 lat1 lon2 lat2 double double var alpha1 a