2017-08-05 348 views
-2

例如我有一个6坐标和名称5对象和我自己的位置。查找几个坐标中最接近的坐标

Stadium - 41.56569, 60.60677 
Restoraunt - 41.561865, 60.602895 
House - 41.566474, 60.605544 
FishHouse - 41.55561, 60.63101 
Cafe - 41.564171, 60.604020 

我自己的位置是41.565550, 60.607537

最接近我的对象是体育场,即41.56569, 60.60677

帮我用一些公式和PythonC#方法计算出这个值。

在此先感谢。

+0

您可以添加建设地点KD树,做近邻搜索 – meowgoesthedog

+0

我投票关闭这一问题作为题外话,因为它不是一个真正的问题。 – EJoshuaS

+0

[为什么“有人可以帮我吗?”不是一个实际的问题?](http://meta.stackoverflow.com/q/284236) – EJoshuaS

回答

1

您可以使用min功能是这样的:

import math 

def nearest_location(locations, my_location): 
    return min(enumerate(locations), key=lambda (_, (x, y)): math.hypot(x - my_location[0], y - my_location[1])) 

locations = [(41.56569, 60.60677), (41.561865, 60.602895), (41.566474, 60.605544), (41.55561, 60.63101), (41.564171, 60.604020)] 
my_location = (41.565550, 60.607537) 

print(nearest_location(locations, my_location)) 

这将打印(0, (41.56569, 60.60677))(所在地的指数,它的坐标)。

如果您打算多次运行这段代码,空间数据结构(如四叉树或KD树)可能更有意义。

+0

谢谢!我如何在Python 3上使用此代码?我得到错误消息**“SyntaxError:invalid syntax”**其中'“(_,(x,y))”' –

+0

我开始在两天前在python上编写python,并要求不要责骂我。 。我意识到我需要字段def这样的'def func(_xy):'你能帮助我吗? –

+0

@InsendioFX我编辑了答案,它定义了一个函数,它现在围绕'print'加上括号 –

1

这是一个基本的例子,它看起来像你开始。

{ 
private class Location 
{ 
    float x; 
    float y; 
} 

private List<Location> locationlist = new List<Location>(); 
private Location mylocation = new Location(); 

void findclose() 
{ 
    int closestloc = 0; 
    List<float> distances = new List<float>(); 
    int counter = 0; 
    foreach(Location el in locationlist) 
    { 
     float distance =(x2−x1)2 + (y2−y1)2; 
     distances.Add(distance); 
    } 
    float tempfloat = distances[0]; 
    foreach (float el in distances) 
    { 
     if (el < tempfloat) 
     { 
      tempfloat = el; 
      closestloc=counter; 
     } 
     counter++; 
    } 
} 

} 
相关问题