通过两个位置的经纬度坐标计算距离(C#版本)
/// <summary>
/// 通过地图上的两个坐标计算距离(C#版本)
/// Add by 成长的小猪(Jason.Song) on 2017/11/01
/// http://blog.csdn.net/jasonsong2008
/// </summary>
public class MapHelper
{
/// <summary>
/// 地球半径
/// </summary>
private const double EarthRadius = 6378.137; /// <summary>
/// 经纬度转化成弧度
/// Add by 成长的小猪(Jason.Song) on 2017/11/01
/// http://blog.csdn.net/jasonsong2008
/// </summary>
/// <param name="d"></param>
/// <returns></returns>
private static double Rad(double d)
{
return d * Math.PI / 180d;
} /// <summary>
/// 计算两个坐标点之间的距离
/// Add by 成长的小猪(Jason.Song) on 2017/11/01
/// http://blog.csdn.net/jasonsong2008
/// </summary>
/// <param name="firstLatitude">第一个坐标的纬度</param>
/// <param name="firstLongitude">第一个坐标的经度</param>
/// <param name="secondLatitude">第二个坐标的纬度</param>
/// <param name="secondLongitude">第二个坐标的经度</param>
/// <returns>返回两点之间的距离,单位:公里/千米</returns>
public static double GetDistance(double firstLatitude, double firstLongitude, double secondLatitude, double secondLongitude)
{
var firstRadLat = Rad(firstLatitude);
var firstRadLng = Rad(firstLongitude);
var secondRadLat = Rad(secondLatitude);
var secondRadLng = Rad(secondLongitude); var a = firstRadLat - secondRadLat;
var b = firstRadLng - secondRadLng;
var cal = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a / 2), 2) + Math.Cos(firstRadLat)
* Math.Cos(secondRadLat) * Math.Pow(Math.Sin(b / 2), 2))) * EarthRadius;
var result = Math.Round(cal * 10000) / 10000;
return result;
} /// <summary>
/// 计算两个坐标点之间的距离
/// Add by 成长的小猪(Jason.Song) on 2017/11/01
/// http://blog.csdn.net/jasonsong2008
/// </summary>
/// <param name="firstPoint">第一个坐标点的(纬度,经度)</param>
/// <param name="secondPoint">第二个坐标点的(纬度,经度)</param>
/// <returns>返回两点之间的距离,单位:公里/千米</returns>
public static double GetPointDistance(string firstPoint, string secondPoint)
{
var firstArray = firstPoint.Split(',');
var secondArray = secondPoint.Split(',');
var firstLatitude = Convert.ToDouble(firstArray[0].Trim());
var firstLongitude = Convert.ToDouble(firstArray[1].Trim());
var secondLatitude = Convert.ToDouble(secondArray[0].Trim());
var secondLongitude = Convert.ToDouble(secondArray[1].Trim());
return GetDistance(firstLatitude, firstLongitude, secondLatitude, secondLongitude);
} }
调用方法:
/// <summary>
/// 文章来源于成长的小猪
/// http://blog.csdn.net/jasonsong2008
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
//第一种调用方法
var result = MapHelper.GetDistance(31.2553210000, 121.4620020000, 31.2005470000, 121.3269970000); //第二种调用方法
result = MapHelper.GetPointDistance("31.2553210000,121.4620020000", "31.2005470000,121.3269970000");
}
通过两个位置的经纬度坐标计算距离(C#版本)的更多相关文章
- 通过经纬度坐标计算距离的方法(经纬度距离计算)ZZ
通过经纬度坐标计算距离的方法(经纬度距离计算) 最近在网上搜索“通过经纬度坐标计算距离的方法”,发现网上大部分都是如下的代码: #define PI 3.14159265 static double ...
- 根据经纬度坐标计算距离-python
一.两个坐标之间距离计算 参考链接: python实现 1.Python 根据地址获取经纬度及求距离 2.python利用地图两个点的经纬度计算两点间距离 LBS 球面距离公式 美团app筛选“离我最 ...
- Java 根据两个经纬度坐标计算距离
public class Distance{ private static final double EARTH_RADIUS = 6378137; private static double ...
- java 根据经纬度坐标计算两点的距离算法
/** * @Desc 根据经纬度坐标计算两点的距离算法<br> * @Author yangzhenlong <br> * @Data 2018/5/9 18:38 */ p ...
- PHP计算两个已知经纬度之间的距离
/** *求两个已知经纬度之间的距离,单位为千米 *@param lng1,lng2 经度 *@param lat1,lat2 纬度 *@return float 距离,单位千米 **/ privat ...
- 用墨卡托和GPS坐标计算距离时误差测试
iOS墨卡托和GPS坐标计算距离时误差测试,测试结果: 墨卡托和gps坐标来回转换没有误差. 墨卡托坐标计算出的距离比gps坐标计算出的距离大,100/92*100 = 108米,每100米多算出8米 ...
- Android给定坐标计算距离
给定两点的经纬度.计算两点之间的距离.这里要注意经纬度一定要依照顺序填写 1. 利用android中的工具获得,单位是米 float[] results=new float[1]; Location. ...
- PHP 根据两个坐标计算距离 圆形围栏的计算
可以应用于圆形电子围栏入 出围栏计算 圆形电子围栏的计算方式是: 根据圆心坐标和当前检查的坐标进行距离计算,如果距离长度超出围栏的半径,则判定为出围栏,反之是在围栏之内 <?php /** * ...
- 根据坐标计算距离(mysql函数)
CREATE DEFINER=`root`@`localhost` FUNCTION `getDistance`(lng1 ) BEGIN DECLARE result double; DECLARE ...
随机推荐
- Docker安装mysql镜像并进行主从配置
Docker安装mysql镜像并进行主从配置 1.下载需要的mysql版本镜像 docker pull mysql:5.6 2.启动mysql服务实例(基本启动) #启动主mysql docker r ...
- 433MHZ SPI模块使用心得
最近使用了433MHZ的模块进行了一个通讯项目,选用的是SX1208模块,对接了RTOS和Linux两个操作系统,使用心得如下: 1. 首先要拿来datasheet看一遍,通揽一下它的功能.可以得到一 ...
- css3中的陌生词汇
Transform transform属性是静态属性,一旦写到style里面,将会直接显示作用,无任何变化过程.transform的主要用途是用来做元素的特殊变形. 关于图形变形的基础条件当中的原点设 ...
- Kafka 性能篇:为何 Kafka 这么快?
『码哥』的 Redis 系列文章有一篇讲透了 Redis 的性能优化 --<Redis 核心篇:唯快不破的秘密>.深入地从 IO.线程.数据结构.编码等方面剖析了 Redis " ...
- CF643F-Bears and Juice【组合数学】
正题 题目链接:https://www.luogu.com.cn/problem/CF643F 题目大意 题目有点奇怪就直接放翻译了 有 \(n\) 只熊和若干桶果汁和恰好一桶酒,每一天每只熊会选择一 ...
- kubelet源码分析——kubelet简介与启动
kubelet是k8s集群中一个组件,其作为一个agent的角色分布在各个节点上,无论是master还是worker,功能繁多,逻辑复杂.主要功能有 节点状态同步:kublet给api-server同 ...
- 【vue】两个页面间传参 - props
目录 Step1 设置可以 props 传递数据 Step2 跳转前页面中传递数据 Step3 跳转后的页面接收数据 从 A 页面跳转到 B 页面, 参数/数据通过 props 传递到 B 页面,这种 ...
- 【C++ Primer Plus】编程练习答案——第7章
1 double ch7_1_harmonicaverage(double a, double b) { 2 return 2 / (1 / a + 1 / b); 3 } 4 5 void ch7_ ...
- js正则格式化日期时间自动补0
原文 js正则格式化日期时间自动补0 背景 时间日期格式化的需求很常见,也有很多工具类转换方法,比如需要将2022-3-4这种日期格式转化为2022-03-04,也就是实现个位数月份或天数日期自动前置 ...
- Lamport时间戳论文笔记
本文主要参考文献[1]完成. 声明:本人仅在博客园发表了本文章,笔名LightningStar,其他网站均为转载. 笔记 私以为,论文中作者的核心工作是为分布式系统建立了一种数学模型,并基于这种数学模 ...