Sql 如何获得一个圆圈中的所有数据?
我有一个表,有列名,纬度,长度。我想找到一个圆内的所有数据,按离中心点最近的距离排序。为了得到圆,我有一个中心点(纬度/经度)。假设纬度和经度分别为-6.12579106和106.65699005,那么将出现的数据是名称为A和B的数据。下面是我的表(事故表) 我想通过最接近的距离找到数据。怎么做?谢谢你的帮助:)Sql 如何获得一个圆圈中的所有数据?,sql,postgresql,latitude-longitude,Sql,Postgresql,Latitude Longitude,我有一个表,有列名,纬度,长度。我想找到一个圆内的所有数据,按离中心点最近的距离排序。为了得到圆,我有一个中心点(纬度/经度)。假设纬度和经度分别为-6.12579106和106.65699005,那么将出现的数据是名称为A和B的数据。下面是我的表(事故表) 我想通过最接近的距离找到数据。怎么做?谢谢你的帮助:) 可以使用以下函数计算距离: CREATE OR REPLACE FUNCTION calculate_distance(lat1 float, lon1 float, lat2 flo
可以使用以下函数计算距离:
CREATE OR REPLACE FUNCTION calculate_distance(lat1 float, lon1 float, lat2 float, lon2 float, units varchar)
RETURNS float AS $dist$
DECLARE
dist float = 0;
radlat1 float;
radlat2 float;
theta float;
radtheta float;
BEGIN
IF lat1 = lat2 OR lon1 = lon2
THEN RETURN dist;
ELSE
radlat1 = pi() * lat1 / 180;
radlat2 = pi() * lat2 / 180;
theta = lon1 - lon2;
radtheta = pi() * theta / 180;
dist = sin(radlat1) * sin(radlat2) + cos(radlat1) * cos(radlat2) * cos(radtheta);
IF dist > 1 THEN dist = 1; END IF;
dist = acos(dist);
dist = dist * 180 / pi();
dist = dist * 60 * 1.1515;
IF units = 'K' THEN dist = dist * 1.609344; END IF;
IF units = 'N' THEN dist = dist * 0.8684; END IF;
RETURN dist;
END IF;
END;
$dist$ LANGUAGE plpgsql;
对于单位
参数,可以使用以下值:
'M' is statute miles (default)
'K' is kilometers
'N' is nautical miles
然后按以下方式使用上述功能:
SELECT * from test where
calculate_distance(latitude, longtitude, -6.12579106, 106.65699005, 'K') <3;
从测试中选择*
计算距离(纬度,经度,-6.12579106106.65699005,'K')嗨,谢谢你的回答。我想用公里来表示,公里值是多少?距离中心点是10公里还是20公里?对于A
来说是1.18
,B
来说是2.68
,1397.35
对于C
来说是以公里为单位的。这是否回答了您的问题?
'M' is statute miles (default)
'K' is kilometers
'N' is nautical miles
SELECT * from test where
calculate_distance(latitude, longtitude, -6.12579106, 106.65699005, 'K') <3;