MYSQL8 度分秒(DMS)转度(DDD)函数编写实战

GIS坐标转换公式

  • 在GPS设备中对于坐标单位有不同的显示方法,有度分秒(DMS)和度(DDD)。

例如:南京玄武区板仓街世界之窗创业园的GPS坐标如下:

度分秒(DMS):东经E 118度48分54.152秒  北纬N  32度04分10.461秒

度(DDD):E 118.815033度    N 32.069723度

  • 如何将度(DDD):: 118.815033度换算成度分秒(DMS)东经E 118度48分53.652秒?

转换方法是将118.815033整数位不变取118(度),用0.815033*60=48.90198,取整数位48(分),0.90198*60=54.1188再取整数位54(秒),故转化为118度48分54秒.

  • 同样将度分秒(DMS):东经E 118度48分54.152秒 换算成度(DDD)?

118度48分54.152秒=118+(48/60)+(54.152/3600)=118.81504度

MYSQL8 FUNCTION 语法

定义

CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型

        BEGIN

            函数体

        END

 

        注意:

        1.参数列表包含两部分:参数名 参数类型

        2.函数体:肯定会有return语句,如果没有会报错

            如果return语句放在函数的最后也不报错,但不建议

            return 值;

        3.函数题中仅有一句话,则可以省略begin end

        4.使用 delimter语句设置结束标记

        5.为function指定一个参数

1 DETERMINISTIC 确定的

2 NO SQL 没有SQl语句,当然也不会修改数据

3 READS SQL DATA 只是读取数据,当然也不会修改数据

4 MODIFIES SQL DATA 要修改数据

5 CONTAINS SQL 包含了SQL语句

    调用语法

  SELECT 函数名(参数列表)

        执行函数中所有语句 函数中有显示的语句他也能显示 有插入修改也能做,执行完把显示值返回出来

实战

创建FUNCTIONSQL

DELIMITER $$
DROP FUNCTION IF EXISTS ConvertCoordinate$$
CREATE FUNCTION ConvertCoordinate(source varchar(32)) RETURNS DECIMAL(9,6)
NO SQL
begin
	DECLARE du VARCHAR(32);
	DECLARE fen VARCHAR(32);
	DECLARE miao VARCHAR(32);
	DECLARE result DECIMAL(9,6);
	set du = SUBSTRING(source,1,POSITION('°' in source)-1);
	set fen = SUBSTRING(source,POSITION('°' in source)+1,POSITION("′" in source)-POSITION('°' in source)-1) ;
	set miao = SUBSTRING(source ,POSITION('′' in source)+1,POSITION("″" in source)-POSITION('′' in source)-1);
	set result = CAST(du as DECIMAL(9,6)) +CAST((fen/60) as DECIMAL(9,6))+CAST((miao/3600) as DECIMAL(9,6));
	RETURN CAST(result as  DECIMAL(9,6));
end $$
DELIMITER ;

调用

MYSQL8 度分秒(DMS)转度(DDD)函数编写实战_第1张图片

备注:dbeaver工具差异,

MYSQL8 度分秒(DMS)转度(DDD)函数编写实战_第2张图片

 

你可能感兴趣的:(数据库,度,度分秒,坐标,function)