2013-05-04 134 views
0

我有一个包含Google地图和表格的计算数据库中两个选定点之间距离的地图页面,但我不知道如何计算两个位置之间的距离PHP或AJAX和jQuery。php mysql计算2点之间的距离

我有一个包含一个村表:

  • ID
  • village_name
  • 纬度
  • 经度

这是我在我的代码至今:

map.php

<?php require_once('include/connect.php'); ?> 
<?php 
session_start(); 

    if(isset($_SESSION['login']) != 'true'){ 
     header("location: index.php"); 

     var_dump($_SESSION['login']); 
    } 


    $login = ($_SESSION['login']); 
    $userid = ($_SESSION['user_id']); 
    $login_user = ($_SESSION['username']); 
    $fname = ($_SESSION['first_name']); 
    $lname = ($_SESSION['last_name']); 
?> 
<?php require_once('header.php'); ?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta name="keywords" content="" /> 
<meta name="description" content="" /> 
<meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
<title>Lam_El_Chamel</title> 
<link href='http://fonts.googleapis.com/css?family=Oswald:400,300' rel='stylesheet' type='text/css' /> 
<link href='http://fonts.googleapis.com/css?family=Abel|Satisfy' rel='stylesheet' type='text/css' /> 
<link href="default.css" rel="stylesheet" type="text/css" media="all" /> 
<!--[if IE 6]> 
<link href="default_ie6.css" rel="stylesheet" type="text/css" /> 
<![endif]--> 

<script type = "text/javascript" src = "http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 

<style type="text/css"> 
      body { font: normal 10pt Helvetica, Arial; } 
      #map { width: 850px; height: 500px; border: 0px; padding: 0px;left:0px;;} 
      #calculate-distance-form{position:absolute; top:600px; right:-120px; width:570px; height:200;} 
     </style> 
     <script src="http://maps.google.com/maps/api/js?key=AIzaSyAcdPXDgq5V8wmTiJedTBXGqIhzq8XdKdc&sensor=false" type="text/javascript"></script> 
<script type="text/javascript"> 
     var icon = new google.maps.MarkerImage("http://maps.google.com/mapfiles/ms/micons/blue.png", 
         new google.maps.Size(32, 32), new google.maps.Point(0, 0), 
         new google.maps.Point(16, 32)); 
      var center = null; 
      var map = null; 
      var currentPopup; 
      var bounds = new google.maps.LatLngBounds(); 
      function addMarker(lat, lng, info) { 
       var pt = new google.maps.LatLng(lat, lng); 
       bounds.extend(pt); 
       var marker = new google.maps.Marker({ 
        position: pt, 
        icon: icon, 
        map: map 
       }); 
       var popup = new google.maps.InfoWindow({ 
        content: info, 
        maxWidth: 300 
       }); 
       google.maps.event.addListener(marker, "click", function() { 
        if (currentPopup != null) { 
         currentPopup.close(); 
         currentPopup = null; 
        } 
        popup.open(map, marker); 
        currentPopup = popup; 
       }); 
       google.maps.event.addListener(popup, "closeclick", function() { 
        map.panTo(center); 
        currentPopup = null; 
       }); 
      }   
      function initMap() { 
       map = new google.maps.Map(document.getElementById("map"), { 
        center: new google.maps.LatLng(0, 0), 
        zoom: 14, 
        mapTypeId: google.maps.MapTypeId.ROADMAP, 
        mapTypeControl: true, 
        mapTypeControlOptions: { 
         style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR 
        }, 
        navigationControl: true, 
        navigationControlOptions: { 
         style: google.maps.NavigationControlStyle.ZOOM_PAN 
        } 
       }); 


<?php 

$query = mysql_query("SELECT * FROM location")or die(mysql_error()); 
while($row = mysql_fetch_array($query)) 
{ 
    $name = $row['user_name']; 
    $lat = $row['lattitude']; 
    $lon = $row['longitude']; 
    //$desc = $row['desc']; 



    echo("addMarker($lat, $lon, '<b>$name</b><br />');\n"); 

} 

?> 
center = bounds.getCenter(); 
    map.fitBounds(bounds); 

    } 
    </script> 
    <script type="text/javascript"> 
     $(document).ready(function(){ 
      $("select#location2").attr("disabled","disabled"); 
      $("select#location1").change(function(){ 
       id = $(this).val(); 
      $("select#location2").attr("disabled","disabled"); 
      $("select#location2").html("<option>wait...</option>"); 
      $.post("select_location.php", {id:id}, function(data){ 
      $("select#location2").removeAttr("disabled"); 
      $("select#location2").html(data); 
     }); 
     }); 
     }); 
    </script> 

