我试过了:
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