在几个坐标中找到最近的坐标

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

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

提前致谢。

您可以像这样使用 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++;
    }
}

}