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

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

可以通过下列式子计算两点之间的夹角。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;
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值