2011-07-07 27 views
5

私は住所のスプレッドシートを持っており、郵便番号と郵便番号の間の距離を計算する必要があります。私はかなり柔軟なメソッドを使用していますが、私はいくつかの種類のWebサービスや数学的アルゴリズムを期待しています。米国の住所のみ。基本的に私は2つの郵便番号をフィードし、それらの間の距離を取得する必要があります。郵便番号距離計算器

Excelの式やVBAを使用したいと思っています。必要に応じてC#.netでコードを作成することもできます。

これらの距離の計算方法について教えてください。

+1

をコメントすることによる追加は、Google Maps APIを見たことがありますか? –

+0

@Amir Raminfar - 私が最後にGoogleマップapiを見たとき、検索された情報はすべて、必要条件を満たすために地図上に表示されなければならないという制限がありました。私は地図上に表示するつもりはない。 – MAW74656

答えて

2

実際にはとても簡単です。郵便番号のGPS座標のデータベースをダウンロードすると、このデータをダウンロードできるサイトがたくさんあります。彼らは、郵便番号の中心の座標を記載します。

は最短距離を計算するための式を使用します(例:http://www.movable-type.co.uk/scripts/latlong.html

3

をあなたは緯度と経度を使用することができます。

エクセル:

=IF(SIN(Lat1) * SIN(Lat2) + COS(Lat1) * COS(Lat2) * COS(Long1 - Long2) > 1, 
RadiusofEarth * ACOS(1), RadiusofEarth * 
ACOS(SIN(Lat1) * SIN(Lat2) + COS(Lat1) * COS(Lat2) * COS(Long1-Long2))) 

VB.netの輸入System.Mathの

Private Function Distance(ByVal lat1 As Double, ByVal lon1 As Double, ByVal lat2 As Double, ByVal lon2 As Double, ByVal unit As String) As Double 
     Dim theta As Double = lon1 - lon2 
     Dim dist = System.Math.Sin(deg2rad(lat1)) * System.Math.Sin(deg2rad(lat2)) + System.Math.Cos(deg2rad(lat1)) * System.Math.Cos(deg2rad(lat2)) * System.Math.Cos(deg2rad(theta)) 
     dist = System.Math.Acos(dist) 
     dist = rad2deg(dist) 
     dist = dist * 60 * 1.1515 
     Select Case unit 
      Case "K" 
       dist = dist * 1.609344 
      Case "N" 
       dist = dist * 0.8684 
     End Select 

     Return dist 

    End Function 

その他の便利なリンク(最初のものはまた、VBAの選択肢に言及)

ExcelLatLong(また、VBAの選択肢に言及)

Zips by Lat Long Lookup

VBA discussion

EDIT:リンクが議論に

More Info(Excel Formula)

+0

Excel式の背後にある論理を説明してもらえますか?あなたがリンクしているChip Pearsonのサイトの式と一致しているとは思えません。また、これはより現実的な楕円ではなく球状の地球を仮定していますが、不確実性は郵便番号のサイズよりはるかに小さいので、このアプリケーションでは完全にうまくいくと思います。エリアはかなり小さいかもしれません。たぶん私はあまりにも肛門性交している。 –

+0

@ Jean-Francois Corbett賞はラジアンに変換する必要があります(私は私の答えで別のリンクを提供します)。私はそれを分解しようとしていなかったし、私がそれを書いたときにあなたのような考えをしていたwasnt。しかし、あなたは良い点を作っています。私はそれがどれほど正確であるかにかかっていると思う。私は彼を別の選択肢に結びつけたのです。 – sealz