例如Google Maps Level 13 = 1:20000
#1 楼
如果您正在设计地图,则计划将其覆盖在Google地图或虚拟地球上并创建切片方案,那么我认为您正在寻找的是每个缩放级别的比例尺,请使用以下这些:20 : 1128.497220
19 : 2256.994440
18 : 4513.988880
17 : 9027.977761
16 : 18055.955520
15 : 36111.911040
14 : 72223.822090
13 : 144447.644200
12 : 288895.288400
11 : 577790.576700
10 : 1155581.153000
9 : 2311162.307000
8 : 4622324.614000
7 : 9244649.227000
6 : 18489298.450000
5 : 36978596.910000
4 : 73957193.820000
3 : 147914387.600000
2 : 295828775.300000
1 : 591657550.500000
来源:
http://webhelp.esri.com/arcgisserver/9.3/java/index.htm#designing_overlay_gm_mve.htm
评论
@capdragon谢谢。这是一个众所周知的消息来源(ESRI),但让我们仍然想知道他们是如何提出这些尺度的。
– hu
2011-3-18在19:02
理性对谁至关重要?我在这个问题上没有提到理性。我相信他想要他的直截了当的问题的直截了当的答案。
– CaptDragon
2011-3-18在20:02
@cap没有理由,很难或不可能将正确答案与错误答案区分开。没有理由,就不得不依靠应答者的权限。我非常确定,该线程中的其他答复被投票赞成,而您的答复与正确性或直截了当无关—您是一堆中最权威,最直接的理由—而是拥有一切用其他人提供的推理来做。顺便说一句,我还没有拒绝你的投票。
– hu
2011年3月18日20:10
谢谢:+1。你们可能是地理学家或遥感专家。我只是一个GIS开发人员,他想帮助这个家伙找到答案。我的一位同事(PHD型,麻省理工学院双学士)每次向我问一个简单的问题,然后一次让我放松时,都会参加一个小时的讲座。我不再问他问题了(我有理科硕士学位)。我知道其他人喜欢陷入理性之类的困境,但是我们许多人都不知道他们在说什么。恕我直言,他们混淆了不能回答他的问题的答案。
– CaptDragon
2011-3-18在20:37
选择比例尺后,它们可以被底数为2的栅格图块平均划分(例如128、512 ...)。 Bing同样也这样做msdn.microsoft.com/en-us/library/bb259689.aspx
–加里特·霍尔(Garrett Hall)
2012年6月25日18:23
#2 楼
我发现此回复(由Google员工撰写)可能是最准确的回复:这是不准确的,因为带有墨卡托投影的地图分辨率(例如Google地图)取决于纬度。
可以使用以下公式进行计算:
metersPerPx = 156543.03392 * Math.cos(latLng.lat() * Math.PI / 180) / Math.pow(2, zoom)
这是基于地球半径为6378137m的假设。我们使用的值是:)
来自:
https://groups.google.com/forum/#!topic/google-maps-js-api-v3/hDRO4oHVSeM
顺便说一句-我猜是:
'latLng.lat()' = map.getCenter().lat()
'zoom' = map.getZoom()
评论
什么等于您的公式?在lat = 2.92并缩放13的情况下,我得到了19.08。 19.08是什么?
–罗德里戈
2015年2月5日在21:51
@Rodrigo米每像素
–贾斯汀·波内尔特(Justin Poehnelt)
15年4月19日在5:56
我可以证明,三年后这个答案仍然是正确且非常准确的。这应该是公认的答案。
–约翰
18年2月14日在12:36
这仅适用于x还是y?通过Javascript API的Google Maps是否对两个轴使用相同的比例尺?
–老盖泽
'18 / 12/1在4:26
@OldGeezer是的,它可以在所有方向上工作。墨卡托的任意点处的线性变形在所有方向上均相等。这就是它用于打滑地图的原因之一。当您放大时,您会得到相当低的失真贴图。一旦补偿了规模,这就是答案。
– Smithkm
19-4-5在15:49
#3 楼
为帮助您理解数学(不是精确的计算,仅用于说明):Google的网络地图图块的宽度为256像素
假设您的计算机显示器上有100像素每英寸(PPI)。这意味着256个像素的长度约为6.5厘米。这是0.065 m。在缩放级别0上,整个360度经度在单个图块中都是可见的。您无法在Google Maps上观察到这一点,因为它会自动移至缩放级别1,但您可以在OpenStreetMap的地图上看到它(它使用相同的切片方案)。
赤道上的360度偏离等于地球的周长40,075.16 km,即40075160 m
用40065160 m除以0.065 m,您将得到616313361,这是赤道仪上100 DPI的计算机显示器在赤道上的缩放等级0的比例,因此,要点是缩放比例取决于显示器的PPI和纬度(由于墨卡托投影)
缩放级别1,缩放比例是缩放级别0的一半
...
缩放级别N,比例是缩放比例N-1的一半
还请查看:http://wiki.openstreetmap.org/wiki/FAQ#What_is_the_map_scale_for_a_particular_zoom_level_of_the_map.3F
评论
比例尺实际上取决于生成的地图图像的DPI。两种最常用的分辨率是96DPI(这就是Google地图图块)和72DPI。
– Sasa Ivetic
2011-3-19在23:54
对于96DPI,根据此答案,标度591657550.500000为0级。但是根据@CaptDragon的说法是1级。我应该考虑从1级开始使用Google Maps进行计算吗?
–道格拉斯·纳西夫(Douglas Nassif Roma)少年
16年6月8日在14:21
#4 楼
没那么容易。给定投影,图块像素的大小取决于您感兴趣的区域的纬度。然后,将图块像素大小转换为屏幕像素大小,就取决于屏幕和显示数据的分辨率,屏幕正在使用dpi。评论
没错,球形墨卡托(google投影)在离开赤道时不会保持相等的比例。有关出色的参考,请参见:Mapnik的比例尺和比例尺分母文章:trac.mapnik.org/wiki/ScaleAndPpi以及OSM的常见问题解答:wiki.openstreetmap.org/wiki/…
–maning
2011-3-18在8:35
#5 楼
简单明了的权威性正确答案:591657550.500000 / 2^(level-1)
它为您提供了上面的表格,输入了缩放级别。 br />
因为该问题仅适用于Google MAPS,不适用于EARTH,所以OP不在乎3D几何。 Google地图已经被拉平,因此在这里和在自动扶梯中,极点和极点之间的距离总是1像素(以DEGREES,这是google地图所关心的)。您意识到在世界地图的第一像素行内的某个地方,比例是1:1?
评论
数字591657550.500000代表什么?
–贾斯汀·迪林(Justin Dearing)
2014年8月22日13:59
@Sergio为什么不只是591657550.5?
– Birowsky
17-2-6在20:55
gis.stackexchange.com/a/111589/92997“数字来自设置为256像素倍数的图块分辨率,以及屏幕分辨率(96dpi)”
– juffel
17年8月8日在9:57
不起作用-取决于纬度,但是您的公式不起作用
– Evgenii Vorobei
19年8月15日在16:12
#6 楼
Microsoft的Virtal Earth Tile System文档中有这样一个表。但是正如GuillaumeC所说,这些值取决于纬度和屏幕分辨率。下表提供了在赤道和屏幕分辨率为96 dpi时测得的值。由Google提供。但是它们肯定会使用相同的投影,以便这些值对于Google仍然是正确的。#7 楼
半径@赤道精确6,378,137米(WGS-84)赤道周长= 40,075,017米(2πr)圆周。
赤道周长/ 2 32 =每像素.009330692米
纬度单位=(纬度余弦)X(赤道单位)
缩放级别使每个增量加倍。
1英尺(国际)= 0.3048米
编辑
开始时它不是一个真正合理的问题用。比例是相对于打印文档而不是计算机屏幕的比例。要使这些图像以任何精度使用,您需要知道每个像素的尺寸,然后根据叠加的图像来缩放图像。
回到15-20年前,有人使用了WGS -84作为基础数据。 (请注意,在上一篇文章中,有人使用了40,075,160的值,我在Wikipedia上看到了几个地方,但这是不正确的。正确的值是40,075,017
然后他们将其除以32位整数。这是一个合理的选择,因为它可以产生大约1厘米的全局精度,这对于航空影像来说已经足够了。32位整数也可以高效地存储和处理。
为什么选择24级但是,我不知道其他人得出的结论是0可以使您降至地球的一个256像素图块。缩放级别20的图像(如当前所允许的缩放比例)取0.009330692(赤道处的缩放比例24),将其翻倍以进行缩放23,再次进行22缩放,再次进行21缩放,最后一次进行20缩放。 0.149231071。
现在,假设我们的图像位于纬度45。取那个的余弦(0.707106781)乘以我们的0.149231071,它将得到0.105564729米。那是在缩放级别20处,纬度45处的图像中一个像素的长度和高度。如果您通过屏幕捕获该区域的1000 x 1000像素图像,则尺寸为105.56米见方。如果您希望将0.3048划分为两部分,那么我大约在5年前就从我在网络上找到的各种信息和文档(包括Google和MS映射支持网站)上回避了工程师。
我已经用了一百次,并将其与实际的田野调查数据叠加在一起,并且它始终是正确的。将其与此处发布的表中的任何一个进行检查,数字将匹配。
评论
我不确定这如何回答问题。
–德瓦塔塔·滕舍
2012年11月28日,下午3:29
我同意@Devdatta,可否请您提供资料来源和一些背景信息。
–亚伦♦
2012年11月28日,下午3:45
不知道这些评论是在编辑之前还是之后,但是我使用了这个答案,效果很好
–bjnortier
2013年1月10日15:05
#8 楼
刚进行了一些计算,得出以下结果:Google地图显示了一个1公里的标尺(在地图的左下方),该标尺的长度为90像素,缩放级别为13。 />
假设屏幕分辨率为96 dpi或36 dpcm,则在缩放级别13下,我们在1cm处有0.4km(从36/90开始),对于96dpi屏幕,地图比例为1:40,000。
对于屏幕上的各种操作,最好以90像素为基础,因为所有数字在所有缩放级别上都是舍入的,即
缩放级别12:2公里在90像素中
缩放级别11:在90像素中4km
在10像素中缩放:在90像素中8km
依此类推。
请注意,这是一个近似值
(Google最终喜欢整数)...
评论
如果仔细观察,会发现线的长度随所查看区域的纬度而变化。
–rcoup
13年5月25日上午10:55
如@rcoup所述,这仅在特定纬度下有效。不仅比例尺的长度发生变化,而且比例尺所代表的距离也发生变化。要继续以缩放13进行此示例,比例尺所表示的距离在北开普省(纬度71度)为2公里,在纬度45度附近为1公里,在赤道处为500 m。
–François
2015年8月9日在21:07
#9 楼
根据提供的所有信息,我构建了一个函数,当您想要一条代表显示的地图的N%的水平线时,可以将最好的z应用于地图。显示的地图是
function calculateZoom(WidthPixel,Ratio,Lat,Length){
// from a segment Length (km),
// with size ratio of the segment expected on a map (70%),
// with a map WidthPixel width in pixels (100px),
// and a latitude (45°) we can get the best Zoom
// assume earth is a perfect ball with radius : 6,378,137m and
// circumference at the equator = 40,075,016.7 m
// The full world on google map is available in tiles of 256 px;
// it has a ratio of 156543.03392 (px/m).
// For Z = 0;
// pixel scale at the Lat_level is ( 156543,03392 * cos ( PI * (Lat/180) ))
// The map scale increases at the rate of square root of Z.
//
Length = Length *1000; //Length is in Km
var k = WidthPixel * 156543.03392 * Math.cos(Lat * Math.PI / 180); //k = circumference of the world at the Lat_level, for Z=0
var myZoom = Math.round( Math.log( (Ratio * k)/(Length*100) )/Math.LN2 );
myZoom = myZoom -1; // Z starts from 0 instead of 1
//console.log("calculateZoom: width "+WidthPixel+" Ratio "+Ratio+" Lat "+Lat+" length "+Length+" (m) calculated zoom "+ myZoom);
// not used but it could be useful for some: Part of the world size at the Lat
MapDim = k /Math.pow(2,myZoom);
//console.log("calculateZoom: size of the map at the Lat: "+MapDim + " meters.");
//console.log("calculateZoom: world circumference at the Lat: " +k+ " meters.");
return(myZoom);
}
#10 楼
我尚无法添加评论,但这可能是Pete上面回复的来源:https://developers.google.com/maps/documentation/javascript/maptypes#MapCoordinates[。 [..]请注意,每个增加的缩放级别在x和y方向上都是原来的两倍。因此,每个更高的缩放级别包含的分辨率是前一个级别的四倍。例如,在缩放级别1,地图由4个256x256像素的图块组成,因此像素空间为512x512。在缩放级别19下,可以使用0到256 * 219之间的值来引用地图上的每个x和y像素。
#11 楼
我计算了四个缩放级别的缩放比例:缩放级别|规模
20 1:500
19 1:1000
18 1:2000
17 1:4000
规模似乎是两倍缩放级别增加了一级。因此,我希望缩放级别16的比例为1:8000,依此类推。
评论
欢迎使用GIS.SE!您能否提供一个来源或如何计算?
– Paul
14年8月12日在16:33
#12 楼
嗨,我想我已经计算出直线上1pixel = 11.627km;而不考虑地球的半径。希望能使您头脑清醒。评论
它不是。像素的值取决于纬度。
–约翰·鲍威尔(John Powell)
16年2月2日在15:00
哦,我明白了,我没那么复杂。
–托塔多先生
16年2月2日,19:03
评论
根据我提供的第一个信息,可以使用此功能!函数setZoomLevel(meters){//console.log(Zoom level set meter:$ {meters}); var zoomfactor = 1; if(米<1128){zoomfactor = 15; } if if((meters> 1128)&&(meters <2256)){zoomfactor = 14; } if if((meters> 2256)&&(meters <4513)){zoomfactor = 13; } if if((meters> 4513)&&(meters <9027)){zoomfactor = 12; } if if((meters> 9027)&&(meters <18055)){zoomfactor = 11; } if if((meters> 18055)&&(meters <36111)){zoomfactor = 10; } else if((meters> 36111)&&(meters <72