পিএইচপি-তে দুটি স্থানাঙ্কের মধ্যে দূরত্ব পরিমাপ করা


145

হাই আমার ল্যাট এবং লম্বা দুটি পয়েন্টের মধ্যে দূরত্ব গণনা করার দরকার আছে।

আমি বাহ্যিক এপিআই-তে কোনও কল এড়াতে চাই।

আমি পিএইচপি-তে হাভারসাইন সূত্রটি প্রয়োগ করার চেষ্টা করেছি:

কোডটি এখানে:

class CoordDistance
 {
    public $lat_a = 0;
    public $lon_a = 0;
    public $lat_b = 0;
    public $lon_b = 0;

    public $measure_unit = 'kilometers';

    public $measure_state = false;

    public $measure = 0;

    public $error = '';



    public function DistAB()

      {
          $delta_lat = $this->lat_b - $this->lat_a ;
          $delta_lon = $this->lon_b - $this->lon_a ;

          $earth_radius = 6372.795477598;

          $alpha    = $delta_lat/2;
          $beta     = $delta_lon/2;
          $a        = sin(deg2rad($alpha)) * sin(deg2rad($alpha)) + cos(deg2rad($this->lat_a)) * cos(deg2rad($this->lat_b)) * sin(deg2rad($beta)) * sin(deg2rad($beta)) ;
          $c        = asin(min(1, sqrt($a)));
          $distance = 2*$earth_radius * $c;
          $distance = round($distance, 4);

          $this->measure = $distance;

      }
    }

এটি প্রদত্ত কিছু পয়েন্ট দিয়ে পরীক্ষা করা হচ্ছে যার জনসাধারণের দূরত্ব রয়েছে আমি কোনও নির্ভরযোগ্য ফলাফল পাই না।

মূল সূত্রে বা আমার বাস্তবায়নে কোনও ত্রুটি আছে কিনা আমি বুঝতে পারি না


4
আমি এখানে সহ পিএইচপি অনেক ভাষায় কর্মরত কোড পাওয়া geodatasource.com/developers/php
কৃষ্ণ

উত্তর:


273

কিছুক্ষণ আগে আমি হ'রসিন সূত্রের একটি উদাহরণ লিখেছিলাম এবং এটি আমার ওয়েবসাইটে প্রকাশ করেছি:

/**
 * 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;
}

➽ দ্রষ্টব্য যে আপনি প্যারামিটারের সাথে পাস করার সাথে একই ইউনিটে দূরত্ব ফিরে পেয়েছেন $earthRadius। ডিফল্ট মান 71৩71১০০০০ মিটার তাই ফলটি [এম] এও হবে। মাইল থেকে ফলাফল পেতে, আপনি যেমন 3959 মাইল উত্তীর্ণ করতে পারেন $earthRadiusএবং ফলাফলটি হবে [মাইল]। আমার মতে এসআই ইউনিটগুলির সাথে লেগে থাকা ভাল অভ্যাস, অন্যথায় করার কোনও বিশেষ কারণ না থাকলে।

সম্পাদনা:

হিসাবে TreyA সঠিকভাবে নির্দিষ্ট, Haversine সূত্র সঙ্গে দুর্বলতা রয়েছে বিপরীত পৃথিবীপৃষ্ঠ-সংক্রান্ত পয়েন্ট কারণ ত্রুটি rounding (যদিও এটি হয় ছোট দূরত্বের জন্য স্থিতিশীল)। তাদের কাছাকাছি যেতে, আপনি পরিবর্তে ভিনসেন্টি সূত্রটি ব্যবহার করতে পারেন ।

/**
 * Calculates the great-circle distance between two points, with
 * the Vincenty 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)
 */
