2016-08-18 199 views
1

正在运行的Django应用程序通过django-geojson将GeoJSON数据存储在其中一个模型中。在管理界面中,此字段可通过django-leaflet进行编辑。当我在本地运行应用程序./manage.py runserver时,界面工作正常,页面看起来像这样。Heroku上缺少GDAL

Working example on localhost

然而,当我部署到Heroku的,它建立得很好,并且在管理界面中打开同一个位置情况下,蓝色标记不是任何地方在地图上,地图加载正常,并我得到交付给我这个错误:

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 

回答

2

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 

你应该很好走。