Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-zipcode距离函数将距离转换为英里_Php_Trigonometry_Geocode_Zipcode - Fatal编程技术网

PHP-zipcode距离函数将距离转换为英里

PHP-zipcode距离函数将距离转换为英里,php,trigonometry,geocode,zipcode,Php,Trigonometry,Geocode,Zipcode,我在这里找到了一些代码,可以从数学上找到两个Zipcode之间的距离。我正在使用GoogleGeocodeAPI从每个zipcode获取long和lat。一切正常,但我想知道如何将$distance返回转换为英里: function calc_distance($zip1, $zip2) { $geo = new GoogleGeocode( $apiKey ); $point1 = $geo->geocode( $zip1 ); $point1 = $poi

我在这里找到了一些代码,可以从数学上找到两个Zipcode之间的距离。我正在使用GoogleGeocodeAPI从每个zipcode获取long和lat。一切正常,但我想知道如何将
$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.
}

半径以英里为单位,因此返回的距离以英里为单位。您可能遇到的问题是,您看到返回的距离
302
与从谷歌地图
370
返回的距离之间存在差异。这是因为函数返回的距离返回了精确的点到点距离。。。好像一架飞机从一个点飞到另一个点。行驶方向包括转弯,因此距离将大于直线距离。我发现将直线距离乘以
1.25
通常可以得到准确的结果。

302不是已经是以英里为单位的距离了吗?根据谷歌地图的行程安排,这是有道理的。哦,当然。好吧,我想它可以用来返回半径内最近的邮政编码,这就是我真正需要的。谢谢你指出这一点。
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