public static function vincentyGreatCircleDistance(
  $latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 6371000)
{
  // convert from degrees to radians
  $latFrom = deg2rad($latitudeFrom);
  $lonFrom = deg2rad($longitudeFrom);
  $latTo = deg2rad($latitudeTo);
  $lonTo = deg2rad($longitudeTo);

  $lonDelta = $lonTo - $lonFrom;
  $a = pow(cos($latTo) * sin($lonDelta), 2) +
    pow(cos($latFrom) * sin($latTo) - sin($latFrom) * cos($latTo) * cos($lonDelta), 2);
  $b = sin($latFrom) * sin($latTo) + cos($latFrom) * cos($latTo) * cos($lonDelta);

  $angle = atan2(sqrt($a), $b);
  return $angle * $earthRadius;
}

1
@ ট্রেয়াএ - বিভিন্ন সংস্করণ সম্ভব রয়েছে, এই সংস্করণটি উইকিপিডিয়ায় সূত্রটি কার্যকর করে এবং এটি ভালভাবে পরীক্ষিত। $ কোণ মানে রেডিয়ানে বিশ্বের মধ্যবর্তী কোণ, সুতরাং যে কোনও এটি পৃথিবী ব্যাসার্ধের সাথে গুণ করতে পারে। যদি কেউ আগ্রহী হন তবে আমি আরও জটিল ভিনসেন্টি সূত্রের উদাহরণও সরবরাহ করতে পারি।
মার্টিনস্টোকেলি

@ ট্রেয়া - হ্যাঁ আমি জানি, আপনি এটি দিয়ে কী বলতে চান তা আমি নিশ্চিত নই। আপনি কি ফাংশনটি পরীক্ষা করেছেন এবং এটি কোনও ভুল ফলাফল গণনা করেছে? এবং আপনি কি উইকিপিডিয়ায় সূত্রটি দেখেছেন? আপনার সত্যই নিজের একটি পরীক্ষা করা উচিত এবং আমাকে কী ভুল বলে গণ্য করা হয় তার একটি উদাহরণ দিন।
মার্টিনস্টোকেলি

দুঃখিত, তবে আমি এখন কিছু জিনিস ব্যাখ্যা করতে হবে। 1) প্রশ্নটি হ্যাভারসাইন সূত্রটি সম্পর্কে ছিল, আপনি যদি অন্য কোনও সূত্র ব্যবহার করার পরামর্শ দেন তবে আমাদের জানান। ২) হাভারসাইন সূত্রটি খুঁটির চারপাশে দুর্বলতা রয়েছে তবে ছোট দূরত্বের জন্য এটি সঠিক (এটি আরকোসিন সূত্রের সমস্যা)। 3) আপনি বলেছিলেন যে গণনা করা $ কোণের সাথে একটি পদক্ষেপ অনুপস্থিত রয়েছে, এটি কেবল ভুল, এটি ফলাফলকে উন্নত করতে পারে না, দয়া করে এটি পরীক্ষা করে দেখুন! 4) আমি সম্মত হই যে স্থিতিশীল ভিনসেন্টি সূত্রটি ব্যবহার করা আরও ভাল হবে, আমি ইতিমধ্যে একটি উদাহরণ দেওয়ার প্রস্তাব দিয়েছি। আপনি হয়ত উত্তরও লিখতে পারতেন?
মার্টিনস্টোকেলি

@ মার্টিনস্টোইক্লি - আপনি সঠিক, আপনার হাভারসাইন সূত্রে কোনও পদক্ষেপ নেই। ভবিষ্যতের পাঠকদের বিভ্রান্ত না করার জন্য আমি আমার মন্তব্যগুলি সরিয়েছি।
ট্রেইএ

1
@ প্রতীকসি জোশি - অবশেষে বিভিন্ন ইউনিট ব্যবহার সম্পর্কে একটি নোট যুক্ত করার জন্য সময় খুঁজে পেল।
মার্টিনস্টোকেলি

63

আমি এই কোডটি পেয়েছি যা আমাকে নির্ভরযোগ্য ফলাফল দিচ্ছে।

function distance($lat1, $lon1, $lat2, $lon2, $unit) {

  $theta = $lon1 - $lon2;
  $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) +  cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
  $dist = acos($dist);
  $dist = rad2deg($dist);
  $miles = $dist * 60 * 1.1515;
  $unit = strtoupper($unit);

  if ($unit == "K") {
      return ($miles * 1.609344);
  } else if ($unit == "N") {
      return ($miles * 0.8684);
  } else {
      return $miles;
  }
}

