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

Posted

技术标签:

【中文标题】旋转地图时如何找到 Google Map V3 的 4 个角?【英文标题】:How do you find the 4 corners of a Google Map V3 when the map is rotated? 【发布时间】:2015-11-12 22:21:58 【问题描述】:

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)

(甚至还有post about this 5 years ago。)

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

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

【问题讨论】:

【参考方案1】:

或者 Google 会给我实际的东北和西南坐标吗? 包含我视口中的内容的区域

没错,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);
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;
<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>

【讨论】:

太棒了! (不知道为什么我不认为这样做)。这非常有用,谢谢

以上是关于旋转地图时如何找到 Google Map V3 的 4 个角?的主要内容,如果未能解决你的问题,请参考以下文章

Google map api v3 显示半张地图?

当我一个一个地放下每个标记时,如何在 Google Map V3 Marker 上添加自定义动画?

地图上的 Google Map Api v3 拖动事件

Google Maps Javascript API V3中的旋转标记

如何使用谷歌地图 api v3 旋转地图方向

在地图选项上设置Google Map v3大小