2

場所間の距離を計算する最良の方法を見つけようとしています (郵便番号と場所があります)。

基本的に、各レコードには場所と郵便番号があり、フロントエンドのユーザーは郵便番号を入力してレコードを選択できます..

- Within 10 Miles
- Within 20 Miles
- Within 40 Miles
- Within 50 Miles

これを行うことができる唯一の方法は、データベースから各レコードを取得し、それぞれの間の距離を計算し、それを一時テーブルに入力してから、このテーブルを場所で並べ替えてフィルタリングすることです。これは、時間がかかり、時間のかかる方法のように思えます-これをより良く行う方法について何か提案はありますか? それとも、これが最善の方法ですか?

たとえば、お客様が SO40 9AA (サウサンプトンの郵便番号) を入力し、「50 マイル以内」を選択すると、その郵便番号または場所から 50 マイル以内に表示され、記録されます。

4

2 に答える 2

0

データセットに地理コードがありますか? そうでない場合は、http://geocoder.us/help/city_state_zip.shtml のようなサービスを使用して、所有している郵便番号に追加できますproducts/z5ll/z5ll.htm コードをレコードに追加すると、緯度/経度座標を使用した標準の数学的な距離計算を使用して距離を計算できます。

走行距離が必要な場合は、Google Maps API を使用してください。それ以外の場合、この距離は「カラスが飛ぶように」になります。

于 2012-08-29T18:01:24.310 に答える
0

すべての郵便番号の地理座標を取得したら、任意の 2 点間の海峡距離を取得する VB 関数を次に示します。これはマイルで結果を生成しますが、変換するのは簡単です。

Function distance(lat1 As Single, lon1 As Single, lat2 As Single, lon2 As Single)
  Dim theta As Single, dist As Single
  theta = deg2rad(lon1 - lon2)
  lat1 = deg2rad(lat1)
  lat2 = deg2rad(lat2)
  dist = Sin(lat1) * Sin(lat2) + Cos(lat1) * Cos(lat2) * Cos(theta)
  dist = acos(dist)
  dist = rad2deg(dist)
  distance = dist * 60 * 1.1515
End Function

'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
':::  This function get the arccos function from arctan function    :::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Function acos(Rad)
  If Abs(Rad) <> 1 Then
    acos = pi / 2 - Atn(Rad / Sqr(1 - Rad * Rad))
  ElseIf Rad = -1 Then
    acos = pi
  End If
End Function


'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
':::  This function converts decimal degrees to radians             :::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Function deg2rad(Deg As Single) As Single
    deg2rad = CSng(Deg * pi / 180)
End Function

'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
':::  This function converts radians to decimal degrees             :::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Function rad2deg(Rad As Single) As Single
    rad2deg = CSng(Rad * 180 / pi)
End Function
于 2012-08-29T19:02:08.887 に答える