计算在谷歌地图上绘制的多边形的面积

Posted

技术标签:

【中文标题】计算在谷歌地图上绘制的多边形的面积【英文标题】:Calculating area of a polygon drawn on google map 【发布时间】:2012-02-20 15:58:51 【问题描述】:

我正在寻找一种精确的算法或服务来计算地球上的表面积,其中的点是根据 GPS 坐标计算的。

我使用的是 Google Map Api 版本 3,并且正在根据记录的坐标绘制多边形,但我认为计算多边形面积的标准方法不会考虑坡度(山)。我需要为这样的事情处理轮廓吗?

是否有任何第三方服务可能是 ArcGis 或其他考虑坡度的服务。

【问题讨论】:

【参考方案1】:

是的,这绝对是可能的。这里有一个带有示例代码的快速教程:

https://web.archive.org/web/20130301120148/http://geojason.info/demos/line-length-polygon-area-google-maps-v3

相关部分是这样的:

google.maps.geometry.spherical.computeArea(yourPolygon.getPath());

官方文档:

http://code.google.com/apis/maps/documentation/javascript/reference.html#spherical

【讨论】:

这个 API 会考虑土地的海拔高度吗?我将从 GPS 设备获取坐标。 不,它假定一个完美光滑的球形地球。听起来您真正想要的是数字高程模型的表面积。这可以通过 GRASS GIS 中的 r.surf.area 函数计算,但如果您想了解更多信息,您可能应该在 gis.stackexchange.com 上询问 @Brad 嘿,我打开了第一个链接,但找不到页面。你能发给我其他相关的链接吗? @Google 你是 Google,你找不到吗? :-D 抱歉,我不知道替换链接。如果有人想在archive.org 上找到它,我会保留链接。无论如何,该行就是您要查找的内容,您可以在文档中阅读有关它的更多信息。 @Brad ya 我是谷歌,但有时谷歌也会对此感到困惑。bdw 我想在两个地方之间画线路径。【参考方案2】:

布拉德的回答

google.maps.geometry.spherical.computeArea(yourPolygon.getPath());

是正确的,但要注意,它只适用于不自相交的多边形。当多边形开始自相交时,事情就大错特错了。您可以通过 Brad 提供的链接进行尝试 http://geojason.info/demos/line-length-polygon-area-google-maps-v3/ 。只需绘制 4-5 条相交线并开始使用顶点。面积计算肯定会出错。

如果你不相信,这里有一个例子:

   var map;

    google.maps.visualRefresh = true;

    google.maps.event.addDomListener(window, 'load', initialize);

    function initialize() 
        var mapOptions = 
            center : new google.maps.LatLng(55.874, -4.287),
            zoom : 16,
            mapTypeId : google.maps.MapTypeId.ROADMAP
        ;
        map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions)

        drawExample();
    

    function drawExample() 
        var pathLeft = [new google.maps.LatLng(55.874, -4.292),
            new google.maps.LatLng(55.875, -4.292),
            new google.maps.LatLng(55.875, -4.290),
            new google.maps.LatLng(55.876, -4.290),
            new google.maps.LatLng(55.876, -4.291),
            new google.maps.LatLng(55.874, -4.291)]

        var polygonLeft = new google.maps.Polygon(
            path : pathLeft,
            map: map
        );

        var areaLeft = google.maps.geometry.spherical.computeArea(polygonLeft.getPath());

        var pathRight = [new google.maps.LatLng(55.874, -4.282),
            new google.maps.LatLng(55.875, -4.282),
            new google.maps.LatLng(55.875, -4.280),
            new google.maps.LatLng(55.8753, -4.2807),
            new google.maps.LatLng(55.876, -4.281),
            new google.maps.LatLng(55.874, -4.281)]

        var polygonRight = new google.maps.Polygon(
            path : pathRight,
            map: map
        );

        var areaRight = google.maps.geometry.spherical.computeArea(polygonRight.getPath());

        console.log("areaLeft: " + areaLeft + "\nareaRight: " + areaRight);
    

错误报告http://code.google.com/p/gmaps-api-issues/issues/detail?id=5624&colspec=ID%20Type%20Status%20Introduced%20Fixed%20Summary%20Stars%20ApiType%20Internal&start=700#makechanges

【讨论】:

能否请您提一下您在此答案中显示的代码。这会更有帮助。 @PawanGupta 这是错误报告中某人创建的 jsfiddle jsfiddle.net/kaiser/VjQjg 检查您的控制台,您会发现计算错误的输出

以上是关于计算在谷歌地图上绘制的多边形的面积的主要内容,如果未能解决你的问题,请参考以下文章

在谷歌地图上为给定地址绘制多边形

如何使用坐标数组在谷歌地图 API 中绘制多边形?

GPS不准确时如何计算可能位置的面积(如在谷歌地图中)

根据不同的纬度和长度设置谷歌地图的缩放级别

在谷歌地图上绘制区域

Android,在谷歌地图上绘制路线