www.webdeveloper.com
Results 1 to 2 of 2

Thread: Distance calculation based on multiple locations including starting/ finish point

  1. #1
    Join Date
    Jun 2007
    Posts
    25

    Distance calculation based on multiple locations including starting/ finish point

    I would like to calculate the total distance of driving beetween multiple locations (loop), including the distance (starting point (garage) - first location sarting point) and (last location finishig point - finishing point (garage)). Example: (Garage + D1) + (D1 + D2) + (D2 + E1) + (E1 + E2) + E2 + Garage)

    I'm having a problem with the correct looping. Here's my simplified code:

    PHP Code:
    <?
    $driver 
    5;

         
    $result2 mysql_query("SELECT * FROM test WHERE id='$driver' LIMIT 1") or die(mysql_error());
         while(
    $row2 mysql_fetch_array$result2 )) {
             
    $lon=$row2['lon'];
             
    $lat=$row2['lat'];
        echo 
    "$lon$lat";
         }

       
    $result mysql_query("SELECT * FROM test1 WHERE driver='$driver'") or die(mysql_error());  
        while(
    $row mysql_fetch_array$result )) {

             
    $lon1=$row['lon1'];
             
    $lat1=$row['lat1'];
             
    $lon2=$row['lon2'];
             
    $lat2=$row['lat2'];

            
    //////////  distance between driver address and starting address    
            
    $distancecalc = (3958*3.1415926*sqrt(($lat-$lat1)*($lat-$lat1) + cos($lat/57.29578)*cos($lat1/57.29578)*($lon-$lon1)*($lon-$lon1))/180);
            
    //////////  distance between statring address and finishing address  - multiple adsresses
            
    $distancecalc1 $distancecalc1 + (3958*3.1415926*sqrt(($lat2-$lat1)*($lat2-$lat1) + cos($lat2/57.29578)*cos($lat1/57.29578)*($lon2-$lon1)*($lon2-$lon1))/180);
            
    //////////  distance between finishing address and driver address
            
    $distancecalc2 = (3958*3.1415926*sqrt(($lat2-$lat)*($lat2-$lat) + cos($lat2/57.29578)*cos($lat/57.29578)*($lon2-$lon)*($lon2-$lon))/180);

            
    $distancetotal $distancecalc $distancecalc1 +$distancecalc2;

            echo 
    "$distancecalc<br>
            
    $distancecalc1<br>
            
    $distancecalc2<br>";
        }
        echo 
    "$distancetotal";
      
    ?>
    I'm aware that code posted above doesnt't do what it meant to .. i just want to keep it clear.. there is some things i tried but no correct resoults.

    I would appreciate some help on this one.

    Thank you very much.

  2. #2
    Join Date
    Jun 2007
    Posts
    25
    Ok. I worked it out with help of mac_gyver (php freaks). All calculations are done as i wish. My code below:

    PHP Code:
    <?
    include "connectdb.php";
    $driver 5;
    $datestamp '2013/05/07';
    $result2 mysql_query("SELECT * FROM drivers WHERE id='$driver' LIMIT 1") or die(mysql_error());
    while(
    $row2 mysql_fetch_array$result2 )) {
    $lon=$row2['lon'];
    $lat=$row2['lat'];
    }

    $result mysql_query("SELECT * FROM quotedb WHERE moveday='$datestamp' AND driver='$driver' AND cleared='Not Cleared' AND status='Done' ORDER BY moveday, timeday") or die(mysql_error());
    $distance 0// accumulate the distance
    $first_pass true// flag to detect the first row inside the loop
    while($row mysql_fetch_assoc$result )) {
    $lon2a=$lon2;
    $lat2a=$lat2;
    $lon1=$row['lon1'];
    $lat1=$row['lat1'];
    $lon2=$row['lon2'];
    $lat2=$row['lat2'];
    // calculate the distance from the Garage to the first point of the first row
    if($first_pass){
    $distance += (3958*3.1415926*sqrt(($lat-$lat1)*($lat-$lat1) + cos($lat/57.29578)*cos($lat1/57.29578)*($lon-$lon1)*($lon-$lon1))/180);
    $first_pass false;
    }
    // calculate the distance for each row (segment) in the route
    $distance += (3958*3.1415926*sqrt(($lat2-$lat1)*($lat2-$lat1) + cos($lat2/57.29578)*cos($lat1/57.29578)*($lon2-$lon1)*($lon2-$lon1))/180);
    if ( 
    $lon2a == "" or $lat2a =="" ) {
    } else {
    // calculate the distance from the second point of the first row to the first point of the next row
    $distance += (3958*3.1415926*sqrt(($lat2a-$lat1)*($lat2a-$lat1) + cos($lat2a/57.29578)*cos($lat1/57.29578)*($lon2a-$lon1)*($lon2a-$lon1))/180);
    }
    }
    // calculate the distance from the second point of the last row to the Garage
    $distance += (3958*3.1415926*sqrt(($lat2-$lat)*($lat2-$lat) + cos($lat2/57.29578)*cos($lat/57.29578)*($lon2-$lon)*($lon2-$lon))/180);
    echo 
    "$distance<br>
    "
    ;
    ?>
    Still think there is a place for improvement in the code. Will aplay Haversine method for calculations. Do you guys have some suggestion to improve this piece of code ... thx

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HTML5 Development Center



Recent Articles