Windows 10上的django-restframework-gis入门

时间:2017-11-29 21:46:33

标签: python django windows django-rest-framework geospatial

我有一些Python-Django的经验,包括它的REST框架,对地理信息的合理理解(以及GIS的内容)和数据库,我想在我的Windows上开发一个“地理感知”的REST服务基于Django的机器。应用程序应限于REST服务;视觉探索和其他东西应独立开发。旁注:一旦我的应用程序运行,它将被移植到Linux机器上,然后将使用PostGIS而不是SpatialLite。

经过几个小时的网络搜索,我仍然没有找到一个好的“快速入门”指南。关于与我的任务相关的各个方面有许多教程和文档,但它们要么是指Linux,要么它们的安装说明已经过时。以下是我到目前为止所做的事情:

1)我使用miniconda和Pycharm

2)我创建了一个新的虚拟环境:

conda create -n locations pip numpy requests
activate locations
conda install -c conda-forge django djangorestframework djangorestframework-gis

3)我设置了新的Django项目和我的应用程序并执行了数据库迁移:

python [path-to..]\django-admin.py startproject locations
cd locations
python [path-to..]\django-admin.py startapp myapp
cd ..
python manage.py migrate

4)我在settings.py

中将“rest_framework”和“myapp.apps.MyAppConfig”添加到了APPLICATIONS

5)我停止阅读一般的django-restframework教程并开始搜索django-restframework-gis特定信息。我从中理解的是,我需要增强我的SQLite数据库以成为SpatialLite数据库。 SpatialLite的Windows二进制文件可在gaia-sins获得 - 但我确实需要哪些?我下载了mod_spatialite-4.3.0a-win-x86.7z文件并将其解压缩,然后我将SPATIALITE_LIBRARY_PATH= '[path-to..]\mod_spatialite-4.3.0a-win-x86\mod_spatialite.dll'添加到我的settings.py.

接下来会发生什么?

具体问题:

1)如果我不打算存储地理空间信息,而只是构建一个REST服务来提供来自其他来源的GeoJSON信息(例如netcdf数据格式的天气模型输出),我是否真的需要升级我的SQLite数据库? )?或者在这种情况下描述我的Django模型并且只是忽略任何与数据库相关的问题就足够了吗?

2)完成基本“布线”的最小代码是什么?这可能是一个非常简单的服务,它将接受lat / lon坐标作为URL中的参数,并以GeoJSON格式返回此位置。此类代码应突出显示使用gis版本中的“普通”django-restframework之间的差异。有了这个,我可能会找到现有文档(例如Miguel Grinberg TutorialGitHub description)。

1 个答案:

答案 0 :(得分:0)

好的,经过另一天的搜索和实验,我承认这是一个错误的问题 - 因此我回答自己并解决了这个问题。

显然,我已经天真地想要设置一个“地理感知”服务,认为我可以使用一个特殊的数据类型或两个坐标,以及一种特殊的GeoJSON序列化器 - 如果真的有必要的话,使用支持地理位置的数据库。

事实证明,我最终想要做的是GeoDjango应用程序(即使我只使用GeoDjango可以做的一小部分),所以GeoDjango docs是开始的地方来自,特别是他们的安装指南。

故事尚未结束,因为我仍然遇到从Django加载所需库的麻烦,但现在方向更清晰了。

更具体地说,我遇到的问题主要不是SpatiaLite问题。我能够通过运行SELECT load_extension('mod_spatialite'); SELECT InitSpatialMetaData();来安装SpatiaLite并增强现有的sqlite数据库(另请参阅this post。Django(python manage.py check)抱怨没有找到gdal库,一旦找到它,它是错误的版本。GeoDjango docs报告说这确实是安装GeoDjango时最常见的问题。如果来自ctypes的错误信息更加冗长,以便更容易搜索解决方案,那将会很有帮助。在我发现需要匹配gdal版本,python版本和编译器之前,在各种网站上进行了几次跳转,并在ctypes init .py文件中添加了一个额外的print语句。 DLL地狱这被某人称为。

混淆的另一部分源于各种所需“地理包”之间的多种依赖关系。例如,SpatiaLite已经附带了一个gdal库,那么为什么需要单独安装gdal呢?实际上,GeoDjango docs建议使用OSGEO4W,因为此程序套件将所有内容捆绑在一起。然而,如果从一个独立安装OSGEO4W和Python / Django的系统开始,这不是微不足道的。这是我开始的情况。我安装了OSGEO4W主要用于QGIS,我安装了Python和Django用于其他任务。之后才意识到两者必须为GeoDjango应用程序链接。我可能需要从头开始,但最好知道人们是否在最近使用Python> = 3.4的Windows 10,x64环境中取得了成功。