ফলাফল:

echo distance(32.9697, -96.80322, 29.46786, -98.53506, "M") . " Miles<br>";
echo distance(32.9697, -96.80322, 29.46786, -98.53506, "K") . " Kilometers<br>";
echo distance(32.9697, -96.80322, 29.46786, -98.53506, "N") . " Nautical Miles<br>";

2
দুর্দান্ত জিনিস, আমি এটি চেষ্টা করেছিলাম এবং গুগল
ম্যাপেও

আপনি যদি তিনটি পয়েন্টের মধ্যকার দূরত্ব গণনা করতে চান?
কেএক্সক্রিম

3
এই ফাংশনটিকে দু'বার কল করুন এবং এগুলি যুক্ত করুন, পর্যায়ক্রমে আপনি সেই অনুযায়ী ফাংশনটি পরিবর্তন করেন
জ্যানিথ চিন্তানা

কিছু শর্তে এনএএন
জহুর শ

23

এটি @ মার্টিনস্টোকেলি এবং @ জ্যানিথ চিন্তানা জবাবগুলির সাথে যুক্ত হয়েছে । যাঁদের কৌতূহল ছিল তাদের সম্পর্কে যা অ্যালগরিদম দ্রুততম আমি পারফরম্যান্স টেস্টটি লিখেছি । সেরা পারফরম্যান্স ফলাফল কোডেক্সওয়ার্ল্ড.কম থেকে অনুকূলিত ফাংশন দেখায় :

/**
 * Optimized algorithm from http://www.codexworld.com
 *
 * @param float $latitudeFrom
 * @param float $longitudeFrom
 * @param float $latitudeTo
 * @param float $longitudeTo
 *
 * @return float [km]
 */
function codexworldGetDistanceOpt($latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo)
{
    $rad = M_PI / 180;
    //Calculate distance from latitude and longitude
    $theta = $longitudeFrom - $longitudeTo;
    $dist = sin($latitudeFrom * $rad) 
        * sin($latitudeTo * $rad) +  cos($latitudeFrom * $rad)
        * cos($latitudeTo * $rad) * cos($theta * $rad);

    return acos($dist) / $rad * 60 *  1.853;
}

পরীক্ষার ফলাফল এখানে:

Test name       Repeats         Result          Performance     
codexworld-opt  10000           0.084952 sec    +0.00%
codexworld      10000           0.104127 sec    -22.57%
custom          10000           0.107419 sec    -26.45%
custom2         10000           0.111576 sec    -31.34%
custom1         10000           0.136691 sec    -60.90%
vincenty        10000           0.165881 sec    -95.26%

আপনার কোডে কোডেক্সওয়ার্ডস অ্যালগরিদমের গুণকটি 1.852, যেখানে আসল আসল 1.1515। কেন? কেন পার্থক্য?
গোট ব্যাটারি

@ গটব্যাটরিজ মুল মুলিটপ্লায়ার মাইল for অনুকূলিত ফাংশন ফলাফল কিমি। 1.1515 * 1.609344 = 1.853। ধন্যবাদ, স্থির হয়েছে 1.853।
আলেকজান্ডার ইয়ানচারুক

আপনি কেন আরও ভাল পারফরম্যান্সের জন্য ধ্রুবক হিসাবে M_PI / 180 এবং $ রেড * 60 * 1.853 ব্যবহার করবেন না?
এভরেন ইয়ুর্তেসেন

আপনার অগ্রাধিকার যদি পারফরম্যান্স হয় তবে @ এভ্রেন ইয়ুরটেন ভাল ধারণা। তবে রক্ষণাবেক্ষণযোগ্যতা এবং পাঠযোগ্যতা আরও জটিল হয়ে উঠবে বলে আমি মনে করি।
আলেকজান্ডার ইয়ানচারুক