</head> 
<body onload="initMap()" style="margin:0px; border:0px; padding:0px;"> 



<div id="wrapper"> 
    <div id="page-wrapper"> 
     <div id="page"> 
      <div id="wide-content"> 
       <h2>Map Border .....See Your Location with Google Map</h2> 
       <div id="map"></div> 
       <div id="calculate-distance-form"> 
       <?php require_once('include/select.class.php'); ?> 
        <form action="calculate_distance.php" method="post"> 
        Location one: 
      <select id="location1" name="pt1"> 
         <?php echo $opt->Showlocation() ?> 
         </select><br /> 
           <br /> 

       Location two: 
      <select id="location2" name="pt2"> 
          <option value="0">choose...</option> 
         </select><br /> 
           <br /> 

         <input type="submit" name="calculate" value="Calculate Distance" /> 
       </form> 
        <!-- 
        First Location<br /> 
        <input type="text" name="lat1" placeholder="first Latitude" /> 
        <input type="text" name="lon1" placeholder="first longitude"/><br /> 
        Second Location<br /> 
        <input type="text" name="lat2" placeholder="second latitude" /> 
        <input type="text" name="lon2" placeholder="second longitude"/><br /> 
        <input type="submit" name="calculate-distance" value="Calculate Distance" /> 
        --> 
       </div> 
      </div> 
     </div> 
    </div> 
</div> 
<?php require_once('footer.php'); ?> 


</body> 
</html> 
+0

[使用PHP和谷歌地图API 2个交码(UK)之间的工作距离从]的可能重复(http://stackoverflow.com/questions/2296087/using-php-and-google-maps -api-work-out-distance-between-2-post-codes-uk) – TheHippo 2013-05-04 14:16:15

+0

[计算谷歌地图V3中两点之间的距离](http://stackoverflow.com/questions/1502590/calculate-distance- google-maps-v3) – qisho 2013-05-04 14:24:37

回答

0

假设你的表现公式是这样的:

<form action="calculate_distance.php" method="post"> 

    <input type="text" name="lat1" placeholder="first Latitude" /> 
    <input type="text" name="lng1" placeholder="first longitude"/><br /> 

    <input type="text" name="lat2" placeholder="second latitude" /> 
    <input type="text" name="lng2" placeholder="second longitude"/><br />  

    <input type="submit" name="calculate" value="Calculate Distance" /> 
</form> 

calculate_distance.php脚本可能类似于这里提供了答案:Calc distance of two points in PHP

... 
<?php 
    $pi80 = M_PI/180; 
    $lat1 = floatval($_POST['lat1']) * $pi80; 
    $lng1 = floatval($_POST['lng1']) * $pi80; 
    $lat2 = floatval($_POST['lat2']) * $pi80; 
    $lng2 = floatval($_POST['lng2']) * $pi80; 

    $r = 6372.797; // earth radius 
    $dlat = $lat2 - $lat1; 
    $dlng = $lng2 - $lng1; 
    $a = sin($dlat/2) * sin($dlat/2) + cos($lat1) * cos($lat2) * sin($dlng/2) * sin($dlng/2); 
    $c = 2 * atan2(sqrt($a), sqrt(1 - $a)); 
    $km = $r * $c; 

    echo "Distance: ". $km; 
?> 
... 
+0

Little note ..你不能在函数外面执行'return' – 2013-05-04 15:20:56

+0

@ ottel142我的表单是一个2个下拉列表,其中包含一个来自数据库的存储村名,每个村名都有经纬度 – user2338686 2013-05-04 15:37:44

+0

达里尔,你说得对。谢谢你的提示。 @作者:请清理你的代码片段(删除不相关的和未使用的东西) – ottel142 2013-05-04 15:47:47