【问题标题】:Missing GDAL on HerokuHeroku 上缺少 GDAL
【发布时间】:2016-08-18 21:19:52
【问题描述】:

运行的 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


    【解决方案1】:

    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

    【讨论】:

    • 自从我上次研究这个已经太久了,所以我不知道什么是正确的答案。但这听起来不错,所以我会接受。
    【解决方案2】:

    看起来 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 help post

    【讨论】:

    • 非常感谢。顺便说一句,当我第一次在本地安装 GDAL 时,我不得不把这段代码放在我的 settings.py if os.name == 'nt': import platform OSGEO4W = r"C:\OSGeo4W" if '64' in platform.architecture()[0]: OSGEO4W += "64" assert os.path.isdir(OSGEO4W), "Directory does not exist: " + OSGEO4W os.environ['OSGEO4W_ROOT'] = OSGEO4W os.environ['GDAL_DATA'] = OSGEO4W + r"\share\gdal" os.environ['PROJ_LIB'] = OSGEO4W + r"\share\proj" os.environ['PATH'] = OSGEO4W + r"\bin;" + os.environ['PATH'] 你能解释一下吗?
    • 这应该是公认的答案。经过长时间的打击和试用,解决了我的问题。 Heroku 在这方面的 doc 似乎已经过时了。
    【解决方案3】:

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

    一种方法是使用单独的 buildpack,例如 heroku-geo-buildpack。 Heroku 有 instructions on how to add multiple buildpacks - 即这里是 Python 和 GDAL。

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

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

    那么你应该很高兴了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-19
      • 2016-12-29
      • 1970-01-01
      • 2023-01-22
      • 1970-01-01
      • 2015-01-26
      • 2015-01-15
      • 2023-04-06
      相关资源
      最近更新 更多