首页 > 其他分享 >Django 扩展地理空间数据(GeoDjango)详细操作

Django 扩展地理空间数据(GeoDjango)详细操作

时间:2024-10-19 21:45:55浏览次数:10  
标签:gis Django django 空间数据 地理 contrib GeoDjango GDAL

综述:要在django中处理地理空间数据,首先要保证django框架支持处理地理空间数据,其次项目用到的数据库也应该支持存储地理数据,本小结介绍的是python3.12+django(后端技框架)+vue(前端框架)+postgresql(数据库);

在 Django 中处理地理空间数据的存储和查询,涉及到以下几个关键步骤:

1.扩展数据库以支持地理空间数据

        之前已经发布过该方法的帖子,可以去看看,这里不再赘述。

windows下在Postgresql数据库中扩展postgis功能实现存储空间地理数据_windows pgsql 添加扩展-CSDN博客

2.在 Django 中配置 GDAL 以支持地理空间数据:

2.1下载 GDAL 二进制文件

        下载与你的 Python 版本和系统架构(32位或64位)相匹配的 GDAL .whl 文件,具体下载链接在下述文章中,感谢这位老师的分享Python第三方GDAL库安装(离线库下载资源)_gdal离线安装-CSDN博客

        我的电脑是Windows10 64位、Python3.12.0,就下载GDAL-3.8.4-cp312-cp312-win_amd64.whl,其中 3.8.4表示的是GDAL的版本,cp312就是Python3.12的意思,win_amd64对应的是操作系统。

2.2安装 GDAL

        在终端pip下载的好的.whl 文件,需要注意路径,pip install gdal版本的文件名.whl时应该在.whl 文件实际存储路径下进行:

pip install gdal版本的文件名.whl

        例如,如果文件名为 GDAL-3.3.3-cp39-cp39-win_amd64.whl,则命令为:

pip install GDAL-3.3.3-cp39-cp39-win_amd64.whl

 2.3验证安装

        在 Django shell 中尝试导入 django.contrib.gis 来验证 GDAL 是否正确安装和配置:

python manage.py shell
>>> from django.contrib.gis import gdal

        在shell命令中显示gdal已经安装,但是当执行迁移时,仍然提示未找到GDAL:

