在 JS 中的 Google 地图中创建一个大小以米为单位的正方形/多边形

Create a square / polygon with a size in meters in Google Maps in JS

我快疯了!我已经阅读了几乎所有 Google Maps JavaScript API V3 文档,但我找不到开发以下用例的方法:

我想创建一个以米为单位的特定大小的正方形/圆形/多边形。圆的半径,或 LAT 和 LNG 之间的距离(以米为单位)。

我知道可以测量 LatLng 之间的距离(以米为单位),但我想用该尺寸创建它。

有人知道怎么做吗?那太棒了!

您可以使用几何库,更具体地说是 computeOffset 方法。

distance 参数以米为单位,尽管文档中并不清楚。

这是一个使用矩形的简单示例 class,但您可以使用任何形状。对于圆,您不需要这个,因为半径已经用米表示了。

对于矩形,您需要计算边界(north-east 为 ne,south-west 为 sw。在这里,我创建了一个矩形(在本例中为正方形),对角线为 500 米。

对于多边形,您需要提供路径而不是边界,但方法保持不变。如果你知道起点,距离和每个路径点之间的航向,你可以想出任何形状。

您需要在 API 调用中加载几何库: https://maps.googleapis.com/maps/api/js?libraries=geometry

function initialize() {

    var sw = new google.maps.LatLng(52.51,13.41);
    var mapOptions = {
        zoom: 13,
        center: sw,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    
    var map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
    
    var marker = new google.maps.Marker({
        position: sw,
        map: map,
        label: 'SW'
    });
    
    var ne = google.maps.geometry.spherical.computeOffset(sw, 500, 45);
    
    var marker = new google.maps.Marker({
        position: ne,
        map: map,
        label: 'NE'
    });
    
    var rectangle = new google.maps.Rectangle({
        strokeOpacity: 0,
        strokeWeight: 0,
        fillColor: '#FF0000',
        fillOpacity: .6,
        bounds: new google.maps.LatLngBounds(sw,ne),
        map: map,
        zIndex: 0
    });
}

initialize();
#map-canvas {
  height: 150px;
}
<div id="map-canvas"></div>
<script src="https://maps.googleapis.com/maps/api/js?libraries=geometry&key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script>