GeoDjango简单使用

写在前面

系统环境: ubuntu16.04+Python3.5+Django2.1.7

几点解释

GIS

GIS的全名是Geographic Information System,中文全名是地理信息系统。它是在计算机硬、软件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术系统。

WebGIS

WebGIS,就是将 GIS 这门学科所能提供的功能,以B/S技术展现给用户,使用户只需要在浏览器上便能使用这些GIS功能的一个应用方向。基于 B/S 的 GIS 系统越来越多的开始提供服务,并且在 RIA(富客户端)技术、AJAX(动态网页)技术的涌现和成熟,WebGIS 也基本能展现出与 C/S 一样的效果和功能,而WebGIS的大发展,更是用户的需求, Google 地图和百度地图等服务提供商的大规模扩张便是最好的证明。WebGIS 的数据大致可以分为三种,一种是地图、影像数据,一种是空间属性数据、一种是业务数据。地图、影像数据一般是一些png或者其他格式的数据组成

GeoDjango

GeoDjango是Django包含的一个 contrib 模块,使 Django 尽可能简单地创建地理 Web 应用程序,如基于位置的服务。
主要包含以下特点:用于 OGC 几何和栅格数据的 Django 模型字段;用于查询和处理空间数据的 Django 的 ORM 扩展;后台管理字段。

环境配置

配置说明
  • 官方支持 MySQL、PostgreSQL、 Oracle、SQLite 四种数据库,而PostGIS 是官网推荐的空间数据引擎,使PostgreSQL更好地支持对空间数据的操作,所以我选择了PostgreSQL+PostGIS 的组合,除此之外还需要安装 GEOS、 GDAL、 PROJ.4 三种底层依赖库,这些都是开源 GIS 经常使用的库。

PostgreSQL (with PostGIS), MySQL (mostly with MyISAM engine), Oracle, and SQLite (with SpatiaLite) are the spatial databases currently supported.
Note:PostGIS is recommended, because it is the most mature and feature-rich open source spatial database.

安装操作
  • 预装一些依赖的库
$ sudo apt-get install binutils libproj-dev gdal-bin
  • 安装GEOS,GEOS简单来书就是判断两个几何形状之间关系和对两个几何形状进行操作以形成新的几何形状的库。
$ wget http://download.osgeo.org/geos/geos-3.5.1.tar.bz2
$ tar xjf geos-3.5.1.tar.bz2
$ cd geos-X.Y.Z
$ ./configure
$ make
$ sudo make install
$ cd ..
  • 安装PROJ.4,Proj4是一个免费的GIS工具,它专注于地图投影的表达以及转换,采用一种非常简单明了的投影表达,比其它的投影定义简单,功能主要有经纬度与地理坐标系的转换,坐标系的转换,很容易就能看到各种地理坐标系和地图投影的参数。在 Linux下除了可以直接运行外,还可以作为库来进行更高功能的开发。
$ wget http://download.osgeo.org/proj/proj-4.9.1.tar.gz
$ wget http://download.osgeo.org/proj/proj-datumgrid-1.5.tar.gz
$ tar xzf proj-4.9.1.tar.gz
$ cd proj-4.9.1/nad
$ tar xzf ../../proj-datumgrid-1.5.tar.gz
$ cd ..
  • 安装GDAL,Geospatial Data Abstraction Library (GDAL)是使用C/C++语言编写的用于读写空间数据的一套跨平台开源库。现有的大部分GIS或者遥感平台,不论是商业软件ArcGIS,ENVI还是开源软件GRASS,QGIS,都使用了GDAL作为底层构建库。GDAL库由OGR和GDAL项目合并而来,OGR主要用于空间要素矢量矢量数据的解析,GDAL主要用于空间栅格数据的读写。GDAL主要提供了三大类数据的支持:栅格数据,矢量数据以及空间网络数据(Geographic Network Model)。当我们在Python中调用GDAL的API函数时,其实底层执行的是C/C++编译的二进制文件。
