基于postgis实现坐标转换的几个函数

news/2024/7/9 22:47:30 标签: postgresql, postgis, 存储过程, 坐标转换

1. 度分秒转换为小数

CREATE OR REPLACE FUNCTION "public"."translate_coor"("degree" varchar)
  RETURNS "pg_catalog"."numeric" AS $BODY$
DECLARE data varchar[];
BEGIN
  if 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;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100

2. 填充地理信息字段

通过表已知的xy坐标转换为geom字段

CREATE OR REPLACE FUNCTION "public"."fill_geom"("tbl" varchar, "x_field" varchar, "y_field" varchar, "srid" int4=4326)
  RETURNS "pg_catalog"."int4" AS $BODY$
BEGIN
  if(srid = 0) THEN
		srid = 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;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100
  • tbl:表名称
  • x_field:经度的字段名称
  • y_field:维度的字段名称
  • srid:选填,int4,默认为4326

3. 触发器实现数据插入自动计算geom

CREATE OR REPLACE FUNCTION "public"."fun_insert_meteorological"()
  RETURNS "pg_catalog"."trigger" AS $BODY$
BEGIN
  if((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;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100

http://www.niftyadmin.cn/n/5009969.html

相关文章

DGIOT-Modbus-RTU控制指令05、06的配置与下发

[小 迪 导 读]:伴随工业物联网在实际应用中普及,Modbus-RTU作为行业内的标准化通讯协议。在为物联网起到采集作用的同时,设备的控制也是一个密不可分的环节。 场景解析:在使用Modbus对设备进行采集后,可以通过自动控制…

OpenCV之形态学操作

形态学操作包含以下操作: 腐蚀 (Erosion)膨胀 (Dilation)开运算 (Opening)闭运算 (Closing)形态梯度 (Morphological Gradient)顶帽 (Top Hat)黑帽(Black Hat) 其中腐蚀和膨胀操作是最基本的操作,其他操作由这两个操作变换而来。 腐蚀 用一个结构元素…

【Java 基础篇】Java日期和时间格式化与解析指南:SimpleDateFormat详解

日期和时间在软件开发中经常被用到,无论是用于记录事件、计算时间间隔还是格式化日期以供用户友好的展示。Java 提供了强大的日期和时间处理工具,其中 SimpleDateFormat 类是一个重要的工具,用于格式化日期和时间,同时也支持解析日…

VUE 程序的执行过程(非常非常重要)

在Vue.js应用程序中&#xff0c;index.html和main.js的执行顺序是&#xff1a; 1. 首先&#xff0c;浏览器加载index.html文件。 2. 在index.html文件中&#xff0c;通过<script>标签引入了main.js文件。 3. 当浏览器遇到<script>标签时&#xff0c;它会停止解析H…

【漏洞复现】时空智友企业流程化管控系统文件上传

漏洞描述 通过时空智友该系统,可让企业实现流程的自动化、协同上提升、数据得洞察及决策得优化,来提高工作效率、管理水平及企业的竞争力。时空智友企业流程化 formservice接口处存有任意文件上传漏洞,未经认证得攻击者可利用此接口上传后门程序,可导致服务器失陷。 免责…

信源编码 | 无线通信基础知识

一、信源编码 目的&#xff1a;减少冗余&#xff0c;提高有效性 码的分类&#xff1a;非奇异码、惟一可译码、即时码(前缀码) 码树&#xff1a;如果所有叶子都用了&#xff0c;则有 ∣ χ ∣ − 1 |\chi|-1 ∣χ∣−1是 D − 1 D-1 D−1的整数倍&#xff0c; ∣ χ ∣ |\chi|…

2分钟讲清楚C#的委托, C语言的函数指针,Java的函数式接口

很多小伙伴学习C# 的委托时往往一头雾水, 不明白委托是什么, 有什么作用, 今天我就用2分钟讲清楚 这是一个C# 的控制台程序 定义一个最简单的委托 delegate int Calculate(int a, int b); 这相当于定义了一个Calculate类型, 只不过这个类型需要传入2个int类型的参数 返回值也…

Win10怎么设置待机时间

我们在使用电脑的过程中&#xff0c;经常因为有事需要离开电脑&#xff0c;长时间不操作电脑就会进行待机睡眠状态&#xff0c;那么Win10怎么设置待机时间呢&#xff0c;下面小编就给大家详细介绍一下Win10设置待机时间的方法&#xff0c;大家感兴趣的话可以来看一看。 设置方…