You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GeoDjango3.2查询附近牙医报no such function: lwgeom_version如何解决

错误原因
  • 当前使用SQLite作为数据库,Django GIS的空间查询功能在SQLite上依赖SpatiaLite扩展,你使用的SpatiaLite版本未内置lwgeom相关组件,缺少lwgeom_version函数,执行距离查询时触发报错。
  • 代码存在隐藏逻辑错误:Django的Point类参数顺序为经度在前、纬度在后,你代码中传入的是Point(latitude,longitude),参数顺序写反会导致查询结果完全错位。
修复方案

方案1:更换为PostgreSQL + PostGIS(生产环境推荐)

PostgreSQL搭配PostGIS是Django GIS功能兼容性最好、性能最高的方案,不存在SpatiaLite的组件缺失问题,操作步骤:

  1. 安装PostgreSQL数据库以及对应版本的PostGIS扩展
  2. 修改settings.py中的数据库配置,使用PostGIS驱动:
DATABASES = {
    'default': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis',
        'NAME': '你的数据库名称',
        'USER': '数据库用户名',
        'PASSWORD': '数据库密码',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}
  1. 重新执行数据库迁移,原有业务代码无需额外修改即可正常运行。

方案2:修复现有SpatiaLite配置(仅开发环境临时使用)

如果你需要继续使用SQLite作为开发库,可以按以下步骤操作:

  1. 安装带lwgeom支持的完整SpatiaLite版本:
    • Linux环境执行命令:sudo apt install libsqlite3-mod-spatialite
    • Windows环境下载对应系统位数、带lwgeom组件的预编译SpatiaLite包,替换Python环境中sqlite3加载的dll文件
  2. 在settings.py中添加SpatiaLite加载配置:
# Linux环境
SPATIALITE_LIBRARY_PATH = 'mod_spatialite.so'
# Windows环境填写你下载的dll文件完整路径
# SPATIALITE_LIBRARY_PATH = 'C:/xxx/mod_spatialite.dll'
  1. 修正View代码中Point的参数顺序错误:
# 原错误写法
# user_location = Point(latitude,longitude,srid=4326)
# 修正为经度在前、纬度在后
user_location = Point(longitude, latitude, srid=4326)

内容的提问来源于stack exchange,提问作者AmanD02

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:24:07