4

django 是否有任何东西可以查看地理坐标(十进制纬度/经度)并确定是否在具有一定半径(比如说 100 公里)的圆圈内?

我有某种类型的数据,每个都有纬度/经度,我想在数据库中进行搜索以查看该数据是否位于具有指定半径大小的圆内。

我可能自己写一些东西来处理这个问题,但是如果已经写了一些东西来处理这个问题,我会徘徊。

4

1 回答 1

12

如果您不介意非常好的精度,这个问题可以在纯 SQL 中解决。

您可以使用以下特定 SQL 查询查找 GPS 位置周围的点:

# find point around :
latitude = 46.2037010192871
longitude = 5.20353984832764
query= "SELECT ID, NOM, LAT, LON, 3956 * 2 * ASIN(SQRT(POWER(SIN((%s - LAT) * 0.0174532925 / 2), 2) + COS(%s * 0.0174532925) * COS(LAT * 0.0174532925) * POWER(SIN((%s - LON) * 0.0174532925 / 2), 2) )) as distance from POI  having distance < 50 ORDER BY distance ASC " % ( latitude, latitude, longitude)

这将为您提供 50 公里区域内的所有带有 gps 记录的记录。

您可以使用以下命令轻松地将其插入 django:

from django.db import connection
cursor = connection.cursor()
cursor.execute( query )
rows = cursor.fetchall()

或使用django 原始查询

于 2011-01-06T00:45:38.820 回答