0

我想以一种非常规的方式使用谷歌地图。我想执行 javacript 但我不想渲染任何图像。相反,我想将一些数据发送到文件,使用 API 必须提供的一些计算功能,然后传回文本响应。我尝试使用以下代码进行此操作,但后来意识到这可能无法正常工作,因为 javascript 在浏览器中运行,而不是作为远程 Web 服务。话虽如此,远程服务器如何调用“Web 服务”,就像我下面的代码必须提供的那样,目的是获得简单的“是”或“否”响应。

<?php

  // Get vars
  $lat=$_GET["lat"];
  $lon=$_GET["lon"];

?>



<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <style type="text/css">
      html { height: 100% }
      body { height: 100%; margin: 0; padding: 0 }
      #map_canvas { height: 100% }
    </style>
    <script type="text/javascript"
      src="https://maps.googleapis.com/maps/api/js?key=MYKEYNOTYOURS:)&sensor=true&libraries=geometry">
    </script>
    <script type="text/javascript">
// Poygon getBounds extension - google-maps-extensions
// http://code.google.com/p/google-maps-extensions/source/browse/google.maps.Polygon.getBounds.js
if (!google.maps.Polygon.prototype.getBounds) {
  google.maps.Polygon.prototype.getBounds = function(latLng) {
    var bounds = new google.maps.LatLngBounds();
    var paths = this.getPaths();
    var path;

    for (var p = 0; p < paths.getLength(); p++) {
      path = paths.getAt(p);
      for (var i = 0; i < path.getLength(); i++) {
        bounds.extend(path.getAt(i));
      }
    }

    return bounds;
  }
}

// Polygon containsLatLng - method to determine if a latLng is within a polygon
google.maps.Polygon.prototype.containsLatLng = function(latLng) {
  // Exclude points outside of bounds as there is no way they are in the poly
  var bounds = this.getBounds();

  if(bounds != null && !bounds.contains(latLng)) {
    return false;
  }

  // Raycast point in polygon method
  var inPoly = false;

  var numPaths = this.getPaths().getLength();
  for(var p = 0; p < numPaths; p++) {
    var path = this.getPaths().getAt(p);
    var numPoints = path.getLength();
    var j = numPoints-1;

    for(var i=0; i < numPoints; i++) { 
      var vertex1 = path.getAt(i);
      var vertex2 = path.getAt(j);

      if (vertex1.lng() < latLng.lng() && vertex2.lng() >= latLng.lng() || vertex2.lng() < latLng.lng() && vertex1.lng() >= latLng.lng())  {
        if (vertex1.lat() + (latLng.lng() - vertex1.lng()) / (vertex2.lng() - vertex1.lng()) * (vertex2.lat() - vertex1.lat()) < latLng.lat()) {
          inPoly = !inPoly;
        }
      }

      j = i;
    }
  }

  return inPoly;
}


      function initialize() {


        var mapOptions = {
          center: new google.maps.LatLng(38.990842,-76.93625),
          zoom: 17,
          mapTypeId: google.maps.MapTypeId.ROADMAP
        };

      var box = [new google.maps.LatLng(38.9913160,-76.937079), 
      new google.maps.LatLng(38.991333,-76.936119),
      new google.maps.LatLng(38.990287, -76.936108),
      new google.maps.LatLng(38.990278,-76.937057),
      new google.maps.LatLng(38.990495,-76.937052), 
      new google.maps.LatLng(38.990499,-76.936424),
      new google.maps.LatLng(38.991091,-76.93643),
      new google.maps.LatLng(38.991104,-76.937079)
      ];

        var mPoint = [new google.maps.LatLng(38.991300,-76.936165)];

        var AVpoly = new google.maps.Polygon({path:box,
           strokeColor:"#0000FF",
           strokeOpacity:0.8,
           strokeWeight:2,
           fillColor:"#0000FF",
           fillOpacity:0.4});

        var lat = <?php echo $lat; ?>;
        var lon = <?php echo $lon; ?>;

if(AVpoly.containsLatLng(new google.maps.LatLng(lat,lon), box) == true) {
        document.write("Yes");
}
else
{
document.write("No");
}

      }



    </script>
  </head>
  <body onload="initialize()">
    <div id="map_canvas" style="width:100%; height:100%"></div>
  </body>
</html>
4

1 回答 1

2

这是不允许的!如果您展示的是可公开访问的地图,您只能使用 Google 地图数据。请参阅TOS 的第 9.1 节和第10.1.1 (g)节“没有 Google 地图,不得使用内容。 ”:

于 2012-12-07T08:13:40.017 回答