如何通过经纬度粗略计算地球两点之间的距离?直接上代码

时间:2021-09-19 19:51:56

通过两点的经纬度,就可以知道两点之间大致的夹角是多少度(相对地心来说)。这个可以通过三角函数大致求得,当然这样求出来的角度不是很准,但足够用了。

可以通过下列式子计算两点之间的夹角。x1,y1为第一个点的经纬度,x2,y2为第二个点的经纬度。(注意东经为正,西经为负,北纬为正,南纬为负,格式为小数形式,如果原始数据没有分正负,需要自己修改后才可以带入函数)。
Math.Sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))
既然已经求出两点的夹角,就可以通过地球半径大致求出两点的直线距离。(这种方法只适合较短距离,一般500km以内较为准确)

下面是方法:

  //输入 坐标1的经度和纬度 坐标2 的经度和纬度 格式 小数
//返回 结果 单位米
//如坐标1经度:113.1051555186082 纬度:36.166498515566445
// 坐标2经度:113.1048121958543 纬度:36.16655481496116
//输入:
//113.1051555186082
//36.166498515566445
//113.1048121958543
//36.16655481496116
//返回结果 38.6856299051866米
double JingweiduToLength_m(double x1, double y1, double x2, double y2)//经纬度转距离 结果单位米
{
double juli = 0;
juli = Math.Sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))/180*Math.PI*6300000;
return juli;
}


c#控制台程序为:

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

namespace 根据经纬度计算距离csharp
{
class Program
{
static void Main(string[] args)
{
while(true)
{


double x1, y1, x2, y2;
Console.WriteLine("请输入两点经纬度 格式 23.0130表示23.0130°");
x1 = Convert.ToDouble(Console.ReadLine());
y1 = Convert.ToDouble(Console.ReadLine());
x2 = Convert.ToDouble(Console.ReadLine());
y2 = Convert.ToDouble(Console.ReadLine());
//Console.WriteLine(x1+x2+y1+y2);
Console.WriteLine("距离为:"+ JingweiduToLength_m(x1, y1, x2, y2));
Console.ReadLine();
}

}
//输入 坐标1的经度和纬度 坐标2 的经度和纬度 格式 小数
//返回 结果 单位米
//如坐标1经度:113.1051555186082 纬度:36.166498515566445
// 坐标2经度:113.1048121958543 纬度:36.16655481496116
//输入:
//113.1051555186082
//36.166498515566445
//113.1048121958543
//36.16655481496116
//返回结果 38.6856299051866米
static double JingweiduToLength_m(double x1, double y1, double x2, double y2)//经纬度转距离 结果单位米
{
double juli = 0;
juli = Math.Sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))/180*Math.PI*6300000;
return juli;
}
}
}