世界地图的最大纬度和经度范围 - Google Maps API LatLngBounds()

46

谷歌地图的地形视图默认情况下允许地图瓦片无限制移动。您可以使用 LatLngBounds() 函数来限制它,但是如何设置最大和最小坐标才能将视口设置为地球而不超出地图区域呢?

北美的坐标:

var strictBounds = new google.maps.LatLngBounds(
    new google.maps.LatLng(28.70, -127.50), 
    new google.maps.LatLng(48.85, -55.90)
);

我已经尝试了 (+90, -180)(-90,180),但没有成功。


8
在墨卡托投影中,纬度的范围是从85度到-85度,而不是90度。 - Marcelo
墨卡托投影不仅限于纬度在85°到-85°之间。它只是在极端纬度处变得越来越扭曲,而Google地图在这些纬度左右截断了投影。 - user2357112
4个回答

94

@Marcelo和@Doc提供的链接对于理解Lat Lng的推导是不错的:

但如果你只是想知道Google Maps的最大范围:

纬度:-85到+85实际上某些情况下为-85.05115

经度:-180到+180

在Google Maps上尝试一下:

(你可能需要缩小地图。看到针在世界的“边缘”-这些是极限)

所以在你的代码中尝试一下:

var strictBounds = new google.maps.LatLngBounds(
    new google.maps.LatLng(85, -180),           // top left corner of map
    new google.maps.LatLng(-85, 180)            // bottom right corner
);

一旦你得到答案,请编辑此wiki(或更新你的问题)。谢谢。


4
谢谢。我必须为Java使用以下代码:private static final LatLngBounds EARTH = new LatLngBounds( new LatLng(-84.9, -180), // 地图左上方的经纬度 new LatLng(84.9, 180) // 地图右下方的经纬度 ); - Simon
1
LatLngBounds是从西南角(-85,-180)到东北角(+85,+180),而不是从左上角到右下角。 - Paul Smith Racing
在折线工具中尝试了一下,但似乎未给出整个区域,这是一个非常普遍的问题。然而,它是最大和最小的经度和纬度值。https://www.keene.edu/campus/maps/tool/?coordinates=85.0000000%2C%20185.0000000%0A-85.0000000%2C%20185.0000000%0A-85.0000000%2C%20-185.0000000%0A85.0000000%2C%20-185.0000000%0A85.0000000%2C%20185.0000000 - SparklyUnicorn

13

请参见旧版Google Groups中的此帖,其中描述了投影的数学。

引用:

地图并不是从85度开始,而是从能够使地图呈正方形的度数开始。这可以简单地计算为: atan(sinh(PI)) *180 / PI = 85.05112878....

请注意,该帖子中的瓦片计算适用于旧版API V2,但投影应该是相同的。


2
我所需要的只是经过测试、可用的最大最小坐标? - Ryan Brodie
6
那就先阅读这篇文章,理解其中的内容,并测试一下这些坐标。我可不会替你完成作业哦,孩子。 - Marcelo

11

通过使用Google Maps,您可以执行以下操作来获取世界的最大纬度和经度边界:

1:在设置Google地图内容时将Google地图缩放级别设置为1:

mapOptions = {
                zoom: 1,
 .....
}

2. 获取该地图的东北角和西南角坐标:

map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);

     // NorthEast Latitude : 89.45016124669523
     var latNEValue =  map.getBounds().getNorthEast().lat();
    // NorthEast Longitude : 180
     var longNEValue = map.getBounds().getNorthEast().lng();
     // SouthWest Latitude : -87.71179927260242
     var latSWValue =  map.getBounds().getSouthWest().lat();
     // Southwest Latitude :  -180
     var longSWValue = map.getBounds().getSouthWest().lng();

3. 这将为您提供以下东北和西南边界:

东北纬度:89.45016124669523

东北经度:180

西南纬度:-87.71179927260242

西南经度:-180

同样,在缩放级别0上,它会给出以下点:

东北纬度:89.99346179538875

东北经度:180

西南纬度:-89.98155760646617

西南经度:-180

以上技巧帮助我解决了需要最大纬度/经度的业务问题。


4

如果您想了解更多有关GPS数值的详细信息,可以阅读这篇文章。

该文章解释了:

  • 纬度是沿着格林威治子午线测量的距离。这个距离用度来衡量,范围从0º到90º北纬和南纬。
  • 经度是沿着赤道测量的距离。这个距离用度来衡量,范围从0º到180º东经和西经。

那么简而言之,NW点和SW点的最大和最小坐标是什么? - Ryan Brodie
1
很奇怪,当你查看官方谷歌地图API文档时,纬度的范围是90/-90,经度的范围是180/-180,但在你的latlong声明中,你没有颠倒纬度和经度吗? - Doc Roms
不,我的代码对于美国人口统计学的latlng边界工作正常。 - Ryan Brodie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接