地图坐标 C#

Posted

技术标签:

【中文标题】地图坐标 C#【英文标题】:Map Coordinates C# 【发布时间】:2016-07-12 11:08:50 【问题描述】:

我有一组纬度经度点。如果我想测试一个新点是否在任何现有点的 x 米范围内,这可能吗? 如果我用这种方式会更好吗?

ForEach(Coordinate coord in Coordinates)

     var distance =  GeoCoordinate.GetDistance(lat,lon);
     if(distance <= x)
     
         addToQualifyingList(coord);
     

并将新坐标与集合中的每个点进行比较并检查它是否在 x 米范围内?

【问题讨论】:

【参考方案1】:

这里是计算2点(lat1, lon1和lat2, lon2)之间距离的方法

public enum DistanceUnit  miles, kilometers, nauticalmiles 
public double GetDistance( double lat1, double lon1 , double lat2 , double lon2, DistanceUnit unit)

    Func<double, double> deg2rad = deg => (deg * Math.PI / 180.0);
    Func<double, double> rad2deg = rad => (rad / Math.PI * 180.0);
    double theta = lon1 - lon2;
    double dist = Math.Sin(deg2rad(lat1)) * Math.Sin(deg2rad(lat2)) + Math.Cos(deg2rad(lat1)) * Math.Cos(deg2rad(lat2)) * Math.Cos(deg2rad(theta));
    dist = Math.Acos(dist);
    dist = rad2deg(dist);
    dist = dist * 60 * 1.1515;

    if (unit == DistanceUnit.kilometers)
    
        dist = dist * 1.609344;
    
    else if (unit == DistanceUnit.nauticalmiles)
    
        dist = dist * 0.8684;
    
    return (dist);

要确定距离小于 1 公里的所有坐标:

List<Coordinate> result = Coordinates.Where(x => GeoCoordinate.GetDistance(lat,lon, x.lan, x.lon, DistanceUnit.kilometers) < 1).ToList();

【讨论】:

【参考方案2】:

纬度和经度都需要知道地球或任何其他球形物体的位置。这些是从它们各自的零线/点以度数给出的。

http://www.movable-type.co.uk/scripts/latlong.html

在 Java 中有解决方案

>    var R = 6371e3; // metres
>     var φ1 = lat1.toRadians();
>     var φ2 = lat2.toRadians();
>     var Δφ = (lat2-lat1).toRadians();
>     var Δλ = (lon2-lon1).toRadians();
> 
>     var a = Math.sin(Δφ/2) * Math.sin(Δφ/2) +
>             Math.cos(φ1) * Math.cos(φ2) *
>             Math.sin(Δλ/2) * Math.sin(Δλ/2);
>     var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
> 
>     var d = R * c;

显然,这是小距离的最佳解决方案之一。

您应该可以将其复制并粘贴到 C# 中,您只需要更改变量名称。

【讨论】:

可能与***.com/questions/365826/…重复 @MikaelPuusaari 他要么有一个要检查的固定点,已经计算了距离,并且正在询问他是否可以将结果存储在列表中,或者他正在询问如何正确计算点之间的距离.什么对你来说更有可能? 第一:他已经得到了答案。 2. 他的例子中有一个结果列表

以上是关于地图坐标 C#的主要内容,如果未能解决你的问题,请参考以下文章

C# ArcEngine,如何根据已有的两点的XY坐标,把这条线在地图上显示出来?

如何使用 PHP 将 Bing 地图四键转换为缩放级别、x 坐标和 y 坐标?

C# ArcEngine,如何根据已有的一系列点的XY坐标,把这些线在地图上显示出来?请注意是有二三十条线。。。

GPS坐标转百度地图并且加载地图示例.支持微信端访问

C# 计算地图上某个坐标点的到多边形各边的距离

C# 计算地图上某个坐标点的到多边形各边的距离