我使用几何函数和运算符:http://www.postgresql.org/docs/9.3/static/functions-geometry.html
表&#39>银行'包含地理围栏,其类型为circle
,半径为0.5。
id name geofence
"ID123";"FAR";"<(-122.31562661719,49.051595254425),0.5>"
"ID456";"NEAR";"<(-83.110566270539,42.102925914015),0.5>"
表&#39>表&#39;将lat_lon包含为point
id url lat_lon device
"455";"www.google.com";"(-83.0163,42.2733)";"48ddb459104986c1860eaa048ad72525ac881651"
我试图找到地理围栏内的所有点。
我试过了:
SELECT *
FROM
points, bank
WHERE lat_lon <@ bank.geofence;
我得到的结果接近我正在检查的点,但是当我在地图上检查它们时,它们不在0.5KM范围内。
对于以上两点,如果我将距离打印为列
SELECT *, lat_lon <-> bank.geofence
FROM
points, bank;
给我FAR点的值为39.3795,NEAR点的值为0。我知道两者都不在地理围栏内,但我试图找出用于Radius和Distance的单位。
那么,圆圈中的半径场是什么单位? 如果我想要500米我应该使用什么?
答案 0 :(得分:1)
它们都在同一个单元中(或者更确切地说,根本没有)。你可以称它为米,英寸或其他东西。你所指的lat_lon
只是一个平面中的一个点,就像圆圈一样。
使用基本几何学(毕达哥拉斯定理)计算距离:
a = 83.0163 - 122.31562661719
b = 42.2733 - 49.051595254425
c = sqrt(a^2 + b^2) = 39.212992455