计算多边形的面积。

5

我需要获得地图上多边形的面积。我查找了new google.maps.geometry.spherical.computeArea的示例,但我不能让它工作,并且我不知道原因。

function dibuV(area){
  var i;
  var a = new Array();
  for(i=0; i<area.length; i++){
    var uno = area[i].split(",");
    a[i] = new google.maps.LatLng(uno[0],uno[1]);
  }
  poligon = new google.maps.Polygon({
    paths: a,
    strokeColor: "#22B14C",
    strokeOpacity: 0.8,
    strokeWeight: 2,
    fillColor: "#22B14C",  
    fillOpacity: 0.35  
  })  
  poligon.setMap(map);//until here is ok 
  var z = new google.maps.geometry.spherical.computeArea(poligon.getPath());
  alert(z); //this is not working
}
3个回答

15
您的代码出现了一个错误:google.maps.geometry未定义
根据Google Maps v3 API文档,几何函数是一个不被默认加载的库的一部分:

本文档中的概念仅适用于google.maps.geometry库中提供的功能。当您加载Maps JavaScript API时,默认情况下不会加载此库,但必须通过使用libraries引导参数明确指定。

为了在页面中加载和使用几何函数,您需要通过包含libraries=geometry将其添加到初始的Google API调用中,以通知Google您将使用几何库。
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?libraries=geometry&sensor=false"></script>
这将加载几何库,你的z变量将包含一个对象。
带有可工作代码的测试页面:
<!DOCTYPE html>
<html>
<head>
    <style type="text/css">
      html, body, #map_canvas {
        margin: 0;
        padding: 0;
        height: 100%;
      }
    </style>
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?libraries=geometry&sensor=false"></script>
<script type="text/javascript">
    var map;
    function initialize()
    {
        var myOptions = {
          zoom: 8,
          center: new google.maps.LatLng(-34.397, 150.644),
          mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById('map_canvas'), myOptions);
    }

    google.maps.event.addDomListener(window, 'load', initialize);
    </script>
<script>
function test()
{
var arr = new Array()
arr.push('51.5001524,-0.1262362');
arr.push('52.5001524,-1.1262362');
arr.push('53.5001524,-2.1262362');
arr.push('54.5001524,-3.1262362');
dibuV(arr);
}
function dibuV(area)
{
var a = new Array();

for(var i=0; i<area.length; i++)
{
    var uno = area[i].split(",");
    a[i] = new google.maps.LatLng(uno[0],uno[1]);
}

poligon = new google.maps.Polygon({
    paths: a,
    strokeColor: "#22B14C",
    strokeOpacity: 0.8,
    strokeWeight: 2,
    fillColor: "#22B14C",   
    fillOpacity: 0.35   
})  

poligon.setMap(map);//until here is ok 
var z = new google.maps.geometry.spherical.computeArea(poligon.getPath());
alert(z); //this is not working
}
</script>
</head>
<body onload="test();">
    <div id="map_canvas"></div>
</body>
</html>

我在想,你怎么知道他遇到了那个错误呢?就我而言,由于绘图库已经加载,添加你建议的脚本标签导致了进程失败。也许几何图形已经包含在绘图库中了?对我来说是有效的。(正如达芬奇所说,静态方法前面不要加“new”)。 - fortboise
谢谢,当我遇到这个问题时,我花了很多时间苦思冥想。在我的情况下,是在加载库的这部分之前触发了jquery加载事件。 - Khaja Minhajuddin
1
如果您需要多个库,只需像这样用逗号分隔它们:?libraries=geometry,visualization 等等。 - elrobis
2
搜索者额外的帮助,如果这不是一个完整的解决方案:如果您正在加载几何库并使用 API 密钥,则必须在“密钥”参数之前放置“libraries”参数。我之前就被卡在这个问题上了很久。 - James Cushing

6

这个不起作用是因为您正在使用"new"来使用computeArea方法。请使用"google.maps.geometry.spherical.computeArea"而不使用"new"。 例如:

var z = google.maps.geometry.spherical.computeArea(myPolyline.getPath().getArray());
alert(z);

这将有效。

0
请看下面的代码。
var z = google.maps.geometry.spherical.computeArea(poligon.getPath());

1
欢迎来到 Stack Overflow,虽然这可能会回答您的问题,但最好为您的答案提供解释而不只是代码。 - gogaz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接