C#通过经纬度计算2个点之间距离的实现代码

计算两个点之间的距离通常使用地理坐标系中的经纬度作为计算的基础。下面是C#实现经纬度计算距离的完整攻略:

步骤一:确定计算方法

在地图中,经纬度之间的直线距离可以使用大圆距离公式(Haversine formula)计算。该公式将两点之间的直线距离表示为球面距离,考虑地球的尺寸与弧度的转换,计算公式如下:

dist = 2R * arcsin(sqrt(sin2((lat2-lat1)/2) +cos(lat1)*cos(lat2)*sin2((lon2-lon1)/2)))

其中,dist表示两点之间的距离,R表示地球的半径,lat1、lat2、lon1、lon2分别表示两点的经纬度。

步骤二:用C#实现公式

要实现上述公式,我们可以首先在程序中定义地球半径的常量(单位:米),然后将两点的经纬度传入函数中进行计算并返回结果。

下面是一个C#代码示例,该示例计算两个点之间的距离(单位:米):

using System;

public class Location
{
    public double Latitude { get; set; } // 纬度
    public double Longitude { get; set; } // 经度
}

public static class GeoCalculator
{
    private const double EarthRadius = 6371000; // 地球半径,单位:米

    public static double GetDistance(Location l1, Location l2)
    {
        var dLat = ToRadian(l2.Latitude - l1.Latitude);
        var dLon = ToRadian(l2.Longitude - l1.Longitude);

        var lat1 = ToRadian(l1.Latitude);
        var lat2 = ToRadian(l2.Latitude);

        var a = Math.Sin(dLat / 2) * Math.Sin(dLat / 2) +
                Math.Sin(dLon / 2) * Math.Sin(dLon / 2) * Math.Cos(lat1) * Math.Cos(lat2);

        var c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));

        return EarthRadius * c;
    }

    private static double ToRadian(double val)
    {
        return (Math.PI / 180) * val;
    }
}

在上述示例代码中,我们首先定义了一个Location类,包含了经度和纬度两个属性。然后我们定义了一个GeoCalculator类,其中包含了一个GetDistance方法,该方法接受两个Location对象作为参数,并根据Haversine公式计算两者之间的距离,并返回结果。

值得注意的是,在该代码示例中,我们使用了ToRadian函数将角度转换为弧度。另外我们还定义了地球半径的常量EarthRadius(单位:米),使用该常量进行计算,可以得到两点之间的距离,单位为米。

下面是一个示例程序,展示如何使用GeoCalculator计算两点之间的距离:

using System;

public class Program
{
    public static void Main()
    {
        var l1 = new Location { Latitude = 39.9156, Longitude = 116.4074 }; // 北京市
        var l2 = new Location { Latitude = 31.2304, Longitude = 121.4737 }; // 上海市

        var distance = GeoCalculator.GetDistance(l1, l2);

        Console.WriteLine($"北京到上海的距离是{distance}米。");
    }
}

该示例程序使用GeoCalculator类计算了北京市和上海市之间的距离,计算结果为近唐一个城市中心到附近一个城市中心的距离(单位:米),输出到控制台。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#通过经纬度计算2个点之间距离的实现代码 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • EF Core基础入门教程

    EF Core是一个轻量级、可扩展的ORM框架,提供了一种使用C#代码进行数据库访问和操作的方式。在本篇文章中,我们将介绍EF Core的基础入门教程。 安装EF Core 首先,下载并安装.NET Core SDK。然后,可以使用以下命令安装EF Core: dotnet add package Microsoft.EntityFrameworkCore …

    C# 2023年6月3日
    00
  • 浅谈ASP.NET Core静态文件处理源码探究

    在ASP.NET Core中,静态文件处理是一个非常重要的功能。本攻略将深入探讨ASP.NET Core静态文件处理的源码实现,并提供两个示例说明。 1. 静态文件处理的基本原理 在ASP.NET Core中,静态文件处理的基本原理是将请求映射到文件系统中的静态文件。当请求到达应用程序时,ASP.NET Core会检查请求路径是否匹配静态文件的路径。如果匹配…

    C# 2023年5月17日
    00
  • .NET 5 部署在docker上运行的方法

    .NET 5 部署在 Docker 上运行的方法 在本文中,我们将详细讲解如何将 .NET 5 应用程序部署到 Docker 容器中,并在容器中运行应用程序。我们将提供两个示例,以演示如何使用 Docker 部署 .NET 5 应用程序。 准备工作 在开始之前,您需要安装以下软件: Docker .NET 5 SDK 示例一:使用 Docker 部署 .NE…

    C# 2023年5月16日
    00
  • C#用websocket实现简易聊天功能(客户端)

    下面是C#用websocket实现简易聊天功能(客户端)的完整攻略。 1. 准备工作 在开始实现聊天功能之前,你需要先准备好以下几件事情: 安装websocket库:你可以通过在Visual Studio中打开NuGet包管理器,然后搜索websocket来安装websocket库。 了解websocket连接的基本知识:websocket是一种基于TCP协…

    C# 2023年5月15日
    00
  • ASP.NET Core MVC如何实现运行时动态定义Controller类型

    ASP.NET Core MVC是一款开源的高性能Web框架,使用C#语言编写,它支持运行在Windows、Linux和macOS操作系统上,为 Web 开发提供了高效、灵活、安全的解决方案。ASP.NET Core MVC的一个重要特点就是支持在运行时动态定义Controller类型。下面是实现该功能的完整攻略和两条示例说明。 1. 动态定义Control…

    C# 2023年5月31日
    00
  • ASP.NET Core MVC通过IActionFilter.OnActionExecuting方法,获取Controller的Action方法参数值

    用过ASP.NET Core MVC中IActionFilter拦截器的开发人员,都知道这是一个非常强大的MVC拦截器。最近才发现IActionFilter的OnActionExecuting方法,甚至可以获取Controller的Action方法参数值。 假如我们在ASP.NET Core MVC项目中有一个HomeController,其中有一个Acti…

    C# 2023年4月24日
    00
  • jquery1.4 教程二 ajax方法的改进

    jQuery是一种流行的JavaScript库,用于简化JavaScript编程。其中,ajax方法是jQuery中最常用的方法之一,用于向服务器发送异步请求。本文将提供详细的“jquery1.4教程二ajax方法的改进”的完整攻略,包括什么是ajax方法、ajax方法的改进以及两个示例。 什么是ajax方法? ajax方法是jQuery中最常用的方法之一,…

    C# 2023年5月15日
    00
  • Blazor组件事件处理功能

    Blazor组件事件处理功能是指在Blazor应用中,可以通过组件级别的事件处理来响应用户的操作或操作结果。下面我将详细介绍它的完整攻略及两个示例说明。 Blazor组件事件处理功能完整攻略 Blazor组件事件处理功能主要分为以下几步: 第一步:定义组件 首先我们需要定义一个组件,并定义该组件内部需要使用的事件。可以通过以下方式定义事件: [Paramet…

    C# 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部