0

2つの郵便番号間の距離を数学的に見つけるためのコードをここで見つけました。私はGoogleジオコードAPIを使用して、各郵便番号から長さと緯度を取得しています。$distanceすべて正常に動作しますが、リターンをマイルに変換する方法を考えています。

function calc_distance($zip1, $zip2)
{   
    $geo = new GoogleGeocode( $apiKey );
    $point1 = $geo->geocode( $zip1 );
    $point1 = $point1['Placemarks'][0];
    echo "P1:"; print_r( $zip1 );
    $point2 = $geo->geocode( $zip2 );
    $point2 = $point2['Placemarks'][0];
    echo "<br>P2: "; print_r( $zip2 ); echo "<br>";

    var_dump($point1); 
    echo "<br><br>";
    var_dump($point2); 
    echo "<br>";
    $radius      = 3958;      // Earth's radius (miles)
    $deg_per_rad = 57.29578;  // Number of degrees/radian (for conversion)

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

    echo $distance;
    return $distance;  // Returned using the units used for $radius.
}

を使用してテストすると、次calc_distance(28025, 22044);のようになります。

P1:28025
P2: 22044
array(7) { ["Accuracy"]=> int(5) ["Country"]=> string(2) "US" ["AdministrativeArea"]=> string(2) "NC" ["Locality"]=> string(7) "Concord" ["PostalCode"]=> int(28025) ["Latitude"]=> float(35.3898417) ["Longitude"]=> float(-80.5216184) } 

array(7) { ["Accuracy"]=> int(5) ["Country"]=> string(2) "US" ["AdministrativeArea"]=> string(2) "VA" ["Locality"]=> string(12) "Falls Church" ["PostalCode"]=> int(22044) ["Latitude"]=> float(38.8607388) ["Longitude"]=> float(-77.1571443) } 
302.952750233
4

1 に答える 1

2

半径はマイル単位であるため、返される距離はマイル単位です。あなたが抱えているかもしれない問題は、返された距離302とグーグルマップから返された距離の間に違いが見られるということです370。これは、関数によって返される距離が正確なポイント間距離を返したという事実によるものです...まるで飛行機が1つのポイントから別のポイントに飛んだかのように。運転方向にはターンが含まれるため、距離は直線距離よりも大きくなります。1.25直線距離に通常の値を掛けると、正確な結果が得られることがわかりました。

于 2013-02-22T23:16:24.207 に答える