经纬度计算距离

摘要:
/////经度1//纬度1//经度2//纬度2//距离publicstaticdoubleDistance{//使用Haverne公式计算球体上两点之间的距离。varh=HaverSin+Math.Cos*Mat h.Cos*HaverSin;vardistance=2*EARTH_ RADIUS*Math.Asin;returndistance;}//////将角度转换为弧度。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace HarvenSin
{
class Program
{
/// <summary>
/// 根据经纬度,计算2个点之间的距离。
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
//39.94607,116.32793 31.24063,121.42575
Console.WriteLine(Distance(39.94607, 116.32793, 31.24063, 121.42575));

}


public static double HaverSin(double theta)
{
var v = Math.Sin(theta / 2);
return v * v;
}


static double EARTH_RADIUS = 6371.0;//km 地球半径 平均值,千米

/// <summary>
/// 给定的经度1,纬度1;经度2,纬度2. 计算2个经纬度之间的距离。
/// </summary>
/// <param name="lat1">经度1</param>
/// <param name="lon1">纬度1</param>
/// <param name="lat2">经度2</param>
/// <param name="lon2">纬度2</param>
/// <returns>距离(公里、千米)</returns>
public static double Distance(double lat1,double lon1, double lat2,double lon2)
{
//用haversine公式计算球面两点间的距离。
//经纬度转换成弧度
lat1 = ConvertDegreesToRadians(lat1);
lon1 = ConvertDegreesToRadians(lon1);
lat2 = ConvertDegreesToRadians(lat2);
lon2 = ConvertDegreesToRadians(lon2);

//差值
var vLon = Math.Abs(lon1 - lon2);
var vLat = Math.Abs(lat1 - lat2);

//h is the great circle distance in radians, great circle就是一个球体上的切面,它的圆心即是球心的一个周长最大的圆。
var h = HaverSin(vLat) + Math.Cos(lat1) * Math.Cos(lat2) * HaverSin(vLon);

var distance = 2 * EARTH_RADIUS * Math.Asin(Math.Sqrt(h));

return distance;
}

/// <summary>
/// 将角度换算为弧度。
/// </summary>
/// <param name="degrees">角度</param>
/// <returns>弧度</returns>
public static double ConvertDegreesToRadians(double degrees)
{
return degrees * Math.PI / 180;
}

public static double ConvertRadiansToDegrees(double radian)
{
return radian * 180.0 / Math.PI;
}

}
}

引用

https://www.cnblogs.com/zhoug2020/p/8993750.html

免责声明:文章转载自《经纬度计算距离》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇redis集群学习软键盘弹起,导致底部被顶上去下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android 使用GPS定位获取经纬度的方法

移动 是手机与手持设备的最大特点,可以通过Eclipse的DDMS视图,模拟设备的位置变化,改变经纬度后,点击send,然后运行程序,在应用程序中,动态的获取设备位置,然后显示当前的位置信息。 获取位置信息分为三步: 1. 添加系统权限,来支持对LBS硬件的访问 < uses-permission android:name="android.perm...

百度地图经纬度转换

 一、使用公式进行转换 优点:转换快 缺点:会有一定偏差 查看公式 二、使用百度地图自带的convertor转换 优点:偏差小 缺点:网络延时,转换慢 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/htm...

火星坐标、百度坐标、WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版

原文地址http://fengwc.cn/article/火星坐标、百度坐标、WGS-84坐标相互转换及墨卡托投影坐标转经纬度/火星坐标的真实名称应该是GCJ-02坐标。最近在知乎上看到关于火星坐标的话题都是充满争议的(点我跳转到知乎),感兴趣的同学可以去详细了解一下。基本上所有的国内的电子地图采用的都是火星坐标系甚至Google地图中国部分都特意为中国政...

已知用经纬度表示的两点,求两点之间的直线距离

最近在做一个用GDI+绘图,用到了对经纬度的处理,以下是将经纬度换算成直线距离的代码,留着以后有用,免得又忘记了。  private const double EARTH_RADIUS = 6378137;//地球半径,单位米         private double rad(double d)         {             return...

iOS开发:通过经纬度获得城市、省份等信息

  iOS系统自带定位,用CLLocationManager就可以轻松的实现定位的操作,获得的是一组经纬度,当然,也可以根据给出的经纬度获取相应的省份、城市、街道等信息,下面就看一个根据经纬度获得城市的demo:         因为获取经纬度需要CLLocationManager类,而这个类包含在CoreLocation框架中,获取城市信息需要mapKi...

地理空间距离计算及优化(依据两个点经纬度计算距离)

1.地理空间距离计算面临的挑战 打开美团app。无论是筛选团购还是筛选商家,默认的排序项都是“离我近期”或者“智能排序”(例如以下图所看到的)。 无论是“离我近期”还是“智能排序”。都涉及到计算用户位置与各个团购单子或者商家的距离(注:在智能排序中距离作为一个重要的參数參与排序打分)。以筛选商家为例。北京地区有5~6w个POI(本文将商家称之为POI)...