【发布时间】:2015-02-10 07:10:08
【问题描述】:
我正在尝试为我的 django 项目实现一些位置感知/空间查找功能。我已经意识到我需要切换到启用 PostGIS 的数据库,而不仅仅是一个普通的 Postgres 数据库,我希望这是对的吗? 我一直在阅读无数的教程,比如这个https://www.chicagodjango.com/blog/geo-django-quickstart/ 这表明我需要先创建一个地理空间模板,然后才能实际创建或启用 PostGIS 数据库。请看下面的代码:
POSTGIS_SQL_PATH=`pg_config --sharedir`/contrib/postgis-1.5
# Creating the template spatial database.
sudo -u postgres createdb -E UTF8 template_postgis
sudo -u postgres createlang -d template_postgis plpgsql # Adding PLPGSQL language support.
# Allows non-superusers the ability to create from this template
sudo -u postgres psql -d postgres -c "UPDATE pg_database SET datistemplate='true' WHERE datname='template_postgis';"
# Loading the PostGIS SQL routines
sudo -u postgres psql -d template_postgis -f $POSTGIS_SQL_PATH/postgis.sql
sudo -u postgres psql -d template_postgis -f $POSTGIS_SQL_PATH/spatial_ref_sys.sql
# Enabling users to alter spatial tables.
sudo -u postgres psql -d template_postgis -c "GRANT ALL ON geometry_columns TO PUBLIC;"
sudo -u postgres psql -d template_postgis -c "GRANT ALL ON geography_columns TO PUBLIC;"
sudo -u postgres psql -d template_postgis -c "GRANT ALL ON spatial_ref_sys TO PUBLIC;"
但是,与我阅读其他教程相比,我可以简单地创建一个新的 Postgresql 数据库或使用我现有的数据库并执行以下操作:
psql -d yourdatabase -c "CREATE EXTENSION postgis;"
psql -d yourdatabase -c "CREATE EXTENSION postgis_topology;"
psql -d yourdatabase -c "CREATE EXTENSION postgis_tiger_geocoder;"
是哪一个?我什至在正确的道路上吗?这个 PostGIS 的东西听起来令人难以置信的混乱。
【问题讨论】:
-
我建议遵循this 指南。创建扩展是您在 Postgres 中注册额外包的方式。所以,创建扩展 Postgis 基本上加载了一堆函数和类型,可以让你做空间。如果您首先针对要使用的数据库执行此步骤,然后进行 geodjango 设置,则应该没问题。几周前我自己做了这个,虽然我是一个非常有经验的 Postgres/Postgis 用户,但我以前从未使用过 Django,而且它第一次工作。祝你好运。
-
您的链接是针对 1.5 的,目前有一个 2.x 版本有一些重大变化。
-
@JakubKania,我只能找到 1.8 和 dev。也许你可以放一个链接,回答这个问题?关于创建扩展 postgis 的问题仍然存在,不是吗?
-
@JohnBarça,哦,对不起,我的意思是 OP。他的教程适用于 1.5,因此与其他教程存在差异。我不知道 geodjango,抱歉。
-
@JakubKania。不用担心,我只使用了一点 GeoDjango,但效果非常好,按照设置指南操作也没问题。
标签: postgresql postgis