2017-10-20 139 views

回答

3

您可以用额外的宽容与polyline插入您的多边形,即一个区域,然后使用containsLocation。 您需要填充绘制所需多边形的点阵列。你 Check this jsfiddle

也可以使用从几何库。

isLocationOnEdge(点:经纬度,聚:多边形|折线,宽容:多少?)

公差是基于纬度/经度
如(44.9875,35.9812)是项所需的小数位精度在多段线上,如果公差为0.00001,那么如果将该点更改为(44.9876,35.9812),该点将位于多段线上。

containsLocation一个例子:

points within a polygon defined in array

function initMap() { 
 
     var map = new google.maps.Map(document.getElementById('map'), { 
 
      center: {lat: 24.886, lng: -70.269}, 
 
      zoom: 5, 
 
     }); 
 

 
     var triangleCoords = [ 
 
      {lat: 25.774, lng: -80.19}, 
 
      {lat: 18.466, lng: -66.118}, 
 
      {lat: 32.321, lng: -64.757} 
 
     ]; 
 

 
     var bermudaTriangle = new google.maps.Polygon({paths: triangleCoords}); 
 

 
     google.maps.event.addListener(map, 'click', function(e) { 
 
      var resultColor = 
 
       google.maps.geometry.poly.containsLocation(e.latLng, bermudaTriangle) ? 
 
       'blue' : 
 
       'red'; 
 

 
      var resultPath = 
 
       google.maps.geometry.poly.containsLocation(e.latLng, bermudaTriangle) ? 
 
       // A triangle. 
 
       "m 0 -1 l 1 2 -2 0 z" : 
 
       google.maps.SymbolPath.CIRCLE; 
 

 
      new google.maps.Marker({ 
 
      position: e.latLng, 
 
      map: map, 
 
      icon: { 
 
       path: resultPath, 
 
       fillColor: resultColor, 
 
       fillOpacity: .2, 
 
       strokeColor: 'white', 
 
       strokeWeight: .5, 
 
       scale: 10 
 
      } 
 
      }); 
 
     }); 
 
     }
<div id="map"></div> 
 
<script async defer 
 
    src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDztlrk_3CnzGHo7CFvLFqE_2bUKEq1JEU&libraries=geometry&callback=initMap"></script>

Example with isLocationOnEdge on jsfiddle

isLocationOnEdge

完整的 source code服务器迁移

+0

那么,有核实的队友,贴近并与通道方向上点的方向两件事情。 –

+0

我想你有一个点的数组来生成你的折线。您可以绘制一个矩形,与上,下此数组中的约束和饲料它的triangleCoords功能(在你的情况下,polygonCoords) –

+0

忘了提,我需要做的是在服务器端。 –

相关问题