【问题标题】:Determine the lat lngs of markers within a polygon确定多边形内标记的纬度
【发布时间】:2010-05-06 21:56:56
【问题描述】:

我有一个谷歌地图应用程序,它在加载时绘制标记。其中一项新要求是添加一个多边形覆盖,其中包含用户选择的标记。我能够使用 GMaps Utility Library 的几何控制来实现这一点

现在,下一步是形成一组选定的标记,我需要确定标记的 lat lngs 是否在多边形的 lat lngs 范围内?有没有办法确定多边形的 lat lng 并计算标记的 lat lng 是否在其边界内?

【问题讨论】:

    标签: google-maps


    【解决方案1】:

    我从未直接使用过 Google 地图,但您可以存储构成多边形的点,然后使用 the Point-In-polygon Algorithm 检查给定的经度和纬度点是否在多边形内。

    【讨论】:

      【解决方案2】:
      // Create polygon method for collision detection
      GPolygon.prototype.containsLatLng = function(latLng) {
          // Do simple calculation so we don't do more CPU-intensive calcs for obvious misses
          var bounds = this.getBounds();
      
          if(!bounds.containsLatLng(latLng)) {
              return false;
          }
      
          // Point in polygon algorithm found at http://msdn.microsoft.com/en-us/library/cc451895.aspx
          var numPoints = this.getVertexCount();
          var inPoly = false;
          var i;
          var j = numPoints-1;
      
          for(var i=0; i < numPoints; i++) { 
              var vertex1 = this.getVertex(i);
              var vertex2 = this.getVertex(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;
      };
      

      【讨论】:

        【解决方案3】:

        npinti's suggestion 之后,您可能需要查看以下针对 Google 地图的多边形内实现:

        【讨论】:

          【解决方案4】:

          这已在 v3 中更新。您可以通过 google.maps.geometry.poly 命名空间 API Documentation

          进行此计算

          【讨论】:

            猜你喜欢
            • 2012-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-09-24
            • 1970-01-01
            • 2018-12-20
            • 2012-10-30
            • 1970-01-01
            • 2014-09-06
            相关资源
            最近更新 更多