পূর্ববর্তী লাইনে কেবল একটি মন্তব্য করুন এবং // এম_পিআই / ১৮০ ... ইত্যাদি বলুন কেন এটি বজায় রাখতে অসুবিধা হবে তা আমি জানি না। আপনি কখনও পরিবর্তন করবেন এমন কিছু নয়।
এভরেন ইয়ুর্তেসেন

10

দুটি অক্ষাংশ এবং দ্রাঘিমাংশের মধ্যে দূরত্ব গণনার জন্য এখানে সহজ এবং নিখুঁত কোড। নিম্নলিখিত কোডটি এখান থেকে পাওয়া গেছে - http://www.codexworld.com/distance-between-two-add્રેસ-google - maps - api - php/

$latitudeFrom = '22.574864';
$longitudeFrom = '88.437915';

$latitudeTo = '22.568662';
$longitudeTo = '88.431918';

//Calculate distance from latitude and longitude
$theta = $longitudeFrom - $longitudeTo;
$dist = sin(deg2rad($latitudeFrom)) * sin(deg2rad($latitudeTo)) +  cos(deg2rad($latitudeFrom)) * cos(deg2rad($latitudeTo)) * cos(deg2rad($theta));
$dist = acos($dist);
$dist = rad2deg($dist);
$miles = $dist * 60 * 1.1515;

$distance = ($miles * 1.609344).' km';

5

যারা সংক্ষিপ্ত এবং দ্রুত পছন্দ করেন তাদের জন্য (ডিগ্রাড 2) () কল করবেন না।

function circle_distance($lat1, $lon1, $lat2, $lon2) {
  $rad = M_PI / 180;
  return acos(sin($lat2*$rad) * sin($lat1*$rad) + cos($lat2*$rad) * cos($lat1*$rad) * cos($lon2*$rad - $lon1*$rad)) * 6371;// Kilometers
}

2

চেষ্টা করুন এটি দুর্দান্ত ফলাফল দেয়

function getDistance($point1_lat, $point1_long, $point2_lat, $point2_long, $unit = 'km', $decimals = 2) {
        // Calculate the distance in degrees
        $degrees = rad2deg(acos((sin(deg2rad($point1_lat))*sin(deg2rad($point2_lat))) + (cos(deg2rad($point1_lat))*cos(deg2rad($point2_lat))*cos(deg2rad($point1_long-$point2_long)))));

        // Convert the distance in degrees to the chosen unit (kilometres, miles or nautical miles)
        switch($unit) {
            case 'km':
                $distance = $degrees * 111.13384; // 1 degree = 111.13384 km, based on the average diameter of the Earth (12,735 km)
                break;
            case 'mi':
                $distance = $degrees * 69.05482; // 1 degree = 69.05482 miles, based on the average diameter of the Earth (7,913.1 miles)
                break;
            case 'nmi':
                $distance =  $degrees * 59.97662; // 1 degree = 59.97662 nautic miles, based on the average diameter of the Earth (6,876.3 nautical miles)
        }
        return round($distance, $decimals);
    }

2

বেশ পুরানো প্রশ্ন, তবে যারা পিএইচপি কোডে আগ্রহী তাদের ক্ষেত্রে যারা গুগল ম্যাপের মতো একই ফলাফল দেয়, নিম্নলিখিতটি কাজটি করে:

/**
 * Computes the distance between two coordinates.
 *
 * Implementation based on reverse engineering of
 * <code>google.maps.geometry.spherical.computeDistanceBetween()</code>.
 *
 * @param float $lat1 Latitude from the first point.
 * @param float $lng1 Longitude from the first point.
 * @param float $lat2 Latitude from the second point.
 * @param float $lng2 Longitude from the second point.
 * @param float $radius (optional) Radius in meters.
 *
 * @return float Distance in meters.
 */
function computeDistance($lat1, $lng1, $lat2, $lng2, $radius = 6378137)
{
    static $x = M_PI / 180;
    $lat1 *= $x; $lng1 *= $x;
    $lat2 *= $x; $lng2 *= $x;
    $distance = 2 * asin(sqrt(pow(sin(($lat1 - $lat2) / 2), 2) + cos($lat1) * cos($lat2) * pow(sin(($lng1 - $lng2) / 2), 2)));

    return $distance * $radius;
}

