编程语言
首页 > 编程语言> > python – 几何在GEODJANGO中不存在

python – 几何在GEODJANGO中不存在

作者:互联网

我已经安装了Geodjango的所有依赖!现在我正在按照它的教程https://docs.djangoproject.com/en/1.2/ref/contrib/gis/tutorial/ – 问题:命令python manage.py syncdb在mpoly geometry(multipolygon 4326)生成错误,而不是null几何不存在

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生成:程序错误几何不存在:

root @ cvp-linux:〜/ geodjango #python manage.py syncdb
同步…
创建表格……
创建表django_admin_log
创建表auth_permission
创建表auth_group_permissions
创建表auth_group
创建表auth_user_groups
创建表auth_user_user_permissions
创建表auth_user
创建表django_content_type
创建表django_session
创建表world_worldborders
Traceback(最近一次调用最后一次):
  文件“manage.py”,第10行,在< module>中
    execute_from_command_line(sys.argv中)
  在execute_from_command_line中输入文件“/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py”,第399行
    utility.execute()
  文件“/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py”,第392行,执行
    self.fetch_command(子命令).run_from_argv(self.argv)
  在run_from_argv中输入文件“/usr/local/lib/python2.7/dist-packages/django/core/management/base.py”,第242行
    self.execute(* args,** options .__ dict__)
  文件“/usr/local/lib/python2.7/dist-packages/django/core/management/base.py”,第285行,执行
    output = self.handle(* args,** options)
  文件“/usr/local/lib/python2.7/dist-packages/django/core/management/base.py”,第415行,句柄
    return self.handle_noargs(**选项)
  在handle_noargs中输入文件“/usr/local/lib/python2.7/dist-packages/south/management/commands/syncdb.py”,第92行
    syncdb.Command().执行(**选项)
  文件“/usr/local/lib/python2.7/dist-packages/django/core/management/base.py”,第285行,执行
    output = self.handle(* args,** options)
  文件“/usr/local/lib/python2.7/dist-packages/django/core/management/base.py”,第415行,句柄
    return self.handle_noargs(**选项)
  在handle_noargs中输入文件“/usr/local/lib/python2.7/dist-packages/django/core/management/commands/syncdb.py”,第107行
    cursor.execute(陈述)
  文件“/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py”,第69行,执行
    return super(CursorDebugWrapper,self).execute(sql,params)
  文件“/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py”,第53行,执行
    return self.cursor.execute(sql,params)
  在__exit__中输入文件“/usr/local/lib/python2.7/dist-packages/django/db/utils.py”,第99行
    six.reraise(dj_exc_type,dj_exc_value,traceback)
  文件“/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py”,第51行,执行
    return self.cursor.execute(sql)
django.db.utils.ProgrammingError:类型“geometry”不存在
第14行:“mpoly”几何(MULTIPOLYGON,4326)非空

解决方法:

要检查的几件事:

>你运行了CREATE EXTENSION postgis;
> GEOS_LIBRARY_PATH在项目的settings.py文件中设置

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

我很肯定我已经运行了CREATE EXTENSION命令,但我可能没有在Cygwin环境中运行它.或者我曾经尝试过,但是没记得我有一个配置的噩梦,使得postgres服务器没有在localhost上运行,所以我避免使用psql.这是我自己的厚度品牌.

标签:geodjango,python,django
来源: https://codeday.me/bug/20190830/1770980.html