资讯动态

GeoDjango 使用 PostgreSQL 前如何安装 PostGIS 并创建空间数据库

发布时间:2026/9/13 3:50:03 来源:尧图企业网站定制
GeoDjango 使用 PostgreSQL 前如何安装 PostGIS 并创建空间数据库【免费下载链接】djangoThe Web framework for perfectionists with deadlines.项目地址: https://gitcode.com/GitHub_Trending/dj/django在 Django 项目里启用 GeoDjango 并以 PostgreSQL 作为空间数据库时PostgreSQL 本身并不直接支持地理对象——需要先安装 PostGIS 把它变成空间数据库再创建一个启用了postgis扩展的数据库。本文按 安装 PostGIS 的官方文档 和 GeoDjango 安装文档 给出这条完整路径安装 PostGIS 与配套地理库、创建空间数据库并启用扩展最后通过 Django 的migrate验证。准备条件按 GeoDjango InstallationGeoDjango 安装总体上需要三样东西Python 与 Django、一个空间数据库、一组地理空间库。其中PostgreSQL 支持版本为 15且必须要求 PostGISPostGIS 在文档中被推荐因为它是最成熟、功能最丰富的开源空间数据库。PostGIS 支持版本为 3.2–3.6配套的库版本要求见 Installing Geospatial librariesGEOS3.10–3.14、PROJ6.x–9.xPostgreSQL 和 SQLite 才需要、GDAL3.3–3.13都是必装项。Python 数据库适配器使用 GeoDjango 配 PostGIS 时需要psycopg或psycopg2模块。如果打算从源码编译 PostGIS文档要求先安装 GEOS、PROJ、GDAL 这三个库并按 PostGIS requirements 检查是否还需要其他库。安装 PostGIS以 Debian/Ubuntu 为例在 Debian/Ubuntu 上官方文档建议直接安装以下软件包x替换为你要安装的 PostgreSQL 版本号sudo apt-get install postgresql-x postgresql-x-postgis-3 postgresql-server-dev-x python3-psycopg3这条命令同时解决了 PostGIS 扩展和psycopg适配器两个依赖。文档同时说明也可以 build from source但编译时要求紧跟上游说明。另外Installing Geospatial libraries 建议在 Debian/Ubuntu 上安装地理库sudo apt-get install binutils libproj-dev gdal-bin这两个命令都会修改系统软件包环境需要 root 权限。macOS 和 Windows 的平台特定安装方式Homebrew、Stack Builder 等在 安装文档 中有专门章节本文不展开。创建空间数据库并启用 postgis 扩展PostGIS 通过 PostgreSQL 的扩展机制提供空间功能。安装 PostGIS 文档 给出的操作是db name替换为你自己的数据库名$ createdb db name $ psql db name CREATE EXTENSION postgis;执行CREATE EXTENSION postgis;时当前数据库用户必须是 superuser。文档同时说明这条命令在migrate过程中也会执行所以如果你让 Django 自己管理迁移也可以不手工执行。如果不想手工进psql文档给出的替代方式是在项目中写一个迁移操作from django.contrib.postgres.operations import CreateExtension from django.db import migrations class Migration(migrations.Migration): operations [CreateExtension(postgis), ...]两个可选扩展仅在你确认需要时再装要用 PostGIS 的 raster 功能启用postgis_raster通过上面的CreateExtension迁移操作或直接执行CREATE EXTENSION postgis_raster;。postgis_topologyGeoDjango 目前没有用到 PostGIS 的 topology 功能文档只是说如果将来要用可以再执行CREATE EXTENSION postgis_topology;。文档示例创建 geodjango 用户和数据库安装 PostGIS 文档 展示了以postgres用户在 SQL Shell 中创建geodjango空间数据库和用户的方式postgres# CREATE USER geodjango PASSWORD my_passwd; postgres# CREATE DATABASE geodjango OWNER geodjango;这是文档中的示例my_passwd只是示例值实际使用时替换为你自己的密码。数据库管理入口可以是 pgAdmin也可以是 SQL Shell文档以Start -- PostgreSQL X -- SQL Shell菜单路径为例。在 Django 中配置 postgis 后端数据库就绪后GeoDjango Tutorial 给出的最小配置是编辑settings.pyDATABASES { default: { ENGINE: django.contrib.gis.db.backends.postgis, NAME: geodjango, USER: geo, }, }ENGINE必须是空间后端之一PostgreSQL 对应的是django.contrib.gis.db.backends.postgis见 GeoDjango Database API。注意不要写成 Django 普通 PostgreSQL 后端——安装文档 明确要求把ENGINE设置为一个 spatial backend。同时把django.contrib.gis加入INSTALLED_APPS例如INSTALLED_APPS [ django.contrib.admin, django.contrib.auth, django.contrib.contenttypes, django.contrib.sessions, django.contrib.messages, django.contrib.staticfiles, django.contrib.gis, world, ]不加django.contrib.gis的话gis 模板无法被定位geographic admin、KML sitemaps 等功能不能正常工作。运行 migrate 验证CREATE EXTENSION postgis;会在migrate过程中执行因此 GeoDjango Tutorial 的migrate流程本身就是验证手段。文档示例的输出示例结果$ python manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions, world Running migrations: ... Applying world.0001_initial... OK教程还建议先用sqlmigrate预览建表 SQL确认生成的是空间列例如文档示例中的geometry(MULTIPOLYGON,4326)列和USING GIST索引再执行migrate。如果迁移顺利通过说明 PostGIS 扩展和空间后端都已生效。库找不到时的排查GeoDjango Installation 指出GeoDjango 安装中最常见的问题是外部共享库GEOS、GDAL找不到通常是系统不知道从源码编译安装的库放在哪里。文档给出的处理顺序设置LD_LIBRARY_PATH例如在 bash profile 里export LD_LIBRARY_PATH/usr/local/lib或以 root 身份把路径写进/etc/ld.so.conf后执行sudo ldconfig。在 Linux 上确认安装了binutilsGeoDjango 通过ctypes.util.find_library找库它依赖objdump程序。Debian/Ubuntu 可用sudo apt-get install binutilsRed Hat/CentOS 用sudo yum install binutils。库在非常规位置时也可以在 settings 里直接指定完整路径例如GEOS_LIBRARY_PATH /home/bob/local/lib/libgeos_c.so必须指向 C 共享库libgeos_c.so不是libgeos.so或GDAL_LIBRARY_PATH。找不到库时的报错形如来自 Installing Geospatial librariesImportError: Could not find the GEOS library (tried geos_c). Try setting GEOS_LIBRARY_PATH in your settings.下一步数据库和后端都通了之后可以按 GeoDjango Tutorial 继续用ogrinspect从 shapefile 生成模型用layermapping导入空间数据更多 API 参考 GeoDjango 文档索引。【免费下载链接】djangoThe Web framework for perfectionists with deadlines.项目地址: https://gitcode.com/GitHub_Trending/dj/django创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价