【发布时间】:2018-02-10 13:48:59
【问题描述】:
我在 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'
我为 lat1lat1 和 lon1lon1 创建了一个 pastebin,以显示 lat1 和 lon1 的确切输出。
【问题讨论】:
-
你
lon1查询应该引用Places.longitude否? -
改变了。但这不会导致问题
-
lat1 是列表吗?
-
@Skyler 这是一个字典
-
@RaghavPatnecha 是的,但它有助于清除这些问题的小东西。如果正确答案出现,请务必接受并投票。
标签: python postgresql python-2.7 flask-sqlalchemy