【问题标题】:django.db.utils.ProgrammingError: type "raster" does not existdjango.db.utils.ProgrammingError:类型“光栅”不存在
【发布时间】:2020-05-14 15:43:46
【问题描述】:

我的模型:我在这里创建了 3 个模型,当我迁移时出现错误。

from django.contrib.gis.db import models

from django.contrib.gis.db.models.fields import RasterField

class WorldBorder(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)
    mpoly = models.MultiPolygonField()

    # Returns the string representation of the model.
    def __str__(self):
        return self.name

class Zipcode(models.Model):
    code = models.CharField(max_length=5) 
    poly= models.PolygonField()

class Elevation(models.Model):
    name = models.CharField(max_length=100,blank=True, null=True)
    rast = RasterField(srid=2346)  

我的设置..我使用的数据库是 Postgres,这样我就可以将 postgis 用于 geodjango

DATABASES = {
"default": {
    "ENGINE": "django.contrib.gis.db.backends.postgis",
    "NAME": "django_course",
    "USER": "postgres",
    "PASSWORD": "**************",
    "HOST": "localhost",
    "PORT": "5432",
}
}

【问题讨论】:

  • 您的数据库是否安装了PostGIS
  • @JimJones 它确实安装了 postgis 是因为 postgres 版本的问题吗??
  • 你能把你从这个函数中得到的东西贴在 postgres 中吗? SELECT PostGIS_Version()
  • @JimJones 我得到了这个 3.0 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
  • @JimJones 这完全有效。你能解释一下怎么做吗?

标签: django postgresql postgis geodjango postgis-raster


【解决方案1】:

您缺少PostGIS Raster 扩展名。创建扩展并重试:

CREATE EXTENSION postgis_raster;

引用自documentation

请注意,3.0 的一个主要变化是光栅功能具有 被分解为一个单独的扩展

【讨论】:

    【解决方案2】:

    在你的数据库设置中使用它

    DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'database_name',
        'HOST': 'localhost',
        'USER': 'user_name',
        'PASSWORD': 'password',
        'PORT': '5432',
        }
    } 
    

    【讨论】:

    • 我们鼓励您描述您的答案如何解决问题。
    【解决方案3】:

    将这两行添加到您的迁移文件elevation_zipcode.py

    from django.contrib.postgres.operations import CreateExtension
    
    operations = [
            CreateExtension('postgis_raster'),
    

    【讨论】:

      猜你喜欢
      • 2016-03-09
      • 2018-08-05
      • 2021-09-19
      • 2019-02-18
      • 2018-07-08
      • 2021-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多