2011-02-07 70 views

回答

4

我不知道,有一個「標準」的方式。

可能有現有的服務這樣做,並且可能有數據庫可以購買或免費獲得具有可用數據的數據庫,但根據您的定義,這可能不容易計算。

想一想:你的問題可以解釋爲兩點之間最短的烏鴉飛行距離(通過使用位於該郵政編碼中的城市中的一個點進行作弊),或者它可以被解釋爲兩個郵政編碼邊界之間的行駛距離。第一次計算相當簡單,但不是100%準確。第二個不是一個簡單的問題。找到最短行駛距離是一個子問題,並且在不規則邊界邊緣找到最近點是另一個子問題(或找到調用該特徵的人的最近城市/已知座標)。

因此,沒有任何有關您正在嘗試解決的實際問題的信息,我只能假設您並不關心數據的準確性。在這種情況下,我建議獲取一個城市座標數據庫,它們位於哪個郵政編碼中,並使用標準減法/平方根來確定距離(畢達哥拉斯定理)。

如果你確實關心你的數據的準確性,我建議你研究一下,找到一個現有的數據庫或服務,爲你預先計算出更準確的信息,或者爲你服務。

+0

同意!什麼是距離?先定義它!它是歐幾里德距離(畢達哥拉斯,直線),它是基於最短路徑還是「最快」路徑來駕駛距離。假設這將是SQL Server或.NET中的內置功能,聽起來很奇怪。它通常是一個OR(操作研究e.q.計量經濟學)問題。我假設會有這方面的服務,或者有算法的數據庫(我曾經使用過第三方組件),但是通常不會免費獲得這些服務...... – 2011-02-07 11:39:43

0

我寫了一個PHP腳本的方式來計算郵政編碼之間的距離。從那以後,通過用戶的很多反饋,它已被修改,以便距離計算實際上是用SQL查詢完成的,因爲這是實現它的最有效方式。

您需要一個具有郵政編碼及其緯度/經度值的表格。有免費的和商業的數據庫可以在網絡上獲得這些信息。

看看this PHP source code並查看calcDistanceSql()方法。它應該足夠簡單,可以遵循在SQL Server中構建並實現的查詢。