【问题标题】:How to sort an array of coordinates according to proximity of a specific coordinate如何根据特定坐标的接近程度对坐标数组进行排序
【发布时间】:2017-04-22 20:29:21
【问题描述】:

我有一个随机坐标数组(纬度和经度),我想根据特定坐标按距离排序。谁能帮我 ?我已经在互联网上搜索过,但我无法找到它。提前致谢。

我正在使用下面的代码,但效率不高,因为我需要从最近到最远的位置获取每个坐标:

var mapItens = ((from i in coordinatesArray
        (latitudeCurrent > i.Latitude && ((latitudeCurrent - i.Latitude) < 0.700 || (longitudeCurrent - i.Longitude) < 0.700)) ||
        (latitudeCurrent < i.Latitude && ((i.Latitude - latitudeCurrent) < 0.700 || (i.Longitude - longitudeCurrent) < 0.700)))
        select i).toList(); 

【问题讨论】:

  • 发布您当前的代码...以便我们知道您正在尝试什么
  • 嗨@Rahul!感谢您的回复,我刚刚更新了您的建议
  • 我用这个link解决了我的问题

标签: c# asp.net gps


【解决方案1】:

您需要根据与兴趣点的距离对点进行排序。 (我们称之为“点 i”。)

这将涉及调用IList.Sort() 函数并将IComparer 传递给它。 (参见https://msdn.microsoft.com/en-us/library/234b841s(v=vs.110).aspx)比较器有两个点,a 和 b,应该确定哪一个“更大”。

根据您的问题的定义,如果 a 和 i 之间的距离大于 b 和 i 之间的距离,则 a 点大于 b 点。因此,您的比较器只需计算这两个距离,并比较距离而不是点。

如果您的坐标跨越如此大的地理区域,以至于地球的曲率很重要,那么您需要一个特殊的公式来计算地理坐标中给定的两点之间的距离。这不是微不足道的,人们通常使用库来做这种事情。

如果坐标被限制在足够小的地理区域内,地球的曲率无关紧要,那么您可以使用简单的三角距离公式:

距离 = 平方根((a.x - i.x)2 + (b.y - i.y)2 )。

而且由于您实际上并不关心确切的距离,而只关心距离如何相互比较,因此您可以使用一个 hacky 小技巧并避免取平方根,比较仍然会产生相同的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2018-09-04
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    相关资源
    最近更新 更多