ib交换机 postgresql,postgresql postgis如果点在圆内

博客围绕使用PostgreSQL数据库,以car_wash表为例,探讨根据用户提供的经纬度创建圆并查询洗车点是否在圆内的问题。指出ST_GeomFromText的SRID要与表字段一致,且ST_DWithin需添加缓冲距离作为第三个参数,还需将相关数据转换为相同SRID。

I'm using postgresql as db , i have the table named car_wash with field "point geometry"(use postgis) so in application I'm getting lon lat from user using GOOGLE API, next step I need to create circle around user and check if car_wash inside this circle I use

select *

from car_wash cw

where

ST_DWithin (

cw.lon_lat,

ST_GeomFromText('POINT(54.21 22.54)')

)=false

AND

not cw.was_deleted

Is it corect way? IF you need my srid is 0 according to this query

Select Find_SRID('public', 'car_wash', 'lon_lat')

解决方案

SRID of the ST_GeomFromText('POINT(54.21 22.54)') must be same as the SRID of cw.lon_lat. Suppose SRID of cw.lon_lat is 4326 you can set the other attribute srib by using ST_GeomFromText('POINT(54.21 22.54)',4326).

Secondly, ST_DWithin needs buffer distance as 3rd parameter. So suppose if you want to check if point is within 100 meter buffer it should be like

ST_DWithin (

cw.lon_lat,

ST_GeomFromText('POINT(54.21 22.54)', 3857), 100

)

Buffer value is according to the srid unit. in case of 3857 its meter. You need to convert cw.lon_lat and POINT(54.21 22.54) to the same SRID in order to make this work, using st_setSRID e.g.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值