django是否有任何会查看地理坐标(十进制纬度/长度)并确定是否在具有一定半径的圆内(假设为100公里)?
我有某种类型的数据,每个都有一个纬度/经度,我想在数据库中进行搜索,以查看该数据是否位于具有指定半径大小的圆内。
我可能会自己写一些能解决这个问题的东西,但是如果有一些已经写好的东西可以解决这个问题我会徘徊。
答案 0 :(得分: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()