Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>The formula you used, seems to be the <em>arccosine</em> instead of the <em>haversine</em> formula. The haversine formula is indeed more appropriate to calculate the distance on a sphere, because it is not prone to rounding errors with antipodal points.</p> <pre><code>/** * Calculates the great-circle distance between two points, with * the Haversine formula. * @param float $latitudeFrom Latitude of start point in [deg decimal] * @param float $longitudeFrom Longitude of start point in [deg decimal] * @param float $latitudeTo Latitude of target point in [deg decimal] * @param float $longitudeTo Longitude of target point in [deg decimal] * @param float $earthRadius Mean earth radius in [m] * @return float Distance between points in [m] (same as earthRadius) */ function haversineGreatCircleDistance( $latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 6371000) { // convert from degrees to radians $latFrom = deg2rad($latitudeFrom); $lonFrom = deg2rad($longitudeFrom); $latTo = deg2rad($latitudeTo); $lonTo = deg2rad($longitudeTo); $latDelta = $latTo - $latFrom; $lonDelta = $lonTo - $lonFrom; $angle = 2 * asin(sqrt(pow(sin($latDelta / 2), 2) + cos($latFrom) * cos($latTo) * pow(sin($lonDelta / 2), 2))); return $angle * $earthRadius; } </code></pre> <p>P.S. I couldn't find an error in your code, so is it just a typo that you wrote <code>$lat= 41.9133741000 $lat= 12.5203944000</code> ? Maybe you just calculated with $lat=12.5203944000 and $long=0 because you overwrote your $lat variable.</p> <p>Edit:</p> <p>Tested the code and it returned a correct result:</p> <pre><code>$center_lat = 41.8350; $center_lng = 12.470; $lat = 41.9133741000; $lng = 12.5203944000; // test with your arccosine formula $distance =( 6371 * acos((cos(deg2rad($center_lat)) ) * (cos(deg2rad($lat))) * (cos(deg2rad($lng) - deg2rad($center_lng)) )+ ((sin(deg2rad($center_lat))) * (sin(deg2rad($lat))))) ); print($distance); // prints 9.662174538188 // test with my haversine formula $distance = haversineGreatCircleDistance($center_lat, $center_lng, $lat, $lng, 6371); print($distance); // prints 9.6621745381693 </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload