地图旋转时如何找到Google Map V3的4个角?

Jon*_*onG 2 javascript google-maps google-maps-api-3

Google maps V3 API在地图上有一个getBounds方法,可以返回视口的东北角和西南角。理论上,我可以通过使用相对点的纬度和经度来计算西北角和东南角,即

NE = (lat= 37.5, lng= -97.5)
SW = (lat= 37.0, lng= -96)
... 因此...
NW = (lat= 37.5, lng= -96)
SE = (lat= 37.0, lng= -97.5)

5年前甚至有一篇关于这个帖子。)

但是我在网上找到的所有答案都假设地图指向正北,这意味着“东北”实际上意味着“右上角”。

但是如果地图旋转了会发生什么?我是否必须根据地图的方向使用三角函数来找出其他两个角?或者 Google 是否为我提供了包含我的视口中内容的区域的实际东北和西南坐标,即使这意味着生成的矩形的部分超出了旋转地图的边界?

Vad*_*hev 6

或者谷歌是否给了我一个区域的实际东北和西南坐标,该区域包含我的视口中的内容

没错,getBounds函数根据当前视口返回东北角和西南角。下面的例子说明了它,特别是它绘制了包含当前视口大小的矩形:

var map;
var area;

function initMap() {
  map = new google.maps.Map(document.getElementById('map'), {
    center: {lat: 45.518, lng: -122.672},
    zoom: 18,
    mapTypeId: google.maps.MapTypeId.HYBRID,
    //heading: 0,
    //tilt: 45
  });

  google.maps.event.addListenerOnce(map, 'idle', function(){
       drawBounds(map);  
  });
  
}



function drawBounds(map)
{
    var bounds = map.getBounds();
    var areaBounds = {
         north: bounds.getNorthEast().lat(),
         south: bounds.getSouthWest().lat(),
         east: bounds.getNorthEast().lng(),
         west: bounds.getSouthWest().lng()
    };
    
    area = new google.maps.Rectangle({
       strokeColor: '#FF0000',
       strokeOpacity: 0.8,
       strokeWeight: 2,
       fillColor: '#FF0000',
       fillOpacity: 0.35,
       map: map,
       bounds:areaBounds
  });
  console.log(areaBounds);
}


function rotate() {
   var heading = map.getHeading() || 0;
   map.setHeading(heading + 90);
   area.setMap(null);
   drawBounds(map);
}
Run Code Online (Sandbox Code Playgroud)
html, body {
   height: 100%;
   margin: 0;
   padding: 0;
}

#map {
   height: 100%;
}

#floating-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;
}
Run Code Online (Sandbox Code Playgroud)
<div id="floating-panel"><input type="button" value="Rotate" onclick="rotate();"></div>
<div id="map"></div>
<script async defer src="https://maps.googleapis.com/maps/api/js?callback=initMap"></script>
Run Code Online (Sandbox Code Playgroud)