23

このThis pageから、郵便番号とその緯度/経度などのデータベースを取得しました 。次のフィールドがあります。

郵便番号、LATITUDE、LONGITUDE、CITY、STATE、COUNTY、ZIP_CLASS

データはテキスト ファイルにありましたが、MySQL テーブルに挿入しました。私の質問は、上記のフィールドを使用して、ユーザーが Web サイトに入力できる 2 つの郵便番号間の距離を計算するにはどうすればよいですか? PHP で動作するコードを歓迎します

4

5 に答える 5

24

これは、マジック ナンバーの注釈を付けたマイクの回答です。いくつかのテストデータではうまくいくように見えました:

function calc_distance($point1, $point2)
{
    $radius      = 3958;      // Earth's radius (miles)
    $deg_per_rad = 57.29578;  // Number of degrees/radian (for conversion)

    $distance = ($radius * pi() * sqrt(
                ($point1['lat'] - $point2['lat'])
                * ($point1['lat'] - $point2['lat'])
                + cos($point1['lat'] / $deg_per_rad)  // Convert these to
                * cos($point2['lat'] / $deg_per_rad)  // radians for cos()
                * ($point1['long'] - $point2['long'])
                * ($point1['long'] - $point2['long'])
        ) / 180);

    return $distance;  // Returned using the units used for $radius.
}
于 2009-01-03T00:32:04.213 に答える
7

数学だけでできる...

function calc_distance($point1, $point2)
{
    $distance = (3958 * 3.1415926 * sqrt(
            ($point1['lat'] - $point2['lat'])
            * ($point1['lat'] - $point2['lat'])
            + cos($point1['lat'] / 57.29578)
            * cos($point2['lat'] / 57.29578)
            * ($point1['long'] - $point2['long'])
            * ($point1['long'] - $point2['long'])
        ) / 180);

    return $distance;
}
于 2009-01-02T20:58:34.817 に答える
6

You can also try hitting a web service to calc the distance. Let someone else do the heavy lifting.

https://www.zipcodeapi.com/API#distance

于 2009-01-02T21:22:20.727 に答える
6

2 点間の大円距離を計算するためのHaversine 公式を確認してください。その他のサンプルはこちら

ハバーシン式:

  • R = 地球の半径 (平均半径 = 6,371km)
  • Δlat = lat2−lat1
  • Δlong = long2− long1
  • a = sin²(Δlat/2) + cos(lat1).cos(lat2).sin²(Δlong/2)
  • c = 2.atan2(√a, √(1−a))
  • d=Rc

(三角関数に渡す角度はラジアンである必要があることに注意してください)。

于 2009-01-02T21:32:03.127 に答える
1

zipテーブルで、距離を取得する2つのポイントの座標(緯度、経度)を取得する必要があります。

次に、SQLまたはPHPを使用して距離を計算できます。この投稿では、両方の方法の概要を説明しています。

http://dev.strategystar.net/2011/10/mysql-php-get-distance-between-two-coordinates-in-miles-kilometers/

この例の計算は、このスレッドですでに説明した式に基づいています。地球の半径をマイルとキロメートルの両方で提供するため、両方の単位の2点間の距離を取得できます。

計算方法にはマジックナンバーが含まれておらず、地球の半径だけが含まれているため、上記のリンクはすばらしいです。

于 2011-10-07T18:12:35.603 に答える