Heroku 上缺少 GDAL

问题描述 投票:0回答:4

运行的 Django 应用程序通过 django-geojson 将 GeoJSON 数据存储在其中一个模型中。在管理界面中,该字段可通过 django-leaflet 进行编辑。当我使用

./manage.py runserver
在本地运行应用程序时,界面工作正常,页面如下所示。

但是,当我部署到 Heroku(构建得很好)并在管理界面中打开相同的 Location 实例时,蓝色标记不在地图上的任何位置,地图加载正常,并且我收到此错误:

Error creating geometry from value '{

"coordinates":[
    "-105.2449000",
    "40.0474000"
],
"type":"Point"

}' (Initializing geometry from JSON input requires GDAL.)

我只是在我的

models.py

中记录简单的点数据
from djgeojson.fields import PointField
from django.db import models

class Location(models.Model):
    """
    A model subclass for recording geographic data.
    """

    service_id = models.CharField(max_length=255, blank=True, null=True)
    name = models.CharField(max_length=255, blank=True, null=True)
    geom = PointField()  # GeoJSON (remember, coordinates: [long, lat])

    def __str__(self):
        return self.name

这是我第一次使用 geoJson、Leaflet 和 Heroku。我是否缺少一些依赖项,是否有一些我忽略的 Heroku 配置?这是我的

requirements.txt

dj-database-url==0.4.1
Django==1.10
django-filter==0.13.0
django-geojson==2.9.0
django-leaflet==0.18.1
gunicorn==19.6.0
httplib2==0.9.2
jsonfield==1.0.3
oauth2==1.9.0.post1
oauthlib==1.1.2
psycopg2==2.6.2
PyJWT==1.4.1
python-openid==2.2.5
requests==2.10.0
requests-oauthlib==0.6.2
six==1.10.0
wheel==0.24.0
whitenoise==3.2
heroku leaflet geojson gdal
4个回答
6
投票

Heroku 当前正在运行 heroku-18 堆栈,对于 python 项目,默认构建包具有地理空间库https://github.com/heroku/heroku-buildpack-python

要使用它们,请运行

heroku config:set BUILD_WITH_GEO_LIBRARIES=1
并添加

GDAL_LIBRARY_PATH = os.environ.get('GDAL_LIBRARY_PATH')
GEOS_LIBRARY_PATH = os.environ.get('GEOS_LIBRARY_PATH')

settings.py

另请参阅https://github.com/heroku/heroku-buildpack-python/issues/752


6
投票

看起来 Heroku 已经放弃了对

BUILD_WITH_GEO_LIBRARIES
的支持。您现在需要添加构建包才能启用支持:

# Add the buildpack
heroku buildpacks:add --index 1 https://github.com/heroku/heroku-geo-buildpack.git

# Remove the environment variable
heroku config:unset BUILD_WITH_GEO_LIBRARIES

请参阅 Heroku 帮助帖子


2
投票

GDAL 不是 Python 依赖项,它是一个单独的框架,必须安装在您的生产环境 (Heroku) 中。

实现此目的的一种方法是使用单独的构建包,例如 heroku-geo-buildpack。 Heroku 有 有关如何添加多个构建包的说明 - 即这里的 Python 和 GDAL。

安装后,heroku-geo-buildpack 建议在 Django 应用程序中使用以下测试 GDAL 的方法。从 Heroku Python 控制台执行以下操作:

>>> from django.contrib.gis import gdal
>>> gdal.HAS_GDAL
True

然后你就可以出发了。


0
投票

即使按照此答案添加构建后,我也来这里寻找

Could not find the GDAL library (tried "gdal", "GDAL", "gdal3.2.0", "gdal3.1.0", "gdal3.0.0", "gdal2.4.0", "gdal2.3.0", "gdal2.2.0", "gdal2.1.0", "gdal2.0.0")
问题https://stackoverflow.com/a/65323534/22860226。所以我清除了应用程序的构建缓存https://help.heroku.com/18PI5RSY/how-do-i-clear-the-build-cache。在此之后,Heroku 开始将 GDAL 安装到我的应用程序中。

© www.soinside.com 2019 - 2024. All rights reserved.