首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >谷歌地图中使用了什么方法从LatLong计算面积?

谷歌地图中使用了什么方法从LatLong计算面积?
EN

Stack Overflow用户
提问于 2015-12-01 04:06:58
回答 1查看 120关注 0票数 0

我想知道Google中使用了什么方法从lat long查找computeArea()函数的结果。你能告诉我computeArea()的公式吗?

这是我的本科论文文学。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-01 13:51:34

您可以为此目的调查几何图形库,但不幸的是,没有任何非缩小/非混淆版本的Google是可用的。

下面提供了计算多边形面积(以平方米为单位)的类似功能:

代码语言:javascript
复制
function computeArea(latLngs) {
    var pointsCount = latLngs.length,
            area = 0.0,
            d2r = Math.PI / 180.0,
            radius = 6378137.0,
            p1, p2;

    if (pointsCount <= 2)
        return 0;

    for (var i = 0; i < pointsCount; i++) {
        p1 = latLngs[i];
        p2 = latLngs[(i + 1) % pointsCount];
        area += ((p2.lng() - p1.lng()) * d2r) *
                (2 + Math.sin(p1.lat() * d2r) + Math.sin(p2.lat() * d2r));
    }
    area = area * radius * radius / 2.0;
    return Math.abs(area);
}

示例

代码语言:javascript
复制
function initMap() {
    var map = new google.maps.Map(document.getElementById('map'), {
        zoom: 5,
        center: { lat: 55.761838, lng: 37.626980 },
        mapTypeId: google.maps.MapTypeId.TERRAIN
    });

    var coords = [
        { lat: 55.761838, lng: 37.626980 },
        { lat: 57.624476, lng: 23.997321 },
        { lat: 52.228649, lng: 21.025482 },
        { lat: 50.692479, lng: 30.645169 }
    ];

    var latLngs = coords.map(function(coord) {
        return new google.maps.LatLng(coord.lat, coord.lng);
    });

   

    
    var area = new google.maps.Polygon({
        paths: coords,
        strokeColor: '#FF0000',
        strokeOpacity: 0.8,
        strokeWeight: 3,
        fillColor: '#FF0000',
        fillOpacity: 0.35
    });
    area.setMap(map);

    var areaSize = google.maps.geometry.spherical.computeArea(latLngs);
    document.getElementById('panel').innerHTML = 'google.maps.geometry.spherical.computeArea: ' + areaSize / 1000;
    var areaSizeAlt = computeArea(latLngs);
    document.getElementById('panel').innerHTML += '<br>custom computeArea: ' + areaSizeAlt / 1000;


}



function computeArea(latLngs) {
    var pointsCount = latLngs.length,
			area = 0.0,
			d2r = Math.PI / 180.0,
			radius = 6378137.0,
			p1, p2;

    if (pointsCount <= 2)
        return 0;

    for (var i = 0; i < pointsCount; i++) {
        p1 = latLngs[i];
        p2 = latLngs[(i + 1) % pointsCount];
        area += ((p2.lng() - p1.lng()) * d2r) *
                (2 + Math.sin(p1.lat() * d2r) + Math.sin(p2.lat() * d2r));
    }
    area = area * radius * radius / 2.0;
    return Math.abs(area);
}
代码语言:javascript
复制
html, body {
    height: 100%;
    margin: 0;
    padding: 0;
}

#map {
    height: 100%;
}

#panel {
  position: absolute;
  top: 10px;
  left: 25%;
  z-index: 5;
  background-color: #fff;
  padding: 5px;
  border: 1px solid #999;
  text-align: center;
  font-family: 'Roboto','sans-serif';
  line-height: 30px;
  padding-left: 10px;
}
代码语言:javascript
复制
<div id="panel"></div>
<div id="map"></div>
<script async defer
            src="https://maps.googleapis.com/maps/api/js?libraries=geometry&callback=initMap"></script>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34012416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档