raise ImproperlyConfigured(
django.core.exceptions.ImproperlyConfigured: Could not find the GDAL library (tried "gdal307", "gdal306", "gdal305", "gdal304", "gdal303", "gdal302", "gdal301", "gdal300", "
gdal204"). Is GDAL installed? If it is, try setting GDAL_LIBRARY_PATH in your settings.

        这里是重点:你需要在django的settings文件里手动指定一下GDAL_LIBRARY_PATH和GEOS_LIBRARY_PATH两个文件的路径,如果你成功pip了.whl文件,则gdal和geos应该会在python解释器的lib文件夹下(python3.12.2\Lib\site-packages\osgeo),将两个重要文件添加到settings文件下:

GDAL_LIBRARY_PATH = r'E:\python3.12.2\Lib\site-packages\osgeo\gdal.dll'
GEOS_LIBRARY_PATH = r'E:\python3.12.2\Lib\site-packages\osgeo\geos_c.dll'

3.Django的 settings中配置

3.1数据库使用空间数据库引擎

        例如 PostGIS:

        (django.contrib.gis.db.backends.postgis   前提是你的数据库扩展了postgis功能)

DATABASES = {
    'default': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis',
        'NAME': 'your_database_name',
        'USER': 'your_database_user',
    }
}

3.2 INSTALLED_APPS中添加gis插件

INSTALLED_APPS = [
    'corsheaders',
    'django.contrib.gis',   # 这个
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

 3.3关闭中间件csrf拦截

        主要作用就是前端通过axios向后端发送post请求时。不会被拦截:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',  这个
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

 4.地理空间字段

        当上述步骤都进行完毕以后,在django的models层中就可以正确设置空间地理字段,并生成迁移文件和执行迁移:

from django.contrib.gis.db import models as gis_models

class GeometryModel(gis_models.Model):
    # 设置特定区域   区域名称   区域描述  面积   多个点确定一个区域
    name = models.CharField(max_length=100, verbose_name='区域名称')
    description = models.TextField(max_length=200, verbose_name='区域描述')
    area = models.FloatField(verbose_name='面积',default=0.0)  # 假设area是一个浮点数类型的字段)  # 单位为平方米
    geom = gis_models.MultiPointField(srid=4326, verbose_name='区域坐标')  # 使用 PolygonField 来存储多边形

        上述的geom字段就是一个地理空间字段,用来存储多个坐标点,其在后端展示如下图:

        SRID=4326;MULTIPOINT (119.215969 34.602489, 119.224616 34.603649, 119.223238 34.611877, 119.214353 34.610517, 119.215969 34.602489)是一个地理空间数据的表示,使用 Well-Known Text (WKT) 格式定义的多点 (MultiPoint) 几何对象:

  • SRID: 空间参考系统标识符 (Spatial Reference System Identifier) 是一个唯一的数字,用来指定坐标系。在这个例子中,SRID 为 4326,它代表 WGS 84 坐标系,这是由全球定位系统 (GPS) 使用的坐标系,也是大多数地图和地理空间数据的标准坐标系。

  • MULTIPOINT: 这是几何类型,表示一个由多个点组成的集合。在地理空间数据库中,它用来存储多个位置。

  • 坐标: 括号内的数字对代表点的经度和纬度。每一对数字代表一个点,按顺序列出。在这个例子中,有五个点:

    • 第一个点是 (119.215969, 34.602489)
    • 第二个点是 (119.224616, 34.603649)
    • 第三个点是 (119.223238, 34.611877)
    • 第四个点是 (119.214353, 34.610517)
    • 第五个点是 (119.215969, 34.602489),注意这个点与第一个点相同,表明这是一个闭合的多点形状。

        这个多点形状可以用来表示一个地理区域中的多个位置,例如,城市中的几个不同兴趣点或一个多边形区域的顶点。在地理信息系统 (GIS) 和其他地理空间分析工具中,这样的数据可以用来进行各种空间查询和分析。

5.总结

        本文主要介绍了django框架扩展GeoDjango的方式,如何使用django来存储地理空间数据,比如说:经纬度点、多边形等,后续将继续介绍如何在views层对数据进行操作,以及前端如何接收或向后端传递地理空间数据。

标签:gis,Django,django,空间数据,地理,contrib,GeoDjango,GDAL
From: https://blog.csdn.net/weixin_50845028/article/details/143084383

相关文章

  • 【开题报告】基于django+vue企业设备管理系统(论文+源码)计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着企业规模的扩大和生产设备的日益复杂化,设备管理工作逐渐成为企业运营中不可或缺的一环。传统的人工管理方式不仅效率低下,而且容易出错......
  • Django drf jwt token认证前后端使用流程
    在DjangoRestFramework(DRF)中使用JWT(JSONWebToken)进行认证时,前后端需要配合工作。下面是DRF使用JWT认证的一个基本流程。后端部分安装必要的库:需要安装djangorestframework和djangorestframework-simplejwt两个库。后者是处理JWT的工具。pipin......
  • 【Python技术之Django精品教学】第11课--Python Django 迁移
    PythonDjango迁移没有这样的表?-product/models.py中定义的类仅仅是我们的数据库的概念,但它并没有在数据库中创建任何表。我们可以认为类Phone是概念性的模式。在创建任何表之前,如果我们试图访问创建前的表,它将抛出这样的错误。OperationalErrorat/admin/product/phone/......
  • 【Python技术之Django精品教学】第13课--Django模型集–2
    Django模型集–2模型字段–模型字段定义了将被存储在所提供的变量中的数据类型。要存储价格,整数类型更适合。要存储高度、长度等,浮动/十进制类型更合适。要存储标题或标题,最好是提供字符限制。对于写一篇文章,最好有一个没有字符限制的文本框。示例:Price=models.Integer......
  • 大数据毕业设计基于python的京东食品数据分析和可视化django+可视化大屏分析
    文章目录前言详细视频演示一、项目介绍二、功能介绍三、核心代码数据库参考四、效果图五、文章目录前言  基于Python的京东食品数据分析和可视化项目涉及多个步骤,包括数据收集、数据清洗、数据分析以及数据可视化。由于直接获取京东食品数据的API可能受限或需要......
  • python+vue基于django/flask的在线投票管理系统java+nodejs-计算机毕业设计
    目录技术栈和环境说明具体实现截图预期达到的目标系统设计详细视频演示技术路线解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示研究方法感恩大学老师和同学源码获取技术栈和环境说明本系统以Python开发语言......
  • python+vue基于django/flask的美食分享推荐系统Java+nodejs-计算机毕业设计
    目录技术栈和环境说明具体实现截图预期达到的目标系统设计详细视频演示技术路线解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示研究方法感恩大学老师和同学源码获取技术栈和环境说明本系统以Python开发语言......
  • 微信小程序python flask django火锅店点餐订餐系统
    目录项目介绍具体实现截图技术介绍HBuilderX协同过滤算法java类核心代码部分展示其他springboot项目推荐详细视频演示源码获取项目介绍火锅店点餐系统,主要包括管理员与用户二个权限角色,对于用户角色不同,所使用的功能模块相应不同。本文从管理员、用户的功能要求出发......
  • 博客-django--路由分发--找不到app的views--解决办法
    博客-django--路由分发--找不到app的views--解决办法bash先给出我的项目文件目录结构主要是主目录project与app01省略了migrations问题问题出现在路由分发中以下是主urls以下是app的urls解决方式需要使用相对路径.思考其实正常的话使用绝对路径也可以,如参考代码mysite2项目---目......
  • 【开题报告】基于django+vue汽车租赁系统设计与实现(论文+源码)计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着城市化进程的加速和人们生活水平的提高,汽车租赁作为一种便捷、灵活的出行方式,逐渐受到广大消费者的青睐。传统的汽车租赁模式存在信息......