当前位置: 首页 > 知识库问答 >
问题:

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

戚俊人
2023-03-14

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年前甚至有一篇关于这个的帖子。)

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

但是如果地图被旋转会发生什么呢?我必须根据地图的方向使用三角函数来计算另外两个角吗?或者谷歌会给我一个包含我视口中内容的区域的实际东北和西南坐标,即使这意味着生成的矩形的部分超出了旋转地图的范围?

共有1个答案

轩辕风华
2023-03-14

或者Google会给我一个区域的实际东北和西南坐标,这个区域包含了我的视口中的内容

没错,函数根据当前视口返回东北角和西南角。下面的示例对此进行了说明,尤其是它绘制的矩形的大小包含当前视口:

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>
 类似资料:
  • 仿照国家地理App的地图功能,实现可随地图移动而旋转的气泡型地图Annotation。弹出的AnnotationView包含一个中间大泡泡,可自定义周围的小泡泡个数(最多7个,点击不同的segment定义不同的小泡泡数目)。具有弹出和收回的动画。移动地图,泡泡会以界面中心点为参考点进行旋转。各个泡泡都可点击响应事件。 作者说:之前研究 City Guides by National Geograp

  • 因此,如果键被旋转,我不能“更新”DocumentClient,因为它是一个单例。显然,重新启动应用程序是可行的,但我想避免这样做的要求。 那么,对如何实现两者有什么想法吗?我是不是漏掉了一些明显的东西?

  • 问题内容: 我想找出悬停时如何制作 旋转或旋转的图像 。我想知道如何在以下代码上使用 CSS 模仿该功能: 问题答案: 您可以将CSS3过渡与一起使用,以 在悬停时旋转图像 。 旋转图像:

  • 问题内容: 我想开始使用ES6 Map而不是JS对象,但由于无法弄清楚如何对地图进行JSON.stringify()而被拒之门外。我的键保证是字符串,并且我的值将始终列出。我真的必须编写包装方法来序列化吗? 问题答案: 你不能 地图的键可以是任何东西,包括对象。但是JSON语法仅允许将字符串作为键。因此,在一般情况下是不可能的。 我的键保证是字符串,而我的值将永远是列表 在这种情况下,可以使用普通

  • 给定一个由整数和一个数字组成的数组,,对该数组执行左旋转。然后将更新后的数组打印为单行空格分隔的整数。 示例输入: 如何使用更少的内存来解决这个问题?