Featured image of post mybits中使用mysql经纬度函数

mybits中使用mysql经纬度函数

前言

工作中需要在收货地址中显示驿站信息 并且根据用户定位按照远近进行显示

使用到的mysql 函数

1
2
3
4
5
    ST_Distance_Sphere

    POINT

    ST_GeomFromText

数据库 mysql 5.7

    数据库表设计

        id                   varchar
        ...........  
        longitude            double     //存一个本身的经度信息
        latitude             double     //存一个本身的纬度信息
        position             geometry   //这个字段使用mysql 函数储存
        ...........

  position  位置字段使用了geometry 类型

java entity

........................
private Double longitude;
private Double latitude;
private String position;        // 经纬度
........................

mybatis 写法

    新增方法 更新方法 同理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
        INSERT INTO biz_posthouse_information(
            .........
            longitude,
            latitude,
            position,
           .........
        ) VALUES (
            .........
            #{longitude},
            #{latitude},
            ST_GeomFromText(concat("POINT(",#{longitude}," ",#{latitude},")")),
           .........
        )

此处ST_GeomFromText函数使用了concat函数 连接了经纬度字段

在mybatis中不可以ST_GeomFromText直接写"POINT(#{longitude} #{latitude})" 会抛出异常

1
2
3
4
5
正确的写法 ✔
ST_GeomFromText(concat("POINT(",#{longitude}," ",#{latitude},")"))

错误的写法 ✖
ST_GeomFromText(POINT(#{longitude} #{latitude}))

查询方法

    此处查询 前端会传用户的经度和维度字符串

    使用函数 ST_Distance_Sphere 需要MySQL版本在5.7以上

    ST_Distance_Sphere 函数用可以不使用concat连接函数 及参数 信息

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
     select

         .......

        ST_Distance_Sphere(POINT(#{longitude},#{latitude}),position) as distant 

     from

            表名

     where 

            ......

     order by distant asc

ST_Distance_Sphere函数 第一个参数是用户所在经纬度信息 要使用POINT 转成点信息字符串,第二个参数 是数据库中的经纬度信息 求出两个经纬度的距离

最终实现

        

          未涉及到索引优化等

使用 Hugo 构建
主题 StackJimmy 设计