【问题标题】:How to draw a path on google maps by zip code如何通过邮政编码在谷歌地图上绘制路径
【发布时间】:2012-07-10 08:02:57
【问题描述】:

我想通过邮政编码或城市名称显示路径图和点之间的距离,就像我们输入往返地点和地图将在它们之间生成,将计算它们之间的总距离。

【问题讨论】:

    标签: google-maps


    【解决方案1】:

    您可以通过三个步骤完成此操作
    1)按邮政城市或邮政编码生成地图
    创建map1.php

        <html>
    <head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no"/>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
    <title>Google Maps JavaScript API v3 Example:Post City or Zip</title>
      </head>
    <body >
    <form action="map2.php" method="post" >
    Enter 1st zip code / city <input type="text" name="input1" id="input1"><br/>
    Enter 2nd zip code / city <input type="text" name="input2" id="input2">
    <input type="submit">
    </form>
    </body>
    </html>
    

    2) 创建map2.php并生成地图

    <!DOCTYPE html>
    <html>
    <head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no"/>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
    <title>Google Maps JavaScript API v3 Example: Directions Simple</title>
    <link href="http://code.google.com/apis/maps/documentation/javascript/examples/default.css" rel="stylesheet" type="text/css" />
    
    <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
    <script type="text/javascript">
      var directionDisplay;
      var directionsService = new google.maps.DirectionsService();
      var map;
    
      function initialize() {
        directionsDisplay = new google.maps.DirectionsRenderer();
        var chicago = new google.maps.LatLng(41.850033, -87.6500523);
        var myOptions = {
          zoom:7,
          mapTypeId: google.maps.MapTypeId.ROADMAP,
          center: chicago
        }
        map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
        directionsDisplay.setMap(map);
      }
    
      function calcRoute() {
        var start = '<?php echo $_POST['input1']; ?>';
        var end = '<?php echo $_POST['input2']; ?>';
    
    
        var request = {
            origin:start, 
            destination:end,
            travelMode: google.maps.DirectionsTravelMode.DRIVING
        };
        directionsService.route(request, function(response, status) {
          if (status == google.maps.DirectionsStatus.OK) {
            directionsDisplay.setDirections(response);
          }
        });
      }
    
    </script>
    </head>
    <body onLoad="initialize(),calcRoute()">
      <?php
      // calculate laglong by address and zip code
      function getLatLong($address){
        if (!is_string($address))die("All Addresses must be passed as a string");
        $_url = sprintf('http://maps.google.com/maps?output=js&q=%s',rawurlencode($address));
        $_result = false;
        if($_result = file_get_contents($_url)) {
            if(strpos($_result,'errortips') > 1 || strpos($_result,'Did you mean:') !== false) return false;
            preg_match('!center:\s*{lat:\s*(-?\d+\.\d+),lng:\s*(-?\d+\.\d+)}!U', $_result, $_match);
            $_coords['lat'] = $_match[1];
            $_coords['long'] = $_match[2];
        }
        return $_coords;
    }
      $to = getLatLong($_POST['input1']);echo "<br/>";print_r($to);
      $from = getLatLong($_POST['input2']);echo "<br/>";print_r($from);
    echo distance($to['lat'], $to['long'], $from['lat'], $from['long'], "m") . " miles";
    
    //  // calculate distance by lat long
    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;
          }
    }
    ?>
    
    
    <div id="map_canvas" style="top:30px;"></div>
    </body>
    </html>
    

    生成地图和getLatLong()函数查找laglong和距离函数查找城市或邮政编码之间的距离

    【讨论】:

      【解决方案2】:

      首先,您必须找到您的邮政编码的地理位置,您可以使用 gmaps api 轻松找到它。然后使用“distanceTo”方法查找到点之间的距离(您的地理点和邮政编码生成的地理点)。 distanceTo 方法以米为单位提供距离。

      Check this post

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-25
        • 1970-01-01
        • 2015-09-20
        • 2012-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-17
        相关资源
        最近更新 更多