web-dev-qa-db-ja.com

PHP)の郵便番号間の距離の計算

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

Zip、LATITUDE、LONGITUDE、CITY、STATE、COUNTY、Zip_CLASS

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

23
Click Upvote

Webサービスを押して、距離を計算することもできます。他の誰かに重い物を持ち上げさせてください。

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

6
brendan

これは、魔法数にいくつかの注釈を付けたマイクの答えです。 いくつかのテストデータ :私にとってはうまくいくようでした

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.
}
24
Adam Bellaire

それは数学だけで行うことができます...

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;
}
7
Mike Paterson

2点間の大円距離を計算するには、 半正矢関数 を確認してください。さらにいくつかのサンプルを見つけることができます ここ

半正矢式:

  • 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 = R.c

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

6
Paul Dixon

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

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

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

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

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

1
JV-