আমি বিভিন্ন স্থানাঙ্কের সাথে পরীক্ষা করেছি এবং এটি পুরোপুরি কার্যকর হয়।

আমি মনে করি এটির দ্রুত হওয়া উচিত তবে কিছু বিকল্পও। তবে তা পরীক্ষা করে দেখেনি।

ইঙ্গিত: গুগল ম্যাপস পৃথিবীর ব্যাসার্ধ হিসাবে 6378137 ব্যবহার করে। সুতরাং অন্যান্য অ্যালগরিদমের সাথে এটি ব্যবহার করাও কার্যকর হতে পারে।


1

সঠিক মূল্যবোধের জন্য এটি এর মতো করুন:

public function DistAB()
{
      $delta_lat = $this->lat_b - $this->lat_a ;
      $delta_lon = $this->lon_b - $this->lon_a ;

      $a = pow(sin($delta_lat/2), 2);
      $a += cos(deg2rad($this->lat_a9)) * cos(deg2rad($this->lat_b9)) * pow(sin(deg2rad($delta_lon/29)), 2);
      $c = 2 * atan2(sqrt($a), sqrt(1-$a));

      $distance = 2 * $earth_radius * $c;
      $distance = round($distance, 4);

      $this->measure = $distance;
}

হুম আমি মনে করি এটি করা উচিত ...

সম্পাদনা:

সূত্রাকারীদের এবং কমপক্ষে জেএস-বাস্তবায়নের জন্য চেষ্টা করুন: http://www.movable-type.co.uk/scriptts/latlong.html

আমাকে সাহস করুন ... আমি বৃত্ত-ক্রিয়াকলাপের সমস্ত মান ডিগ 2 করতে ভুলে গেছি ...


আপনার উত্তরের জন্য ধন্যবাদ. আমি implementation আর্থ_রাডিয়াস = 6372.795477598 ব্যবহার করে পয়েন্ট এ (42,12) এবং পয়েন্ট বি (43,12) এর মধ্যে একটি সাধারণ গণনা দিয়ে এই বাস্তবায়নটি পরীক্ষা করে দেখেছি 12745.591 এর ফলস্বরূপ এটি পাওয়া যায় যখন এটি 110,94 এর কাছাকাছি কিছু হওয়া উচিত
ম্যাক্সডেঞ্জেলো

1

হ্যালো এখানে দুটি পৃথক ল্যাট এবং দীর্ঘ ব্যবহার করে দূরত্ব এবং সময় পেতে কোড

$url ="https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins=16.538048,80.613266&destinations=23.0225,72.5714";



    $ch = curl_init();
    // Disable SSL verification

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    // Will return the response, if false it print the response
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // Set the url
    curl_setopt($ch, CURLOPT_URL,$url);
    // Execute
    $result=curl_exec($ch);
    // Closing
    curl_close($ch);

    $result_array=json_decode($result);
print_r($result_array);

পিএইচপি-তে অক্ষাংশ এবং দ্রাঘিমাংশ ব্যবহার করে দুটি ভিন্ন অবস্থানের মধ্যে সময় পেতে আপনি নীচের লিঙ্কের উদাহরণটি পরীক্ষা করতে পারেন


6
এমন কোনও কিছুর জন্য এপিআই কল করা অপ্রয়োজনীয় হতে পারে যা গণিত ব্যবহার করে সহজেই পাওয়া যায়।
আইভোটজে 50

1

অক্ষাংশ এবং দ্রাঘিমাংশের পয়েন্টের মধ্যে দূরত্ব গণনা করতে এই ফাংশনটি ব্যবহার করে দেখুন

