前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.net 多地点计算中心点

.net 多地点计算中心点

作者头像
GoodTime
发布2024-03-05 16:02:41
870
发布2024-03-05 16:02:41
举报

1、需求产生

快到周末了,几个远在各个区的朋友想要聚餐,为了照顾到彼此的距离,决定计算一下所有人的中心点,至此需求产生,下面开始编写代码。

2、编写代码

1)新建一个控制台程序

在NuGet程序包管理器中安装[GeoCoordinate.NetCore],如下图

2)新建一个计算中心点的工具类Util.cs
代码语言:javascript
复制
/// <summary>
    /// 工具类
    /// </summary>
    public class Util
    {
        /// <summary>
        /// 计算中心点地理坐标等信息
        /// </summary>
        /// <param name="geoCoordinates"></param>
        /// <returns></returns>
        public static GeoCoordinate GetCentralGeoCoordinate(List<GeoCoordinate> geoCoordinates)
        {
            if (geoCoordinates.Count == 1)
            {
                return geoCoordinates.Single();
            }
            double x = 0;
            double y = 0;
            double z = 0;
            foreach (var geoCoordinate in geoCoordinates)
            {
                var latitude = geoCoordinate.Latitude * Math.PI / 180;
                var longitude = geoCoordinate.Longitude * Math.PI / 180;
                x += Math.Cos(latitude) * Math.Cos(longitude);
                y += Math.Cos(latitude) * Math.Sin(longitude);
                z += Math.Sin(latitude);
            }
            var total = geoCoordinates.Count;
            x = x / total;
            y = y / total;
            z = z / total;
            var centralLongitude = Math.Atan2(y, x);
            var centralSquareRoot = Math.Sqrt(x * x + y * y);
            var centralLatitude = Math.Atan2(z, centralSquareRoot);
            return new GeoCoordinate(centralLatitude * 180 / Math.PI, centralLongitude * 180 / Math.PI);
        }
    }
3)调用
代码语言:javascript
复制
var list = new List<GeoCoordinate>();

// 冬奥森林公园
var item1 = new GeoCoordinate();
item1.Latitude = 40.483558;
item1.Longitude = 115.843415;
list.Add(item1);

// 莲花山森林公园
var item2 = new GeoCoordinate();
item2.Latitude = 40.448045;
item2.Longitude = 116.286082;
list.Add(item2);

// 十三陵双龙山森林公园
var item3 = new GeoCoordinate();
item3.Latitude = 40.355742;
item3.Longitude = 116.171099;
list.Add(item3);

// 调用多点计算
var res = Util.GetCentralGeoCoordinate(list);
Console.WriteLine("------计算所得中心点地理坐标------");
Console.WriteLine("经度:" + Math.Round(res.Longitude, 4));
Console.WriteLine("纬度:" + Math.Round(res.Latitude, 4));
Console.ReadLine();

3、测试

上述三个地点为随机找的北京市的三个公园作为测试点,关于地点坐标的拾取可以在百度地图的拾取坐标系统获得,地址为:百度地图拾取坐标系统

关于地点可以自定义添加数量,最后每个地点坐标记得添加到list中即可。

由上述步骤,计算中心点的坐标为

经度:116.1003 纬度:40.4293

下面来经纬度反查地点,百度地图的拾取坐标系统也有反查功能但是不太理想,这里推荐一个另一个拾取坐标系统附带反查,地址为:地球在线

输入上述代码返回的坐标,反查地点如下

至此,根据多地点的经纬度坐标计算中心点大功告成!若平时出去和朋友聚餐等需要为每个人考虑一下距离可以用这个小程序demo计算一下,找到中心点再看看中心点附近的商圈、景区、饮食住宿等等,希望可以帮助到你哦。

注:本程序使用VS2022基于.NET6编写,用的类库也是.net core版本

4、总结

本文主要是借助GeoCoordinate的类库实现,通过坐标的拾取计算多坐标的中心点,接着再根据生成的坐标反查地点得以实现。

以上就是.net 多地点计算中心点的介绍,做此记录,如有帮助,欢迎点赞关注收藏!
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、需求产生
  • 2、编写代码
    • 1)新建一个控制台程序
      • 2)新建一个计算中心点的工具类Util.cs
        • 3)调用
        • 3、测试
        • 4、总结
          • 以上就是.net 多地点计算中心点的介绍,做此记录,如有帮助,欢迎点赞关注收藏!
          相关产品与服务
          云开发 CloudBase
          云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档