在几个坐标中找到最近的坐标
Find the closest coordinate among several coordinates
例如,我有 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#
方法计算这个值。
提前致谢。
您可以像这样使用 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 树等空间数据结构可能更有意义。
这是一个让您入门的基本示例。
{
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++;
}
}
}
例如,我有 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#
方法计算这个值。
提前致谢。
您可以像这样使用 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 树等空间数据结构可能更有意义。
这是一个让您入门的基本示例。
{
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++;
}
}
}