2013-01-31 95 views
2

我有一個網站,我已經創建出售本地物品,如果免費供所有人使用。但我現在已經遇到了一個小問題!現在,人們形成了更遠的距離,我希望他們能夠通過距離他們的距離搜索和點亮所有物品,並且/或者查看他們區域中的所有物品。按距離對結果列表進行排序

我一直在收集每個人的郵政編碼並將它們轉換爲東經和北經的座標,而不是緯度經度。

創建一個新的recodset在飛行中做最好的方式做距離calc然後按距離排序還是有更好的方式,將使用較少的資源在網站上?

下面是答案

strSQL = "SELECT *, (3959 * acos(cos(radians(" & strMyLat & 
    ")) * cos(radians(Latitude)) * cos(radians(Longitude) - radians(" & strMyLng & 
    ")) + sin(radians(" & strMyLat & 
    ")) * sin(radians(Latitude)))) AS distance FROM TABLE WHERE HAVING distance < 3;" '## 3 Miles 
+0

我一直想知道很長一段時間。好的問題+1 –

+0

就我個人而言,我更喜歡緯度/經度座標,因爲那些通常更「標準」(特別是通過諸如各種基於網絡的地圖之類的東西進行常見曝光)。另外,根據電網規模,您可能會失真。你的數據庫後端是什麼?有些RDBMS具有內置的地理類型(或擴展),因此您可以利用數據庫的全部功能來執行選擇/排序。 –

+0

這是一個使用PHP tho的類似帖子:http://stackoverflow.com/questions/2296087/using-php-and-google-maps-api-to-work-out-distance-between-2-post-codes-英國 – Kaf

回答

-1

東座標和北是不是要走的路。

您必須首先將座標(無論它們是東向,北向等) 轉換爲緯度,經度十進制度WGS84。
這是全世界使用cooridnate系統,現在你可以開始計算:

然後簡單地計算兩個緯度,經度對,例如,與半正矢,距離公式之間的距離(見谷歌或維基) 。

+0

感謝您的回覆,我必須立即執行此操作,以前的評論爲我提供了使用MySQL進行調用的思想。 – Hutchyweb

+0

這與MySQl無關:您需要lat緯度座標WGS84,就像您在谷歌地圖或谷歌地圖上輸入和接收一樣。如果您有一個東經北向的數據庫,您可以將其轉換爲經緯度WGS84 – AlexWien

+0

Haversine-Distance公式首先將緯度/經度轉換爲一個距離單位,然後計算這兩個點之間的距離。東方和北方的座標已經在一個距離單位,所以這是不太需要做的數學。 –

0

要回答你的問題:

我幾乎做同樣的事情,去年,但隨着緯度/長。並且實時計算距離。距離是使用海峽數學計算的,所以速度很快,並且沒有使用大量的資源。
對Easting和Northing座標系不熟悉,所以它可能會或可能不會更快,以便首先將它們永久轉換爲數據庫中的lat/long或其他座標系。

現在,如果您決定儘可能快地查詢查詢,並且您正在處理一小部分郵政編碼,則可以創建一個查找表,其中包含任意兩個郵政編碼之間的距離已經計算。
但是,您的列表越大,這變得越笨拙。例如,根據維基百科,英國大約有1,700,000個郵政編碼,因此這樣的表格需要其平方,即28900000000記錄。

祝你好運!

P.s.下面是找到2東距/北距COORDS之間的距離公式:

d = squareroot(square(E1-E2)+square(N1-N2))/1000 

1000是假設你COORDS是米,要在千米答案。否則,請相應地調整此號碼。

+0

1,755,212我目前正在將它們導入到我的數據庫中。謝謝。正如我上面所說,我要去嘗試MySQL地理的東西來做這個工作,我會在完成後發佈代碼 – Hutchyweb

+0

看起來,它保持在東方和北方的座標系更快。這樣你就不必在數學運算過程中將經緯度轉換爲徑向。 –