python - 几何在 GEODJANGO 中不存在

标签 python django geodjango

我已经安装了 Geodjango 的所有依赖项!现在我正在学习它的教程 https://docs.djangoproject.com/en/1.2/ref/contrib/gis/tutorial/ -- 问题:命令 python manage.py syncdb 在 mpoly geometry(multipolygon 4326) not null that geometry does not exist 处产生错误

from django.contrib.gis.db import models

class WorldBorders(models.Model):
    # Regular Django fields corresponding to the attributes in the
    # world borders shapefile.
    name = models.CharField(max_length=50)
    area = models.IntegerField()
    pop2005 = models.IntegerField('Population 2005')
    fips = models.CharField('FIPS Code', max_length=2)
    iso2 = models.CharField('2 Digit ISO', max_length=2)
    iso3 = models.CharField('3 Digit ISO', max_length=3)
    un = models.IntegerField('United Nations Code')
    region = models.IntegerField('Region Code')
    subregion = models.IntegerField('Sub-Region Code')
    lon = models.FloatField()
    lat = models.FloatField()

    # GeoDjango-specific: a geometry field (MultiPolygonField), and
    # overriding the default manager with a GeoManager instance.
    mpoly = models.MultiPolygonField() //ERROR HERE

如何解决这个错误?

更新:

python manage.py sqlall world生成以下输出:

BEGIN;
CREATE TABLE "world_worldborders" (
    "id" serial NOT NULL PRIMARY KEY,
    "name" varchar(50) NOT NULL,
    "area" integer NOT NULL,
    "pop2005" integer NOT NULL,
    "fips" varchar(2) NOT NULL,
    "iso2" varchar(2) NOT NULL,
    "iso3" varchar(3) NOT NULL,
    "un" integer NOT NULL,
    "region" integer NOT NULL,
    "subregion" integer NOT NULL,
    "lon" double precision NOT NULL,
    "lat" double precision NOT NULL,
    "mpoly" geometry(MULTIPOLYGON,4326) NOT NULL
)
;
CREATE INDEX "world_worldborders_mpoly_id" ON "world_worldborders" USING GIST ( "mpoly" );

COMMIT;

python manage.py syncdb生成:Program Error Geometry Doesn't exist :

root@cvp-linux:~/geodjango# python manage.py syncdb Syncing... Creating tables ... Creating table django_admin_log Creating table auth_permission Creating table auth_group_permissions Creating table auth_group Creating table auth_user_groups Creating table auth_user_user_permissions Creating table auth_user Creating table django_content_type Creating table django_session Creating table world_worldborders Traceback (most recent call last): File "manage.py", line 10, in <module> execute_from_command_line(sys.argv) File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 399, in execute_from_command_line utility.execute() File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 392, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 242, in run_from_argv self.execute(*args, **options.__dict__) File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 285, in execute output = self.handle(*args, **options) File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 415, in handle return self.handle_noargs(**options) File "/usr/local/lib/python2.7/dist-packages/south/management/commands/syncdb.py", line 92, in handle_noargs syncdb.Command().execute(**options) File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 285, in execute output = self.handle(*args, **options) File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 415, in handle return self.handle_noargs(**options) File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/syncdb.py", line 107, in handle_noargs cursor.execute(statement) File "/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py", line 69, in execute return super(CursorDebugWrapper, self).execute(sql, params) File "/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py", line 53, in execute return self.cursor.execute(sql, params) File "/usr/local/lib/python2.7/dist-packages/django/db/utils.py", line 99, in __exit__ six.reraise(dj_exc_type, dj_exc_value, traceback) File "/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py", line 51, in execute return self.cursor.execute(sql) django.db.utils.ProgrammingError: type "geometry" does not exist LINE 14: "mpoly" geometry(MULTIPOLYGON,4326) NOT NULL

最佳答案

需要检查的几件事:

  • 您已经运行了 CREATE EXTENSION postgis;
  • GEOS_LIBRARY_PATH 在您项目的 settings.py 文件中设置

第二点给了我一些麻烦,尽管最终是第一点成功了。我在 Cygwin 64 位上运行它,所以需要做一些额外的工作才能让它工作。如果您没有在 Cygwin 环境中运行,那么您要查找的文件很可能是 libgeos_c.so;我需要将它指向 cyggeos_c-1.dll(仍在 Windows 上运行,因此我需要找到 .dll 扩展名)。

我确信我已经运行了 CREATE EXTENSION 命令,但我可能没有在 Cygwin 环境中运行它。或者我曾尝试过,但没有记住我有一个配置的噩梦,使得 postgres 服务器不在本地主机上运行,​​所以我避免使用 psql。这就是我自己的厚度品牌。

关于python - 几何在 GEODJANGO 中不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23491705/

相关文章:

python - 将索引值导出为列表

django - Django 模板中的 TimeField 格式

postgresql - Geodjango导入django.contrib.gis.gdal时出现异常: OSError:/usr/lib/libgdal. so.1: undefined symbol :sqlite3_column_table_name

python - geodjango 检查 PolygonField 中的 PointField

python - 我无法在外键中保存唯一值

python - 一次写入只读字段

python - 无法解析 netParameter 文件

django - 在 Django 中四舍五入小数

python - 如何恢复上次迁移?

django - Django:templatedoesnotexist gis/admin/openlayers.html