2013-11-14 139 views
0

我想選擇最接近的地方給定的經度選擇行,緯度值 所以我創造了這個查詢的最小距離

SELECT * 
FROM "Places" 
WHERE 2 * atan2(
sqrt(
sin((radians(41.647780 - latitude))/2)*sin((radians(41.647780 - latitude))/2) + 
sin((radians(25.295330 - longitude))/2)*sin((radians(25.295330 - longitude))/2) * 
cos(radians(latitude)) * cos(radians(41.647780)) 
), 
sqrt(1 - 
sin((radians(41.647780 - latitude))/2)*sin((radians(41.647780 - latitude))/2) + 
sin((radians(25.295330 - longitude))/2)*sin((radians(25.295330 - longitude))/2) * 
cos(radians(latitude)) * cos(radians(41.647780)) 
)) * 6371 IS MINIMAL 
LIMIT 1 

主要的想法是,這個公式將返回所有點之間的距離我的硬編碼一我已經在選擇查詢嘗試公式,它的工作。

我想得到「最小」的距離,我需要像「IS MINIMAL」這樣的東西。我知道以上是錯誤的(也許非常錯誤和愚蠢),但我在這些領域是新的。我想我只需要添加或更改一兩個單詞就行了,但我不知道正確的單詞。

回答

1

你所尋找的是ORDER BY .. LIMIT 1

SELECT * 
FROM "Places" 
ORDER BY atan2(
    sqrt(
    sin((radians(41.647780 - latitude))/2)*sin((radians(41.647780 - latitude))/2) + 
    sin((radians(25.295330 - longitude))/2)*sin((radians(25.295330 - longitude))/2) * 
    cos(radians(latitude)) * cos(radians(41.647780)) 
    ), 
    sqrt(1 - 
    sin((radians(41.647780 - latitude))/2)*sin((radians(41.647780 - latitude))/2) + 
    sin((radians(25.295330 - longitude))/2)*sin((radians(25.295330 - longitude))/2) * 
    cos(radians(latitude)) * cos(radians(41.647780)) 
    )) 
LIMIT 1; 

您可能會感興趣的PostGis或此相關的問題:
How can I get results from a JPA entity ordered by distance?

+0

最後,我與秩序所作,但是,這不是」這有點慢,我們選擇所有的地方,然後訂購它們,但沒有任何好的方法。是的,我知道PostGis,我認爲它很酷,但是對於這個大學項目,我使用的是heroku postgres dev(基本的免費版本),並且沒有包含PostGis。感謝你的回答。 –