PostgreSQL(PgSQL)根据经纬度计算距离

本文介绍了在PostgreSQL中利用PostGIS扩展如何根据经纬度正确计算两点间的距离,并解决将距离误算为度数的问题。通过ST_Distance函数确保计算的是以米为单位的测地线距离。
摘要由CSDN通过智能技术生成

今天在使用PostgreSQL的PostGIS功能来实现根据经纬度计算距离和计算某一经纬度附近X米之内的地点,发现了一些错误,实现SQL语句和更正的语句如下

计算两经纬度之间距离:

select ST_Distance(ST_GeomFromEWKT('SRID=4326;POINT(lng1 lat1)'),ST_SetSRID(ST_Point(lng2::double precision, lat2::double precision), 4326))

计算(lng2, lat2)是否在(lng1, lat1)的X米之内

select ST_DWithin(ST_SetSRID(ST_Point(lng1::double precision, lat1::double precision), 4326),ST_GeomFromEWKT('SRID=4326;POINT(lng2 lat2)'), X)

例子:

(116.45815259398,39.938559769396):北京三里屯CHAO
(117.26089170529,40.644852995474):古北水镇
(117.26608,40.647293):北京好梦居民宿

结果却大大的超出了我的预料,距离算出来的是相差度数,附近的点直接将X米当作度数处理

于是我就点开了ST_Distance函数

create function st_distance(geography, geography) returns double precision
    immutable
    strict
    parallel safe
    language sql
as
$$
SE
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值