Django - 判断地理坐标是否在圆形范围内

4

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


谢谢jujule。我认为这会起作用。我还不想去处理geodjango。这就很完美了。 - avatar
我只是出于好奇查了一些postgis文档,发现了这个链接。http://postgis.refractions.net/documentation/manual-1.5/ST_DWithin.html 如果你已经在使用postgis的话,它似乎更简单些。 - Benbob
谢谢Keyo。我认为我应该从MySQL切换到Postgres,因为Postgres似乎对GIS有更多的支持。 - avatar
我对此并不了解,除了GIS专业似乎讨厌MySQL。既然你在使用Django,切换数据库应该不需要太多的努力。 - Benbob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接