【GeoDjango框架解析】空间方法的ORM查询

news2024/9/20 8:55:05

原文作者:我辈理想
版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。

Django数据操作-ORM

第一章 【Django开发入门】ORM的增删改查和批量操作
第二章 【Django开发入门】ORM查询分页以及返回Json格式


文章目录

  • Django数据操作-ORM
  • 前言
  • 一、开发环境搭建
  • 二、参数查询空间方法
    • 1.点的查询
    • 2.圆的查询
    • 3.多边和多多边
  • 三、聚合的空间方法
    • 1.IsValid是否是有效图形
    • 2.MakeValid建立有效几何图形
    • 3.Union建立2个图形并集
    • 4.Intersection建立2个图形交集
    • 5.Transform转换SRID坐标系
    • 6.面积计算
    • 7.Buffer建立缓冲区
    • 8.其他


前言

通过前面的ORM使用,我们看到ORM在开发中可以提供很大便利,基于国内讲解Geodjango使用的教程比较少,我这里整理了基于postgis数据库的orm空间查询的相关方法。
如果使用的是其他数据库,不能保障空间方法生效。


一、开发环境搭建

开发环境很是重要,尤其是geodjango环境搭建会出现很多问题,我在其他博客中已经给出相关介绍,可以参考。

【GeoDjango框架解析】配置geodjango开发环境
【Linux安装数据库】Ubuntu安装postgresql并连接navicat添加链接描述
【GeoDjango框架解析】conda环境下安装psycopy2版本问题

二、参数查询空间方法

因为业务的关系,我这里主要介绍的都是包含的处理方法,包括点、圆、多边范围查询。

1.点的查询

search_dict = {}
# point是history表的一个字段 models.PointField("点", null=True)
q = Q(geom__contains=history.point)
A.objects.filter(**search_dict).filter(q)

2.圆的查询

search_dict = {}
# point是history表的一个字段 models.PointField("点", null=True)
# diameter是圆的半径,单位m
q = Q(geom__distance_lte=(history.point, str(history.diameter)))
A.objects.filter(**search_dict).filter(q)

3.多边和多多边

search_dict = {}
# geometrycollection是history表的一个字段 
# geometrycollection = models.GeometryCollectionField('混合数据', null=True)
q = Q(geom__intersects=history.geometrycollection)
A.objects.filter(**search_dict).filter(q)

三、聚合的空间方法

在geodjango中使用的空间方法都是基于aggregate的方法,这里需要掌握django的聚合方法。

其实django官网给出了相关方法,但是没有相关样例,使用过程中很难嵌入orm查询。我这里找到一个中文版的文档。接下来我会以我实际使用的相关功能来介绍。
在这里插入图片描述

1.IsValid是否是有效图形

2.MakeValid建立有效几何图形

3.Union建立2个图形并集

4.Intersection建立2个图形交集

5.Transform转换SRID坐标系

6.面积计算

虽然官方文档提供了相关函数,但是那个给出的面积不是真实的面积,需要使用Transform转换为3857坐标系后的面积

7.Buffer建立缓冲区

country = County.objects.filter(name='中华人民共和国', type='country').first()
# 判断点是否在国界线内,point_ 的结果是True 和False
point = 'POINT(116 38)'
point_ = country.geom.contains(point)

# 因为country的几何图形可能存在不规则,需要用buffer,width的单位是度数(经纬度)
point_ = country.geom.buffer(width=0.01).contains(point)

8.其他

pic_in = pics.aggregate(in_area=Area(Intersection(Union(MakeValid('geom')), search_geom)))
print('pic_in', pic_in['in_area'])
cover_area = pic_in['in_area'].sq_km
cover_area = pic_in['in_area'].sq_m

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/449278.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中国人民大学与加拿大女王大学金融硕士——在职读研该如何平衡学习与工作呢

边工作边考研,对于所有人来说都是个不小的挑战,每年都有大量在职生因为焦躁、压力而中途离场。学习时间碎片化,复习进度特别容易被工作上的事情所打断,再想“重新启动”就会很难。想要节省备考时间建议你读免联考的中外合作办学项…

基于Canvas实现图片的上传和渲染

1 Canvas 1.1 什么是Canvas 是一个可以使用脚本 (通常为JavaScript) 来绘制图形的 HTML 元素。例如&#xff0c;它可以用于绘制图表、制作图片构图或者制作简单的动画。 1.2 基本使用 宽高&#xff1a; <canvas id"tutorial" width"150" height&qu…

<C++>C++入门

目录 前言 一、C关键字&#xff08;C98&#xff09; 二、命名空间 1. 命名空间定义 2. 命名空间的使用 3. 命名空间的使用有三种方式&#xff1a; 三、C输入&输出 四、缺省参数 1. 缺省参数概念 2. 缺省参数的分类 3. 缺省参数的应用 五、函数重载 六、引用 1. 引用的概念…

web实验(2)

&#xff08;1&#xff09; 应用html标签和css完成如下所示页面效果&#xff0c;图片见附件。 说明&#xff1a; 内容相对于浏览器居中,宽860px鼠标移动至列表项上&#xff0c;显示背景色#F8F8F8分割线2px solid #ccc&#xff0c;每项高130px第一行文字&#xff1a;20px 黑体…

4.功能权限

基于角色的权限控制&#xff0c;用户分配角色&#xff0c;角色分配菜单。 1. 权限注解 1.基于【权限标识】的权限控制 权限标识&#xff0c;对应 system_menu 表的 permission 字段&#xff0c;推荐格式为 {系统}:{模块}:{操作}&#xff0c;例如说 system:admin:add 标识 sy…

