これから郵便番号とその緯度/緯度などのデータベースを取得しました このページ 。次のフィールドがあります。
Zip、LATITUDE、LONGITUDE、CITY、STATE、COUNTY、Zip_CLASS
データはテキストファイルにありましたが、MySQLテーブルに挿入しました。私の質問は、上記のフィールドを使用して、ユーザーがWebサイトに入力できる2つの郵便番号間の距離を計算するにはどうすればよいですか? PHPの作業コードは高く評価されます
Webサービスを押して、距離を計算することもできます。他の誰かに重い物を持ち上げさせてください。
これは、魔法数にいくつかの注釈を付けたマイクの答えです。 いくつかのテストデータ :私にとってはうまくいくようでした
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;
}
Zipテーブルで、距離を取得する2つのポイントの座標(緯度、経度)を取得する必要があります。
次に、SQLまたはPHPを使用して距離を計算できます。この投稿では、両方の方法の概要を説明しています。
この例の計算は、このスレッドですでに説明した式に基づいています。地球の半径をマイルとキロメートルの両方で提供するため、両方の単位の2点間の距離を取得できます。
計算方法にはマジックナンバーが含まれておらず、地球の半径だけが含まれているため、上記のリンクはすばらしいです。