计算在谷歌地图上绘制的多边形的面积
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 检查您的控制台,您会发现计算错误的输出以上是关于计算在谷歌地图上绘制的多边形的面积的主要内容,如果未能解决你的问题,请参考以下文章