对于给定的缩放级别和视图,谷歌地图中像素的宽度是多少?

Posted

技术标签:

【中文标题】对于给定的缩放级别和视图,谷歌地图中像素的宽度是多少?【英文标题】:What is the width of a pixel in Google Maps for given zoom level and view? 【发布时间】:2012-05-17 09:17:07 【问题描述】:

在给定 Google 地图的缩放级别的情况下,我想知道给定像素的高度和宽度。

我可以看到不同的缩放级别会影响比例:例如,http://maps.google.com/maps?q=10.0,0.0&z=2 和 http://maps.google.com/maps?q=10.0,0.0&z=3 的 Niger 大小不同。

另外,我可以看到纬度很重要:在http://maps.google.com/maps?q=50.0,0.0&z=3,西班牙和冰岛的宽度似乎相同,但西班牙的宽度实际上大约是其两倍。

地图边界似乎无关紧要,因为调整窗口大小或拖动视图不会影响国家/地区的大小。 (不过,比例图例会受到影响,但我不在乎。)

似乎答案应该取决于相关像素的缩放级别和纬度的某种组合。似乎宽度和高度都受到影响。经度似乎没有影响。最好是数值解。

(我想要这个,以便我可以预处理坐标列表以删除将出现在同一像素中的坐标。)

【问题讨论】:

“宽度”是什么意思? kms 或 miles 的距离为 1 像素?或者 (delta_lat,delta_lng) 是多少 1 像素? 是的。沿地球表面的像素宽度(以米为单位)。 【参考方案1】:

我发现了一些与我的目的足够接近的东西。这会将lat,lng 转换为x,y

#from view-source:https://google-developers.appspot.com/maps/documentation/javascript/examples/map-coordinates
sub lat_lng_zoom_to_point ($$$) 
  my ($lat, $lng, $zoom) = @_;
  my $x = 128 + $lng * (256/360);
  my $siny = sin(deg2rad($lat));
  $siny = $siny < -0.9999 ? -0.9999 : $siny > 0.9999 ? 0.9999 : $siny;
  my $y = 128 + 0.5 * log((1 + $siny) / (1 - $siny)) * -(256/(2 * pi));
  return($x * (1 << $zoom), $y * (1 << $zoom));

【讨论】:

我最近一直在研究很多与谷歌地图相关的东西,如果你仍然感兴趣的话,我遇到了一些可能对你有帮助的算法。似乎您的问题可以分为两个问题:“像素的宽度是多少,以米为单位?”,这仍然没有答案,您的最终目标是预处理坐标列表以消除多个每个像素的坐标,由您的答案解决。但是如果我们想完成这个问题的前半部分,我也可以发布一些代码。

以上是关于对于给定的缩放级别和视图,谷歌地图中像素的宽度是多少?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置谷歌地图缩放级别以显示所有标记?

无论如何在谷歌地图上计算英里或米到像素以计算缩放级别?

Android:如何将地图视图的缩放级别设置为当前位置周围 1 公里半径?

从谷歌静态地图中的像素坐标获取经度/纬度

如何在谷歌地图中设置缩放级别

如何计算适当的谷歌地图缩放级别