繁体   English   中英

从列表中查找最近的坐标对

[英]Finding closest pair of coordinates from a list

我正在尝试实施以前的SO 问题的解决方案

我有一对坐标,我希望在坐标列表中找到最接近的相关坐标对。

这可以通过找到点之间距离最小的对来实现:

dist = lambda s,d: (s[0]-d[0])**2+(s[1]-d[1])**2

我有一本字典,来源:

{u'toid': u'osgb4000000029928750', u'point': [524511.405, 184846.794]}

我有另一个包含坐标对的列表,d_origins:

[(532163.5648939193, 181848.77608212957),(532449.8292416488, 181847.71793660522), (532200.2156880093, 182053.30247829395), (533794.6284605444, 181119.5631480558)]

然后我尝试通过调用 dist lambda 函数来查找匹配值:

match = min((origin[0]['point']),key=partial(dist,d_origins))
print origins, match

但是,输出是:

TypeError: 'float' object has no attribute '__getitem__'

min函数接受一个列表或可迭代对象。 此外,排序可以由带有一个参数的函数指定。 这意味着该函数将一个元素映射到一个值,然后由min函数进行比较以找到最小元素。

match = min(d_origins, key=lambda p: dist(p, origin['point']))

lambda 表达式通过提供其中一个参数将带有两个参数的dist函数包装为带有一个参数的函数。 新的匿名函数将坐标与 lambda 表达式中的特定原点进行比较。 然后, min函数的结果是最接近该原点的坐标。

完整示例:

>>> dist = lambda s,d: (s[0]-d[0])**2+(s[1]-d[1])**2
>>> origin = {'toid': 'osgb4000000029928750', 'point': [524511.405, 184846.794]}
>>> d_origins = [(532163.5648939193, 181848.77608212957),(532449.8292416488, 181847.71793660522), (532200.2156880093, 182053.30247829395), (533794.6284605444, 181119.5631480558)]
>>> 
>>> match = min(d_origins, key=lambda p: dist(p, origin['point']))
>>> print(str(match))
(532200.2156880093, 182053.30247829395)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM