计算PostgreSQL中点与圆之间的距离,用于圆半径和距离的单位是多少?

时间:2014-09-29 16:15:10

标签: postgresql postgresql-9.3

我使用几何函数和运算符: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米我应该使用什么?

1 个答案:

答案 0 :(得分:1)

它们都在同一个单元中(或者更确切地说,根本没有)。你可以称它为米,英寸或其他东西。你所指的lat_lon只是一个平面中的一个点,就像圆圈一样。

使用基本几何学(毕达哥拉斯定理)计算距离:

a = 83.0163 - 122.31562661719
b = 42.2733 - 49.051595254425
c = sqrt(a^2 + b^2) = 39.212992455