このThis pageから、郵便番号とその緯度/経度などのデータベースを取得しました 。次のフィールドがあります。
郵便番号、LATITUDE、LONGITUDE、CITY、STATE、COUNTY、ZIP_CLASS
データはテキスト ファイルにありましたが、MySQL テーブルに挿入しました。私の質問は、上記のフィールドを使用して、ユーザーが Web サイトに入力できる 2 つの郵便番号間の距離を計算するにはどうすればよいですか? PHP で動作するコードを歓迎します
これは、マジック ナンバーの注釈を付けたマイクの回答です。いくつかのテストデータではうまくいくように見えました:
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.
}
数学だけでできる...
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;
}
You can also try hitting a web service to calc the distance. Let someone else do the heavy lifting.
2 点間の大円距離を計算するためのHaversine 公式を確認してください。その他のサンプルはこちら
ハバーシン式:
(三角関数に渡す角度はラジアンである必要があることに注意してください)。
zipテーブルで、距離を取得する2つのポイントの座標(緯度、経度)を取得する必要があります。
次に、SQLまたはPHPを使用して距離を計算できます。この投稿では、両方の方法の概要を説明しています。
この例の計算は、このスレッドですでに説明した式に基づいています。地球の半径をマイルとキロメートルの両方で提供するため、両方の単位の2点間の距離を取得できます。
計算方法にはマジックナンバーが含まれておらず、地球の半径だけが含まれているため、上記のリンクはすばらしいです。