postgresql自定义方法创建之坐标的自动转换

postgresql导入点类型的空间数据,一般会提供xy坐标(或者lon和lat)字段,一般的工具并没有提供转换为空间数据的功能。此时,我们需要提供一些方法或者触发器来实现空间字段的自动更新。而xy坐标在导入的时候也会存在两种情况,一种是以度分秒的字符串形式提供,一种是小数的方式提供。所以这里我们还要提供一个针对坐标的归一化函数。下面就是相关设计的方法方法代码。

1.坐标标准化处理函数

CREATE or replace FUNCTION public.translate_coor(tude varchar) RETURNS NUMERIC  AS $$
DECLARE data varchar[];
BEGINif like(tude,'%°%') then SELECT (regexp_split_to_array(tude, '[°′''"″]')) into data;return CAST(data[1] as numeric) + CAST(data[2] as numeric) / 60 + CAST(data[3] as numeric)/3600;else return cast(tude as numeric);end if;
END;
$$ LANGUAGE plpgsql;

在实际的数据中,度分秒有时候并不是,°′″,至于分有的数据为了方便输入采用单引号',秒采用双引号",所以这里通过正则表达式进行了不同情况的处理。另外,对于小数的形式数据直接返回。

2.更新geom空间函数

CREATE or replace function public.fill_geom(tbl varchar,x_field varchar,y_field varchar,srid int=4326) RETURNS int AS $$
BEGINif(srid = 0) THENsrid = 4326;end if;EXECUTE format('update %s set geom=st_geomfromewkt(''srid='|| srid || ';point(''||translate_coor(%s)||'' '' || translate_coor(%s)|| '')'');', tbl,x_field,y_field);return 0;
END;
$$ LANGUAGE plpgsql;

注意:

  • tbl:表名
  • x_field:x坐标的字段名称
  • y_field:y坐标的字段名称
  • srid:默认为4326。

3.创建触发器函数

3.1 创建触发器对应函数

CREATE or replace FUNCTION public.fun_insert_meteorological() RETURNS "pg_catalog"."trigger"  AS $$
BEGINif((new.lon ~ '^\d+°(\d+[′''](\d+(\.\d+)?[″"])?)?$' and new.lat ~ '^\d+°(\d+[′''](\d+(\.\d+)?[″"])?)?$') or ( new.lon ~ '^\d+(\.\d+)?$' and new.lat ~ '^\d+(\.\d+)?$')) then new.geom=st_geomfromewkt('srid=4326;point(' || translate_coor(new.lon) || ' ' || translate_coor(new.lat) || ')');end if;return NEW;
END;
$$ LANGUAGE plpgsql;

这里对度分秒的格式通过正则表达式进行了验证。如果不满足,这里按照不执行更新操作。大家可以根据实际进行调整。

3.2 创建触发器

CREATE TRIGGER "meteorological_insert_update_trigger" BEFORE INSERT OR UPDATE ON "public"."meteorological"
FOR EACH ROW
EXECUTE PROCEDURE "public"."fun_insert_meteorological"();

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

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

相关文章

回归预测 | MATLAB实现BiLSTM双向长短期记忆神经网络多输入多输出预测

回归预测 | MATLAB实现BiLSTM双向长短期记忆神经网络多输入多输出预测 目录 回归预测 | MATLAB实现BiLSTM双向长短期记忆神经网络多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 MATLAB实现BiLSTM双向长短期记忆神经网络多输入多输出预测&#x…

el-row的@click.stop并没有阻止事件冒泡,还是会触发外层div的点击事件

当点击一个元素时,会进行冒泡,一直触发到父元素。可以通过给click加stop来阻止事件冒泡,如:click.stop“search_maf_version(version)”,但是发现给el-row加上click.stop并没有生效,还是会触发外部的点击事…

第二讲:BeanFactory的实现

BeanFactory的实现 1. 环境准备2. 初始化DefaultListableBeanFactory3. 手动注册BeanDefinition4. 手动添加后置处理器5. 获取被依赖注入的Bean对象6. 让所有的单例bean初始化时加载7. 总结 Spring 的发展历史较为悠久,因此很多资料还在讲解它较旧的实现&#xff0c…

中间件(上)

1、何为中间件: 中间件(Middleware)是指位于操作系统和应用程序之间的一层软件层,用于提供各种服务和功能,以帮助不同的应用程序、系统或组件进行通信、交互和协作。中间件可以看作是在不同计算机或系统之间建立连接和…

时序预测 | MATLAB实现基于CNN-BiLSTM卷积双向长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价)

时序预测 | MATLAB实现基于CNN-BiLSTM卷积双向长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于CNN-BiLSTM卷积双向长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍…

iTOP-RK3568开发板ubuntu环境下安装Eclipse

eclipse 是使用 Java 语言开发的,一个 Java 应用程序,这意味着 eclipse 只能运行在 Java虚拟机上。倘若没有安装 JDK(Java Development Kit),即使在 ubuntu 上安装了 eclipse,也不能运行,所以要…

正则表达式在PHP8中的应用案例-PHP8知识详解

正则表达式在php8中有许多应用案例。以下是一些常见的应用场景:如数据验证、数据提取、数据替换、url路由、文本搜索和过滤等。 1、数据验证 使用正则表达式可以对用户输入的数据进行验证,例如验证邮箱地址、手机号码、密码强度等。 下面是一个用正则表…

