Django - 确定地理坐标是否在圆内
Django有没有什么东西可以查看一个地理坐标(小数形式的纬度和经度),然后判断这个点是否在一个特定半径的圆圈里(比如说100公里)?
我有一种特定类型的数据,每条数据都有一个纬度和经度,我想在数据库里搜索,看看这些数据是否位于一个指定半径的圆圈内。
我可能可以自己写一些代码来处理这个问题,但我在想是否已经有现成的解决方案可以用来处理这个情况。
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的原始查询