2017-04-22 63 views
0

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

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

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

发布您当前的代码...以便我们知道您在尝试使用什么 – Rahul

+0

Hi @Rahul!谢谢你的回复,我刚刚更新了你的请求 –

+0

我用这个[link]解决了我的问题(http://stackoverflow.com/a/12930598/2238515) –

回答

2

您需要将您的积分排序,根据从点的距离出于兴趣。 (我们称之为'点我')

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

根据问题的定义,如果a与i之间的距离大于b与i之间的距离,则点a大于点b。所以,你的比较器只是计算这两个距离,并比较距离而不是点。

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

如果坐标的足够小的地理区域,地球的曲率不要紧内密闭,则可以使用一个简单的三角距离公式:

距离=平方根的((斧 - ix) +(by-iy))。

而且由于您实际上并不关心精确的距离,而只是关于距离如何相互比较,所以您可以使用一个简单的小技巧并避免采用平方根,比较仍然会得到相同的结果。