我有一些使用Python-Django的经验,包括它的REST框架,对地理信息(以及GIS是关于什么)和数据库有一个合理的理解,我想在我的Windows机器上基于Django开发一个“地理感知”的REST服务。应用程序应仅限于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-gis3)我设置了新的Django项目和我的应用程序,并执行了数据库迁移:
python [path-to..]\django-admin.py startproject locations
cd locations
python [path-to..]\django-admin.py startapp myapp
cd ..
python manage.py migrate4)我在settings.py的应用程序中添加了"rest_framework“和"myapp.apps.MyAppConfig”
5)我停止阅读一般的django-restframework教程,开始搜索django-restframework-gis的特定信息。我从中了解到的是,为了成为SpatialLite数据库,我需要增强我的SQLite数据库。gaia-sins上提供了用于SpatialLite的Windows二进制文件--但我真正需要的是哪些?我下载了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服务来提供来自其他来源(例如,以netcdf数据格式输出的天气模型)的GeoJSON格式的信息,那么我真的需要升级我的SQLite数据库吗?或者,在这种情况下描述我的Django模型并忽略任何与数据库相关的问题就足够了吗?
2)完成基本“布线”的最小代码是什么?这可能是一个非常简单的服务,它将接受经度/经度坐标作为URL中的参数,并以GeoJSON格式返回此位置。这样的代码应该突出使用“普通”django-restframework与gis版本之间的区别。有了这些之后,我可能会在现有的文档(例如Miguel Grinberg Tutorial或GitHub description)中找到自己的方法。
发布于 2017-12-01 16:48:36
好吧,在又一天的搜索和实验之后,我承认这是一个错误的问题-因此我回答了自己,并结束了这个问题。
显然,我太天真地建立了一个“地理感知”服务,认为我可以使用一两种特殊的坐标数据类型和一种特殊的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时最常见的问题。如果来自ctype的错误消息更详细一点,这将有助于更容易地搜索解决方案。在我发现需要匹配gdal的版本、的版本和编译器(DLL地狱这是有人调用的)之前,我在不同的网站上进行了几次跳转,并在ctypes init.py文件中添加了额外的打印语句。
混淆的另一部分原因是各种所需的“地理包”之间的多种依赖关系。例如,SpatiaLite已经提供了gdal库,那么为什么还需要单独安装gdal呢?实际上,GeoDjango docs建议使用OSGEO4W,因为这个程序套件捆绑了所有东西。然而,如果一个人从独立安装了OSGEO4W和Python/Django的系统开始,这并不是一件微不足道的事情。这就是我开始的情况。我安装OSGEO4W主要是为了处理QGIS,我安装Python和Django是为了完成其他任务。后来人们意识到,只有在GeoDjango应用程序中才能将这两者联系起来。我可能需要从头开始,但如果知道人们最近是否在使用Python >= 3.4的Windows10、x64环境中取得了成功,那将是一件很好的事情。
https://stackoverflow.com/questions/47562387
复制相似问题