无需创建数据库模型,能否直接用Django的GeoHash计算地理哈希?
问题解答
不能直接使用django.contrib.gis.db.models.functions.GeoHash类处理内存中的Point对象,这个类是为Django ORM数据库查询设计的函数,仅能在ORM查询语句中调用(比如通过数据库计算为模型字段生成GeoHash),无法直接实例化后处理内存里的地理点数据。
替代方案:使用第三方geohash库
这是最直接的解决方式,步骤如下:
- 安装库:
pip install geohash
- 编写代码处理
Point对象:
from django.contrib.gis.geos import Point import geohash # 假设lon和lat是已定义的经纬度值 p = Point(x=lon, y=lat, srid=4326) # geohash库要求参数顺序为「纬度在前,经度在后」 geohash_str = geohash.encode(p.y, p.x) # 可选:指定哈希精度(默认12位) # geohash_str = geohash.encode(p.y, p.x, precision=8)
补充:原GeoHash类的正确使用场景
如果是在Django模型查询中使用,示例如下:
from django.contrib.gis.db.models.functions import GeoHash from myapp.models import Location # 假设有带Point字段的模型 # 查询时为每个Location实例添加geohash字段 locations = Location.objects.annotate( point_geohash=GeoHash('point_field', precision=8) ).values('id', 'point_geohash')
内容的提问来源于stack exchange,提问作者eadmaster
相关产品推荐
相关产品推荐

