MySQL:返回表中按距离排序的前三个条目:给出纬度和经度作为参数



我试过了:

var latitude = K.params.latitude
var longitude = K.params.longitude
var sqlString = "SELECT name, latitude, longitude, SQRT( 
POW(69.1 * (latitude - '"+latitude+"'), 2) + 
POW(69.1 * ('"+longitude+"' - longitude) * COS(latitude / 57.3), 2)) AS distance 
FROM 10561_12865_tblEvents HAVING distance < 25 ORDER BY distance"
var results = K.query(sqlString, [])

但这只返回1个结果,有时没有,当它应该有。

你有更好的解决办法吗?谢谢你:)

您可以使用ST_Distance_Sphere(point(lonA,latA), point(lonB,latB))

例如:

SELECT ST_Distance_Sphere(point(0, 0), point(180, 0)) as distance

你可以在https://dev.mysql.com/doc/refman/5.7/en/spatial-convenience-functions.html#function_st-distance-sphere找到更多

我自己用下面的函数解决了这个问题

var latitude = K.params.latitude
var longitude = K.params.longitude
var start = K.params.start
var count = K.params.count
var maxDistanceKM = K.params.maxDistanceInKM
var sqlString = "SELECT *,
( 6371.25 * acos( 
cos( radians('"+latitude+"') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('"+longitude+"') ) + sin( radians('"+latitude+"') )  * sin( radians( latitude ) ) )  ) AS distance 
FROM 10561_12865_tblEvents 
HAVING distance < '"+maxDistanceKM+"' 
ORDER BY distance 
LIMIT "+start+" , "+count

相关内容

  • 没有找到相关文章

最新更新