Django存储地址经纬度遇PROJ.db缺失错误求助
解决Windows下Django PointField找不到proj.db的问题
问题根源
报错提示找不到proj.db,是因为PROJ坐标转换依赖库无法定位到其核心数据库文件,而你的Django配置仅指定了GEOS和GDAL的库路径,未配置PROJ相关环境变量。
解决方案
1. 定位proj.db文件
在虚拟环境目录下,找到Lib/site-packages/osgeo文件夹,确认其中存在proj.db文件。如果找不到,说明GDAL/PROJ包安装不完整,需重新安装(推荐下载对应Python版本的GDAL、GEOS、PROJ whl文件进行安装)。
2. 修改settings.py配置
在现有配置基础上,添加PROJ库路径的环境变量配置,同时用os.path.join避免路径拼接错误:
import os VIRTUAL_ENV_BASE = os.environ.get('VIRTUAL_ENV') # 配置GEOS、GDAL库路径 GEOS_LIBRARY_PATH = os.path.join(VIRTUAL_ENV_BASE, 'Lib', 'site-packages', 'osgeo', 'geos_c.dll') GDAL_LIBRARY_PATH = os.path.join(VIRTUAL_ENV_BASE, 'Lib', 'site-packages', 'osgeo', 'gdal304.dll') # 配置PROJ库路径(关键) os.environ['PROJ_LIB'] = os.path.join(VIRTUAL_ENV_BASE, 'Lib', 'site-packages', 'osgeo')
3. 明确Point的SRID(可选但推荐)
创建Point对象时指定SRID为4326(地图API返回的经纬度通常采用WGS84坐标系),减少不必要的坐标转换:
# 修改models.py中save方法的Point创建代码 self.point = Point(lng, lat, srid=4326)
4. 验证配置
重启Django服务后再次尝试保存数据,若仍报错,检查以下内容:
- 虚拟环境路径是否正确(通过
print(VIRTUAL_ENV_BASE)输出确认) osgeo文件夹下确实存在proj.db、geos_c.dll、gdal304.dll文件- 配置的GDAL动态库版本与实际安装版本一致(如安装的是GDAL305,需改为
gdal305.dll)
内容的提问来源于stack exchange,提问作者top10 AcousticShowslist
相关产品推荐
相关产品推荐

