问题描述
- select语句的where部分能否使用自定义的且带有外传参数的函数?
-
我使用java语言编写 访问远程的数据库,数据库中的字段包括 Id,Lng,Lat,Time,Data;
想实现的功能是根据外面传来的时间参数time,地理位置参数lng,lat来将数据库中的与传入时间相比在一个小时之内的、且地理位置在传入位置10001米以内的数据取出来。
sql语句我大致是这么写的
"select *
into new_table
from weather_data
where (time-Time)/(1000*60*60)=0
AND getDistance(lng,lat,Lng,Lat)<1000“ getDistance函数我知道怎么用java写
我不知道要如何在MySql中写这个getDistance函数 望告知 谢谢
解决方案
如果你的计算尺度在一个城市中,完全可以先根据当地的维度算出经度相差1度距离是多少,并且视作坐标为平面直角坐标。
那么距离就是经度差算出的东西距离的平方和维度差算出的南北距离的平方再开方。
当然,如果你是做超过一个省大小的尺度,最好还是用球面投影,根据三角函数算大圆弧长作为距离。
解决方案二:
自定义函数,对应的函数计算方式看这里
http://www.cnblogs.com/w-y-f/archive/2013/06/08/3126621.html
http://www.thinksaas.cn/group/topic/108588/
解决方案三:
把java的流程写入mysql的函数。
解决方案四:
简单的话,可以用java计算,然后把数据作为参数送到SQL语句中。
解决方案五:
楼主可以参考这个MySQL自定义函数
https://github.com/mnisjk/MySQL-distance-between-GPS-coordinates
时间: 2025-01-23 20:22:52