漏洞指北-VulFocus靶场专栏-入门

漏洞指北-VulFocus靶场01-入门 VulFocus靶场前置条件:入门001 命令执行漏洞step1: 输入默认index的提示step2: 入门002 目录浏览漏洞step1:进入默认页面,找到tmp目录step2 进入tmp目录获取flag文件 VulFocus靶场前置条…

GuLi商城-前端基础Vue指令-单向绑定双向绑定

什么是指令? 指令 (Directives) 是带有 v- 前缀的特殊特性。 指令特性的预期值是:单个 JavaScript 表达式。 指令的职责是,当表达式的值改变时,将其产生的连带影响,响应式地作用于DOM 例如我们在入门案例中的 v-on,代表绑定事…

抓住WhatsApp 营销风口,做全球电商领跑者

您的电子邮件营销活动效果是否一直不理想?不妨考虑 WhatsApp营销,一种实时通讯营销,可帮助企业接触更广泛的受众,与客户建立个人联系并最终增加销售额。还可以再借助具有强大功能的全渠道客户服务工具,例如SaleSmartly…

Java序列化和反序列化操作

fastjson可以实现java的序列化和反序列化操作&#xff0c;这里使用serialize的方法重新写序列化方法改写成JSON格式&#xff0c;方便通信与读写。 首先定义FastJsonRedisSerializer.java内容 public class FastJsonRedisSerializer<T> implements RedisSerializer<T&…

c#后端获实体类多列最大值

如何在一个返回一个实体求某些列的最大值&#xff0c;最小值&#xff0c;平均值&#xff0c;求和呢&#xff1f; 过去一直都是用的循环对比&#xff0c;没有进行归纳&#xff0c;或者就是最笨的办法 var demos new List<Demo>();foreach (var item in demos){var values…

idea插件推荐——mybatis log plugin快速查看运行SQL

我们在编写代码的时候一定会编写SQL&#xff0c;简单的SQL我们一般不会出错但是如果遇到了mybatis中的复杂动态SQL&#xff0c;我们可能就会出现一些问题&#xff0c;为了在开发自测阶段及时发现处理问题&#xff0c;我们需要快速查看编译得到的SQL&#xff0c; log4j 的打印的…

[Go版]算法通关村第十三关青铜——数字数学问题之统计问题、溢出问题、进制问题

这里写自定义目录标题 数字统计专题题目&#xff1a;数组元素积的符号思路分析&#xff1a;无需真计算&#xff0c;只需判断负数个数是奇是偶复杂度&#xff1a;时间复杂度 O ( n ) O(n) O(n)、空间复杂度 O ( 1 ) O(1) O(1)Go代码 题目&#xff1a;阶乘尾数0的个数思路分析&am…

​怎么将物理机硬盘克隆到虚拟机?

​用户案例&#xff1a;克隆后的硬盘是否能用于虚拟机&#xff1f; “我有一台安装了Windows10的计算机&#xff0c;现在正在尝试克隆电脑上的硬盘。然后我想把这个硬盘放在自己的虚拟机中使用&#xff0c;这样我就可以从克隆的硬盘中启动相同的Windows10系统。” …

最新消息:谷歌将在Chromebook上运用UWB技术,无线通信更上一层

超宽带&#xff08;UWB&#xff09;技术是一种创新的短距离无线通信技术&#xff0c;具有高速数据传输和精确定位物体位置的优势。尽管该技术已经存在一段时间&#xff0c;但最近开始广泛应用于各种设备中。据最新报道&#xff0c;Pixel Watch 2可能会搭载UWB模块&#xff0c;这…

RTSP/Onvif流媒体服务器EasyNVR安防视频平台一直提示网络请求失败的问题解决方案

EasyNVR平台优秀的视频能力在于通过RTSP/ONVIF协议&#xff0c;将前端接入设备的音视频资源进行采集&#xff0c;并转码成适合全平台、全终端分发的视频流格式&#xff0c;包括RTMP、RTSP、FLV、HLS、WebRTC等格式。 有用户反馈&#xff0c;EasyNVR使用过程中&#xff0c;突然提…

C++入门:命名空间与输入输出

目录 1.命名空间 1.1 命名空间的定义 1.2 命名空间的使用 1.3 标准命名空间 std 2.C输入输出 我们在初学C时&#xff0c;经常会在代码开头看到这样的一行代码&#xff1a; using namespace std; 这行代码到底什么意思呢&#xff1f;我们学完命名空间就可以理解了。 1.命…

Redis进阶底层原理- Redis结构图与底层数据编码结构

Redis底层原理篇&#xff0c;​让学习绚丽多彩起来&#xff01;&#xff01;&#xff01;&#xff08;需要原图私信&#xff09;

四川天蝶电子商务:2023短视频运营分析

短视频运营分析是指通过对短视频平台上的各种数据进行收集、整理和分析&#xff0c;以寻找出视频内容、用户活跃度、用户行为等方面的规律和问题&#xff0c;从而为短视频平台的运营决策提供依据。下面将从几个方面具体介绍短视频运营分析的重要性和方法。 首先&#xff0c;短…