如何根据特定坐标的接近度对坐标数组进行排序

时间:2017-04-22 20:29:21

标签: c# asp.net gps

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

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

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(); 

1 个答案:

答案 0 :(得分:2)

您需要根据他们与兴趣点的距离对点进行排序。 (我们称之为'指向我'。)

这将涉及调用if ($file_extension == "png") { echo "<img src="">" } else { <video></video> } 函数并将其传递给IList.Sort()。 (参见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小技巧并避免取平方根,比较仍然会产生相同的结果。< / p>