我试图获得所有的优惠位于附近的用户在100公里的距离。用户共享位置,我在offers表-id,name,text,addressid中查询它(addressid是外键)
地址表-id、地址、位置。
Select Offers.id, Address.id
from Offers, Address
where
ST_Distance(
ST_Transform( [12.9406589,77.6185572] ]::Geometry, 3857),
ST_Transform( Address.location::Geometry, 3857) < 100
and Address.id = Offers.addressId
当我运行上面的查询时,它抛出了一个语法错误:
“]”附近的postgres语法错误
不然我该怎么给出坐标呢?
2条答案
按热度按时间8dtrkrch1#
你试过组合吗
ST_MakePoint and ST_SetSRID
你的观点是什么?注:功能
ST_MakePoint
参数应为longitude,latitude
,而不是相反。另请参见此相关内容
answer
.kxxlusnw2#
虽然jimjones的答案涵盖了如何创建一个点,但还有几个其他问题:
st_distance
使用crs的单位,即3857的米。您正在搜索上述位置100米范围内的条目3857,仅用于显示的投影。不要在这个投影中计算距离,它们是高度扭曲的。要么使用合适的局部投影,要么使用
geography
而不是geometry
,默认情况下使用米理想情况下,你会有一个关于你的几何/地理索引,然后你可以使用
ST_DWithin
而不是ST_Distance
,因为前者利用了空间索引如果您的数据位于印度而不是遥远的北方,则意味着您在创建点时交换了纬度和经度
查询可能类似于
地理索引