最近接了个要计算2个地方经纬度相距多远的任务,其实mysql数据库有个函数,可以直接计算,省的我们用程序计算。
MySQL中的point用于表示GIS中的地理坐标。
数据库表,我设计的是经度纬度都存一个字段point,插入的时候直接字符串插入进去
添加数据
用ST_GeomFromText函数,直接搞个字符串就可以添加进去了
INSERT INTO station ( NAME, address, discount, rebate, price, discount_price, point )
VALUES
( '壳牌笑脸能源加油站', '山东淄博张店世纪路', '90%', '2%', '100', 90, ST_GeomFromText ( 'POINT(117.962021 36.832699)' ) );
查询数据
第一个point 是数据库字段,第二个是我要比较的经纬度,其实2个比较没有先后顺序,哪个point在前面都行
( ST_Distance_Sphere ( POINT, POINT ( 118.0561590293884, 36.83450580173822 ) ) / 1000 ) AS point
查出结果,直接转换成千米,然后比较小于20千米的返回
SELECT
( ST_Distance_Sphere ( POINT, POINT ( 118.0561590293884, 36.83450580173822 ) ) / 1000 ) AS point
FROM
station sta
HAVING
point < 20
ORDER BY
point ASC;
如果是直接要显示经纬度的话,可以把经纬度拆分,因为point映射mybtais是byte[]数组,byte数据再转String类型老是出乱码,所以我直接拆分成2个字段。这样在设计返回对象的时候就方便处理了
SELECT
id AS id,
x ( point ) AS x,
y ( point ) AS y
FROM
station
WHERE
id = 1;