Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取多边形的边界(JS)_Javascript_Jquery_Google Maps_Google Maps Api 3 - Fatal编程技术网

Javascript 获取多边形的边界(JS)

Javascript 获取多边形的边界(JS),javascript,jquery,google-maps,google-maps-api-3,Javascript,Jquery,Google Maps,Google Maps Api 3,我在地图上画多边形 这是drawingManager的函数 drawingManager = new google.maps.drawing.DrawingManager({ drawingMode: google.maps.drawing.OverlayType.RECTANGLE, drawingControlOptions: { drawingModes: [ google.maps.drawing.OverlayType.RECT

我在地图上画多边形

这是drawingManager的函数

 drawingManager = new google.maps.drawing.DrawingManager({
    drawingMode: google.maps.drawing.OverlayType.RECTANGLE,
    drawingControlOptions: {
        drawingModes: [
            google.maps.drawing.OverlayType.RECTANGLE,
            google.maps.drawing.OverlayType.POLYGON

        ]
    },
    polygonOptions: {
        fillColor: 'green',
        fillOpacity: 0.4,
        strokeWeight: 1,
        clickable: true,
        zIndex: 1,
        editable: false
    }
});
我需要计算多边形的边界。我读到,我不能通过
.getBounds
像使用square那样做

所以我在这里找到了

我试了一个答案

现在我的代码是这样的

drawingManager.addListener('polygoncomplete', function (polygon) {
    var bounds = new google.maps.LatLngBounds();

    polygon.forEach(function (feature) {
        if (feature.getGeometry().getType() === 'Polygon') {
            feature.getGeometry().forEachLatLng(function (latlng) {
                bounds.extend(latlng);
            });
        }
    });
    console.dir(bounds);
}); 
在控制台中,我得到了这个错误

Index.js:1673未捕获类型错误:polygon.forEach不是函数

在这一行
polygon.forEach(函数(特征){

问题在哪里?我如何解决它?

请参阅:

多边形有一个
.getPaths()
方法,该方法返回LatLng对象的MVCArray

drawingManager.addListener('polygoncomplete', function(polygon) {
  var bounds = new google.maps.LatLngBounds();
  polygon.getPaths().forEach(function(path) {
    path.forEach(function(latlng) {
      bounds.extend(latlng);
      map.fitBounds(bounds);
    });
  });
});

代码片段:

函数初始化(){
var map=new google.maps.map(
document.getElementById(“地图画布”){
中心:新google.maps.LatLng(37.4419,-122.1419),
缩放:13,
mapTypeId:google.maps.mapTypeId.ROADMAP
});
var drawingManager=new google.maps.drawing.drawingManager({
地图:地图,
drawingMode:google.maps.drawing.OverlayType.RECTANGLE,
drawingControlOptions:{
绘图模式:[
google.maps.drawing.overlytype.RECTANGLE,
google.maps.drawing.overlytype.POLYGON
]
},
多克隆选择:{
fillColor:'绿色',
填充不透明度:0.4,
冲程重量:1,
可点击:正确,
zIndex:1,
可编辑:false
}
});
drawingManager.addListener('polygoncomplete',函数(多边形){
var bounds=new google.maps.LatLngBounds();
polygon.getpath().forEach(函数(路径){
路径forEach(函数(latlng){
边界扩展(latlng);
映射边界(bounds);
});
});
});
}
google.maps.event.addDomListener(窗口“加载”,初始化);
html,
身体
#地图画布{
身高:100%;
宽度:100%;
边际:0px;
填充:0px
}

请参见:

多边形有一个
.getPaths()
方法,该方法返回LatLng对象的MVCArray

drawingManager.addListener('polygoncomplete', function(polygon) {
  var bounds = new google.maps.LatLngBounds();
  polygon.getPaths().forEach(function(path) {
    path.forEach(function(latlng) {
      bounds.extend(latlng);
      map.fitBounds(bounds);
    });
  });
});

代码片段:

函数初始化(){
var map=new google.maps.map(
document.getElementById(“地图画布”){
中心:新google.maps.LatLng(37.4419,-122.1419),
缩放:13,
mapTypeId:google.maps.mapTypeId.ROADMAP
});
var drawingManager=new google.maps.drawing.drawingManager({
地图:地图,
drawingMode:google.maps.drawing.OverlayType.RECTANGLE,
drawingControlOptions:{
绘图模式:[
google.maps.drawing.overlytype.RECTANGLE,
google.maps.drawing.overlytype.POLYGON
]
},
多克隆选择:{
fillColor:'绿色',
填充不透明度:0.4,
冲程重量:1,
可点击:正确,
zIndex:1,
可编辑:false
}
});
drawingManager.addListener('polygoncomplete',函数(多边形){
var bounds=new google.maps.LatLngBounds();
polygon.getpath().forEach(函数(路径){
路径forEach(函数(latlng){
边界扩展(latlng);
映射边界(bounds);
});
});
});
}
google.maps.event.addDomListener(窗口“加载”,初始化);
html,
身体
#地图画布{
身高:100%;
宽度:100%;
边际:0px;
填充:0px
}

虽然此处没有记录:

用于
Polygon
s的Google Maps API有一个
getBounds()
方法

应更新API文件,以包括:

getBounds()
  Parameters:  None
  Return Value:  LatLngBounds
  Returns the bounds of the Polygon.

虽然此处没有记录:

用于
Polygon
s的Google Maps API有一个
getBounds()
方法

应更新API文件,以包括:

getBounds()
  Parameters:  None
  Return Value:  LatLngBounds
  Returns the bounds of the Polygon.

我认为您不需要查看所有的线性环,是吗?第一个环,您可以使用
.getPath()直接检索它
,定义外环,因此您可以直接在该环上迭代,而忽略其余环。第一个环之后的任何环都是多边形中的孔,因此它们不会影响外边界。是否确实要调用
map.fitBounds(bounds)
重复这样做?我希望在循环退出并累积边界后,您只想调用它一次。@MichaelGeary第一条路径不必是外部边界(尽管从
DrawingManager
,它将是,并且永远只有一条路径,因此它不是特别相关)第一条路径不必是外边界哦,这很有趣,也有点吓人。出于某种原因,我假设它就像外环必须在第一个位置一样。我的假设不好,谢谢你的更正!这是一个有趣的比较,确实要求外环在第一个位置,但这是有意义的,因为它使用GeoJSON作为它的属性数据格式。我认为您不需要查看所有的线性环,是吗?第一个环,您可以使用
.getPath()直接检索它
,定义外环,因此您可以直接在该环上迭代,而忽略其余环。第一个环之后的任何环都是多边形中的孔,因此它们不会影响外边界。是否确实要调用
map.fitBounds(bounds)
重复这样做?我希望在循环退出并累积边界后,您只想调用它一次。@MichaelGeary第一条路径不必是外部边界(尽管从
DrawingManager
,它将是,并且永远只有一条路径,因此它不是特别相关)第一条路径不必是外边界哦,这很有趣,也有点吓人。出于某种原因,我假设它就像外环必须在第一个位置一样。我的假设不好,谢谢你的更正!这是一个有趣的比较,确实要求外环在第一个位置,但这是有意义的,因为它使用GeoJSON作为它的属性数据格式。