数据库表中有两个字段,纬度和经度。 (其他领域也是如此,但现在它们并不重要。)
我有一个功能,其中有三个参数:纬度,经度和 max_distance (km)。
有没有办法构建原始PostgreSQL查询,只返回表示位置的行,该行位于从给定纬度和经度测量的 max_distance (km)内?
示例参数latitude = 59.9138699,经度= 10.7522451,max_distance = 10
答案 0 :(得分:0)
为此,请使用postgis。
Postgis具有ST_Distance和ST_PointFromText等功能:
select * from tbl
where ST_Distance(
ST_PointFromText('POINT(' || longitude || ' ' || latitude || ')', 4326),
ST_PointFromText('POINT(10.7522451 59.9138699)', 4326)
) < 10000;
要快速执行此操作,您应使用几何字段并将其编入索引。
您还应该了解一下空间参考系统和SRID。 SRID 4326表示WGS84坐标系统,通常在网络上使用。