gpt4 book ai didi

python - 获取一定半径内的点

转载 作者:行者123 更新时间:2023-11-29 12:16:53 24 4
gpt4 key购买 nike

我在 PostgreSQL 中有一个纬度和经度列。我想获得一定半径内的所有点。我知道他们的库和扩展可以实现这一点,但我想手动完成。这是我从数据库中获取纬度和经度所做的工作:

lat1 = Places.query.with_entities(Places.latitude).all()
lon1 = Places.query.with_entities(Places.longitude).all()

接下来我编写了一个函数来将经纬度转换为以公里为单位的距离:

result = []
for i in range(len(lat1)):

x = Decimal(111.12) * (Decimal(28.616700) - lat1[i]['latitude'])
y = Decimal(111.12) * (Decimal(77.216700) - lon1[i]['longitude']) * Decimal(
cos(lat1[i]['latitude'])) / Decimal(92.215)
result.append(sqrt(x * x + y * y))
print result

如何在此函数中包含我想要的点的半径。此外,由于 lat1 和 lon1 的输出看起来像这样:

{u'latitude': Decimal('28.633300')}

我发现很难转换并不断出错:

TypeError: unsupported operand type(s) for -: 'float' and 'list'

我已经为 lat1 创建了一个 pastebin lat1和 lon1 lon1显示 lat1 和 lon1 的确切输出。

最佳答案

你的 lat1 和 lon1 是字典列表。因此,当您访问它们的实际值时,请在循环中执行以下操作,

result = []
for i in range(len(lat1)):
x = Decimal(111.12) * (Decimal(28.616700) - lat1[i]['latitude']);
y = Decimal(111.12) * (Decimal(77.216700) - lon1[i]['longitude']) * Decimal(math.cos(lat1[i]['latitude'])) / Decimal(92.215);
result.append(math.sqrt(x * x + y * y));

以下是示例案例的控制台输出,

>>> lat1=[{u'latitude': Decimal('28.633300')}]
>>> lon1=[{u'longitude': Decimal('28.633300')}]
>>> x = Decimal(111.12) * (Decimal(28.616700) - lat1[0]['latitude']);
>>> y = Decimal(111.12) * (Decimal(77.216700) - lon1[0]['longitude']) * Decimal(math.cos(lat1[0]['latitude'])) / Decimal(92.215);
>>> result = math.sqrt(x * x + y * y);
>>> result
54.84298321157983

关于python - 获取一定半径内的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48721492/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com