Django - 确定地理坐标是否在圆内

4 投票
1 回答
2629 浏览
提问于 2025-04-16 09:29

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的原始查询

撰写回答