2014-10-01 64 views
2

我使用Postgresql 9.3和iv'e安裝的多維數據集和earthdistance擴展。Posgresql:如何獲得特定半徑的所有點

我試圖按照this tutorial,所以我有一個簡單的事件表與4個字段:id,名稱,lat,lng。

現在我試圖運行此查詢,拿到1公里範圍內的所有事件:

SELECT events.id, events.name FROM events WHERE earth_box(31.789225, 34.789612, 1000) @> ll_to_earth(events.lat, events.lng); 

,但我不斷收到此錯誤:

20:59:34 Kernel error: ERROR: function earth_box(numeric, numeric, integer) does not exist 
    HINT: No function matches the given name and argument types. You might need to add explicit type casts. 

所以我跑同樣的事情與鑄造:

SELECT events.id, events.name FROM events WHERE earth_box(CAST(31.789225 AS float8), CAST(34.789612 AS float8), 1000) @> ll_to_earth(events.lat, events.lng); 

,我也得到:

21:16:17 Kernel error: ERROR: function earth_box(double precision, double precision, integer) does not exist 
                  ^
     HINT: No function matches the given name and argument types. You might need to add explicit type casts. 

希望得到任何幫助

回答

6

OK,幾個小時,我終於得到了它之後:)

顯然,我正在同已經過時的教程中,正確的語法是這樣的:

SELECT events.id, events.name FROM events WHERE earth_box(ll_to_earth(31.789225,34.789612), 1000) @> ll_to_earth(events.lat, events.lng); 
+0

啊,這是我的壞事。將嘗試今晚或明天更新它。 – 2014-11-04 09:10:42

+1

@JohannduToit,你還沒有更新你的倒數第二個查詢('SELECT events.id,...')。感謝教程雖然:) – 2015-06-10 16:08:02

+0

ll_to_earth不被視爲一個函數。厄運。 :( – roconmachine 2016-06-07 03:45:24

相關問題