function calculateDistanceBetweenTwoPoints($latitudeOne='', $longitudeOne='', $latitudeTwo='', $longitudeTwo='',$distanceUnit ='',$round=false,$decimalPoints='')
    {
        if (empty($decimalPoints)) 
        {
            $decimalPoints = '3';
        }
        if (empty($distanceUnit)) {
            $distanceUnit = 'KM';
        }
        $distanceUnit = strtolower($distanceUnit);
        $pointDifference = $longitudeOne - $longitudeTwo;
        $toSin = (sin(deg2rad($latitudeOne)) * sin(deg2rad($latitudeTwo))) + (cos(deg2rad($latitudeOne)) * cos(deg2rad($latitudeTwo)) * cos(deg2rad($pointDifference)));
        $toAcos = acos($toSin);
        $toRad2Deg = rad2deg($toAcos);

        $toMiles  =  $toRad2Deg * 60 * 1.1515;
        $toKilometers = $toMiles * 1.609344;
        $toNauticalMiles = $toMiles * 0.8684;
        $toMeters = $toKilometers * 1000;
        $toFeets = $toMiles * 5280;
        $toYards = $toFeets / 3;


              switch (strtoupper($distanceUnit)) 
              {
                  case 'ML'://miles
                         $toMiles  = ($round == true ? round($toMiles) : round($toMiles, $decimalPoints));
                         return $toMiles;
                      break;
                  case 'KM'://Kilometers
                        $toKilometers  = ($round == true ? round($toKilometers) : round($toKilometers, $decimalPoints));
                        return $toKilometers;
                      break;
                  case 'MT'://Meters
                        $toMeters  = ($round == true ? round($toMeters) : round($toMeters, $decimalPoints));
                        return $toMeters;
                      break;
                  case 'FT'://feets
                        $toFeets  = ($round == true ? round($toFeets) : round($toFeets, $decimalPoints));
                        return $toFeets;
                      break;
                  case 'YD'://yards
                        $toYards  = ($round == true ? round($toYards) : round($toYards, $decimalPoints));
                        return $toYards;
                      break;
                  case 'NM'://Nautical miles
                        $toNauticalMiles  = ($round == true ? round($toNauticalMiles) : round($toNauticalMiles, $decimalPoints));
                        return $toNauticalMiles;
                      break;
              }


    }

তারপর হিসাবে fucntion ব্যবহার করুন

echo calculateDistanceBetweenTwoPoints('11.657740','77.766270','11.074820','77.002160','ML',true,5);

আশা করি এটা সাহায্য করবে


আমার ক্ষেত্রে বাস্তব দৃশ্যের নিখুঁত কাজ দিয়ে যাচাই করা হয়েছে।
দেক্সেশ ভেকেরিয়া

1
এটি লিখতে এবং বাস্তব
দৃশ্যে

0

গুণকটি এখানে স্থিতিশীল দুরত্ব তত্ত্বের কারণে প্রতিটি স্থানাঙ্কে পরিবর্তিত হয়:

http://en.wikipedia.org/wiki/Great-circle_distance

এবং আপনি এখানে বর্ণিত এই সূত্রটি ব্যবহার করে নিকটতম মান গণনা করতে পারেন:

http://en.wikipedia.org/wiki/Great-circle_distance#Worked_example

কীটি প্রতিটি ডিগ্রি - মিনিট - দ্বিতীয় মানকে সমস্ত ডিগ্রি মানের রূপান্তর করে:

N 36°7.2', W 86°40.2'  N = (+) , W = (-), S = (-), E = (+) 
referencing the Greenwich meridian and Equator parallel

(phi)     36.12° = 36° + 7.2'/60' 

(lambda)  -86.67° = 86° + 40.2'/60'

0

অন্যতম সহজ উপায় হ'ল:

$my_latitude = "";
$my_longitude = "";
$her_latitude = "";
$her_longitude = "";

$distance = round((((acos(sin(($my_latitude*pi()/180)) * sin(($her_latitude*pi()/180))+cos(($my_latitude*pi()/180)) * cos(($her_latitude*pi()/180)) * cos((($my_longitude- $her_longitude)*pi()/180))))*180/pi())*60*1.1515*1.609344), 2);
echo $distance;

এটি 2 দশমিক পয়েন্ট আপ বন্ধ হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.