例如,我有一个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
。
帮助我使用一些公式和Python
或C#
方法计算此值。
提前致谢。
答案 0 :(得分: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树)可能更有意义。
答案 1 :(得分: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++;
}
}
}