chatgpt智能提效职场办公-ppt怎么做才好看又快

作者&#xff1a;虚坏叔叔 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; 制作ppt有几个方面可以考虑&#xff0c;以实现既好看又快速的目的&#xff1a; 使用模板&#xff1a;使用ppt模板可以更快速地制作出一…

JavaScript概述二(Date+正则表达式+Math+函数+面向对象)

1.Date 1.1 new一个Date对象表示当前系统时间 var nownew Date(); console.log(now);1.2 根据传入的时间格式表示时间 var date1new Date(2023-4-20 00:16:40); console.log(date1); 1.3 传入时间毫秒数&#xff0c;返回从1900年1月1日8时&#xff08;东八区&#xff09;X分X…

C语言入门篇——操作符篇

目录 1、操作符分类 2、操作符的属性 3、算术操作符 4、移位操作符 5、位操作符 6、赋值操作符 7、单目操作符 8、关系操作符 9、逻辑操作符 10、条件操作符 11、逗号操作符 12、下标引用、函数调用和结构成员 1、操作符分类 算术操作符&#xff08;&#xff0c;-&…

办公必备!不再被格式问题困扰,轻松搞定文档转换!

大家平时在工作中会需要将文档转换为其他格式吗&#xff1f; 日常工作中&#xff0c;经常碰到需要文件格式转换的情况&#xff0c;对于掌握了一些转换技能的朋友说&#xff0c;文件格式转换自然不在话下 对于不熟练的朋友来说&#xff0c;想要轻松转换文件格式&#xff0c;就…

c++ std::enable_shared_from_this作用

enable_shared_from_this 是什么 std::enable_shared_from_this 是一个类模板&#xff0c;用来返回指向当前对象的shared_ptr智能指针。在说明它的作用前我们可以看一下如下代码&#xff1a; demo.cpp #include <memory> #include <iostream>class A { public:A…

web实验(3)

应用JavaScript编写留言的功能&#xff0c;在文本中输入文字提交后&#xff0c;在下方进行显示。 提示&#xff1a;可将下方内容以列表体现&#xff0c;提交时动态创建列表的项。可使用以下两种方式之一的方法&#xff1a; 使用CreateElenment动态创建li标签及li中的文本 在列…

PADS-LOGIC项目原理图设计

最小板原理图设计 目录 1 菜单与工具使用 2 常用设置 2.1选项卡 2.2 图纸设置 2.3 颜色设置 3 设计技巧 3.1 模块化设计思路 3.2 元件放置 3.3 走线及连接符 4 原理图绘制 4.1 POWER原理图设计 4.2 MCU原理图设计 4.2.1晶振电路 4.2.2复位电路 4.2.3 BOOT电路 …

Windows 11快捷键功能大全 28个Windows 11快捷键功能介绍

Windows 11快捷键功能大全 28个Windows 11快捷键功能介绍 1. WinA 打开快速设置面板2. WinB 快速跳转系统托盘3. WinC 打开Microsoft Teams4. WinD 快速显示桌面5. WinE 打开资源管理器6. WinF 一键提交反馈7. WinG 启动Xbox Game Bar8. WinH 语音听写9. WinI 打开设置10. WinK…

如何正确高效地学习android开发?

每一个能成为行业大佬的人&#xff0c;一定有自己独特的方法… 之所以能成为大佬&#xff0c;是因为他们会有自己独特的见解&#xff0c;在一次次的尝试中不断否定&#xff0c;然后一次次的确定&#xff0c;一个程序员想要精益求精&#xff0c;必须要有高效的学习方法和良好的…

Spring Cloud Alibaba基于Sentinel实现限流降级自定义配置结果

hello&#xff0c;你好呀&#xff0c;我是灰小猿&#xff0c;一个超会写bug的程序员&#xff01; sentinel作为SpringCloudAlibaba的基本组件&#xff0c;在进行熔断、限流、降级等方面具有十分重要的作用&#xff0c;而且其基于Web界面对接口进行限流配置&#xff0c;使得实时…

环形链表II(链表篇)

给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整…

伪原创文章生成器-伪原创工具在线使用

文章伪原创工具 在如今数字时代&#xff0c;内容创作已经成为了一项必不可少的营销策略。然而&#xff0c;创作原创内容需要相当的时间和精力&#xff0c;尤其是对于需要大量输出内容的企业或个人而言。这时&#xff0c;文章伪原创工具就成为了一种快速、高效的选项。在本文中…

Doris(15):物化视图

1 概念 物化视图是将预先计算&#xff08;根据定义好的 SELECT 语句&#xff09;好的数据集&#xff0c;存储在 Doris 中的一个特殊的表。 物化视图的出现主要是为了满足用户&#xff0c;既能对原始明细数据的任意维度分析&#xff0c;也能快速的对固定维度进行分析查询。 首…

【C++】布尔类型(bool)

目录​​​​​​​ 1、缘起 2、笔记整理 4、用法 4.1、布尔变量的定义和初始化 4.2、布尔类型的运算符 4.3、布尔类型的条件语句 4.4、布尔类型的循环语句 5、总结 1、缘起 最近在 BiliBili 黑马程序员学习 C 编程语言&#xff0c;今天学习到了 布尔&#xff08;b…

算法套路十二——回溯法之排列型回溯

算法套路十二——回溯法之排列型回溯 该节是在第十节回溯法之子集型回溯的基础上进行描写&#xff0c;组合型回溯会在子集型回溯的基础上判断所选子集是否符合组合要求&#xff0c; 故请首先阅读第十节算法套路十——回溯法之子集型回溯 算法示例一&#xff1a;LeetCode46. 全…