找到几个坐标

时间:2017-08-05 16:45:51

标签: c# python math coordinates formula

例如,我有一个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#方法计算此值。

提前致谢。

2 个答案:

答案 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++;
    }
}

}