$ wget http://download.osgeo.org/gdal/2.2.2/gdal-2.2.2.tar.gz
$ tar xzf gdal-2.2.2.tar.gz
$ cd gdal-2.2.2
$ ./configure
$ make # 大概需要7~8min
$ sudo make install
$ cd ..
sudo apt-get install postgresql //安装完成后,PostgreSQL服务器会默认在本机的5432端口开启
sudo apt-get install pgadmin3	//安装图形管理界面
sudo -u postgres createuser --superuser user  //创建数据库用户user,并指定其为超级用户
sudo -u postgres psql  //登录数据库控制台
postgres=# \password user  
Enter new password: 
Enter it again:    //设置dbuser用户的密码
postgres=# \q      //完成后退出控制台
sudo -u postgres createdb -O user databasename    //创建数据库databasename,并指定所有者为user
psql -U user -d databasename -h 127.0.0.1 -p 5432 //新用户的名义登录数据库,这时使用的是psql命令
sudo apt-get install postgis
故障排除
  • 一定要注意版本问题,如果还有无法解决的错误,建议查看官方文档。
  1. 检验 GEOS:在 GDAL 目录下,执行./configure,如果出现 GEOS support = yes,安装成功;
  2. 检验 GDAL:在终端输入 gdalinfo --version 命令显示 GDAL 2.2.2, released 2017/09/15 ,成功;
  3. 配置 geodjango 环境时,因为操作系统无法加载从源构建的库目录,导致绝大多数错误是外部共享库不能被加载,参考官方提示,经过以下配置就好了?
// 将库路径user/local/bin加入到LD_LIBRARY_PATH
vi ~/bashrc  
export LD_LIBRARY_PATH=/usr/local/lib 
// 设置系统库路径  
$ sudo echo /usr/local/lib >> /etc/ld.so.conf
$ sudo ldconfig

参考链接

GEOS库一些自己的见解和注意点
PROJ4初探
GDAL简介
PostgreSQL新手入门
高质量编码-GIS搜索框前端实现
shapefile数据文件组成

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GeodjangoDjango 框架的一个扩展,它提供了与地理空间相关的功能和数据库模型。如果你想在 Django 项目中使用地理空间数据,例如点、线、多边形等,可以考虑使用 Geodjango。 下面是一些使用 Geodjango简单步骤: 1. 安装 Geodjango 扩展。可以通过 pip 命令安装,如下所示: ``` pip install geodjango ``` 2. 在 Django 项目的 settings.py 文件中添加以下内容: ``` INSTALLED_APPS = [ ... 'django.contrib.gis', ... ] DATABASES = { 'default': { 'ENGINE': 'django.contrib.gis.db.backends.postgis', 'NAME': 'your_database_name', 'USER': 'your_database_user', 'PASSWORD': 'your_database_password', 'HOST': 'localhost', 'PORT': '5432', } } ``` 其中,`django.contrib.gis` 是必须的应用,`django.contrib.gis.db.backends.postgis` 是 PostgreSQL 数据库的后端,如果使用其他数据库,则需要相应更改。 3. 在 Django 项目中定义地理空间模型。可以在 models.py 文件中定义模型类,例如: ``` from django.contrib.gis.db import models class PointOfInterest(models.Model): name = models.CharField(max_length=255) location = models.PointField() ``` 其中,`location` 是一个 PointField 类型的字段,用于存储地理位置信息。 4. 在 Django 项目中进行地理空间查询。可以使用 Django ORM 提供的查询 API,例如: ``` from django.contrib.gis.geos import Point from myapp.models import PointOfInterest p1 = Point(-122.4194, 37.7749) # 创建一个 Point 对象 pois = PointOfInterest.objects.filter(location__distance_lte=(p1, 10000)) # 查询距离 p1 不超过 10000 米的 PointOfInterest 对象 ``` 以上是使用 Geodjango简单步骤,还有更多高级用法和 API 可以参考官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值