Google Maps v3数据图层:添加和删除多边形。第一次工作,但不是之后

时间:2017-07-17 19:28:26

标签: google-maps google-maps-api-3

我的地图上有2个数据图层:territories和newAreas。当我在地图上绘制多边形时,它将保存到newAreas数据图层中,进行处理,然后将输出添加到地域图层,并从地图中删除绘制的图层。

这一切都适用于我在地图上绘制的第一个多边形,但同一地图会话中的后续绘图似乎不会在地图上更新。

这是一个小提琴的例子。在绘图控件中选择多边形,然后绘制与地图上现有要素相交的多边形。然后再试一次。

https://jsfiddle.net/wf9g35ty/2/

我认为问题出在这里:

newAreas.addListener('addfeature', function(obj){
  //get the drawn feature in geojson format
  obj.feature.toGeoJson(function(geojson){
    //convert the existing territories data layer to geojson
    territories.toGeoJson(function(gj2){
      //merge the existing territories to a single polygon
      var features = gj2.features;
      for(i=0;i<features.length;i++) {
        if(i==0){
          var union = features[i];
        } else {
          union = turf.union(union,features[i]);
        }
      }
      //use Turf to cut out the overlapping parts
      var difference = turf.difference(geojson, union);
      //TO DO: The operation only works for the first territory added.  Figure out how to draw more than one territory in same session add the difference to the territories layer & 
      territories.addGeoJson(difference);
      // remove drawn feature.
      newAreas.remove(obj.feature);
    })
  });
})

1 个答案:

答案 0 :(得分:1)

我通过在remove事件之后添加以下两行代码解决了这个问题。

newAreas.setMap(null);
newAreas.setMap(map);

我必须使用setMap基本上从地图中删除整个数据层,然后重新添加它,这解决了问题。但它不是很直观。