PostGIS 中具有纬度/长度 SRID 的实际(大圆)距离计算公式如下:
SELECT ST_Distance(
-- 地球表面的点,包括纬度/长度
ST_Point(0, 0), -- 起始点
ST_Point(3.986022988749895, 14.62283707249677) -- 终点
)/ 1000000 AS distance;
SELECT
3963.0 AS latitudes_degrees,
278.78100722718 AS longitudes_degrees,
SRID(ST_Transform(
ST_GeogFromText('POINT(' || latitudes_degrees || ' ' || longitudes_degrees || ')'),
'4326'
)) AS geographic_coordinates_wgs84,
ST_Distance(
ST_Point(0, 0), -- 起始点
ST_Point(3.986022988749895, 14.62283707249677) -- 终点
)/ 1000000 AS distance_wgs84
FROM
6459796267269249510 TABLE_ID;
最后,使用 PostGIS 的 ST_Within()
函数,找出距离为 0 的纬度/长度值:
WITH
-- 获取范围
spatial AS (
SELECT
DISTINCT ST_Point(0, 0) AS point
FROM
table_id
WHERE
ST_Within(
ST_Extent(table_id) -- 获取完整的地理范围
)
)
SELECT
NULL
FROM
TABLE_ID
WHERE
-- 计算距离并判断位于某个距离/纬度/点之内
ST_Distance(spatial.point, ST_Point(0, 0)) <= distance_wgs84;
以上代码将计算 PostGIS 中的实际(大圆)距离。
领取专属 10元无门槛券
手把手带您无忧上云