转自:http://www.cnblogs.com/sailheart

一、概述

在OpenLayers中,地图必须具有一个缩放级别的范围,缩放级别可以用比例尺(scale)或者分辨率(resolution)表示。

比例尺——屏幕上1米代表多少地图坐标单位;分辨率——屏幕上一个像素代表多少地图坐标单位。
两者的转换关系是:scale = resolution * 72 * 39.3701(1米=39.3701英寸,1英寸=72像素)

地图具有一个总的缩放级别,每个图层可以有各自的缩放级别,这样可以控制图层只在合适的级别上显示。

二、缩放级别范围的确定方法

1、比例尺数组或者分辨率数组来确定(相邻两级之间不一定是2倍的关系,可以是任意值)。示例:

resolutions: [1.40625,0.703125,0.3515625,0.17578125,0.087890625,0.0439453125]
scales: [50000000, 30000000, 10000000, 5000000]

2、用最大分辨率(maxResolution)和缩放级别总数(numZoomLevels)确定,相邻两级是2倍关系

2.1最大分辨率的确定方法:

a. 直接指定maxResolution,例如:

maxResolution: 0.17578125

b. 直接指定minScale,例如:

minScale: 50000000

c. 由maxExtent确定(maxResolution需设置为‘auto’),例如:

maxExtent: new OpenLayers.Bounds(-180, -90, 180, 90),
maxResolution: "auto"

2.2 缩放级别总数的确定方法:

a.  直接指定numZoomLevels,例如:numZoomLevels: 5
b.  由最大分辨率和最小分辨率的比值确定,最小分辨率同2.1有三种方法可以确定:

b.1 直接指定minResolution
    b.2 直接指定maxScale
    b.3 由minExtent确定(minResolution需设置为‘auto’)

如果指定的参数过多,导致缩放级别范围不一致时,上述方法顺序决定了OpenLayers确定缩放级别范围的优先级。

=====================================================================================================

=====================================================================================================

转自: http://www.gispower.org/article/arcgis/ArcServer/2010/67/106711258224E1636AC2442GHJE09.html

当我们在用arcgis server 构建切片时,我们会发现在缓存生成的conf.xml中有这样的片段:

在上述片段中<LODInfo>代表了每一级切片的信息,<LevelID>代表切片的级数。

在这里,<Scale>代表比例尺。比例尺是表示图上距离比实地距离缩小的程度,也叫缩尺。公式为:比例尺=图上距离/实地距离。用数字的比例式或分数式表示比例尺的大小。例如地图上1厘米代表实地距离500千米,可写成:1∶50,000,000或写成:1/50,000,000。

<Resolution>,代表分辨率。Resolution 的实际含义代表当前地图范围内,1像素代表多少地图单位(X地图单位/像素),地图单位取决于数据本身的空间参考。

当我们在进行Web API的开发时,经常会碰到根据Resolution来缩放地图的情况。但是实际需求中我们更需要根据Scale来缩放,因此就涉及到Scale和Resolution的转换。

Resolution和Scale的转换算法:

Resolution跟dpi有关,跟地图的单位有关。(dpi代表每英寸的像素数)

Resolution和Scale的转换算法

举例:

案例一:如果地图的坐标单位是米, dpi为96

1英寸= 2.54厘米;

1英寸=96像素;

最终换算的单位是米;

如果当前地图比例尺为1: 125000000,则代表图上1米实地125000000米;

米和像素间的换算公式:

1英寸=0.0254米=96像素

1像素=0.0254/96 米

则根据1:125000000比例尺,图上1像素代表实地距离是125000000*0.0254/96 = 33072.9166666667米。我们这个换算结果和切片的结果略微有0.07米的误差。这个误差产生的原因是英寸换算厘米的参数决定的,server使用的换算参数1英寸约等于0.0254000508米。

案例二:如果地理坐标系是wgs84,地图的单位是度,dpi为96

Server中度和米之间的换算参数:

1度约等于 111194.872221777米

接下来就需要进行度和像素间的换算:

当比例尺为1:64000000米时,相当于1像素 = 64000000*0.0254000508/96 = 16933.3672米

再将米转换为度 16933.3672/111194.872221777 = 0.1522855043731385度

因此当地图单位为度时,近似计算在1:64000000 对应的Resolution为0.1522855043731385度

验证结果:

=====================================================================================

=====================================================================================

转自:http://www.cnblogs.com/JenMinZhang/archive/2011/01/06/resolutions.html

OpenLayers Map可以在不同的比例尺或解析度下显示他的每一个layer
map对象含有缩放级别的引用,即ZoomLevels,而且允许他的每一个layer去自定义他们自己的缩放级别,使之看起来合适
可以通过在构造函数中设置options属性来配置openlayers layer的缩放级别

== 正常图层==
对于基于openlayers.layer的正常layer,和能够在任何解析度下显示的layer,存在多种不同的方式去配置缩放级别和他们各自的比例尺和解析度

“解析度数组”:
要是转化缩放级别成为解析度,需要一个{{{resolutions}}}数组,他是这个图层所支持的不同解析度的列表,缩放级别就仅仅是一个解析度数组的索引,解析度数组始于0终于缩放级别-1

比如:
一个图层的解析度为[a,b,c],那么缩放级别的0就是a ,1就是b。。。

=== 配置解析度数组的方式 ===

可选项:
{{{scales}}} - ''Array'' -- 预先设置比例尺值的数组
{{{resolutions}}} - ''Array'' -- 预先设置解析度值的数组
{{{minScale}}} - ''float'' --layer能够显示的最小比例尺
{{{maxScale}}} - ''float'' --layer能够显示的最大比例尺
{{{maxResolution}}} - ''float'' --layer能够显示的最大解析度
{{{minResolution}}} - ''float'' -- layer能够显示的最小解析度
{{{minExtent}}} - ''!OpenLayers.Bounds'' --layer能显示出的最小范围
{{{maxExtent}}} - ''!OpenLayers.Bounds'' -- layer能显示出的最大范围
{{{numZoomLevels}}} - ''int'' -- 缩放级别的总数
{{{units}}} - ''String'' - layer显示的单位,作用于比例尺-解析度换算

Example Declarations:
{{{
    var options = { scales: [50000000, 30000000, 10000000, 5000000],
                    resolutions: [1.40625,0.703125,0.3515625,0.17578125,0.087890625,0.0439453125],
                    minScale: 50000000,
                    maxResolution: "auto",
                    maxExtent: new OpenLayers.Bounds(-180, -90, 180, 90),
                    maxResolution: 0.17578125,
                    maxScale: 10000000,
                    minResolution: "auto",
                    minExtent: new OpenLayers.Bounds(-1, -1, 1, 1),
                    minResolution: 0.0439453125,
                    numZoomLevels: 5,
                    units: "degrees"
                  };
    map = new OpenLayers.Map( $('map') , options);
}}}

显然所有的配置项不能在一次设置中全都用上,因为他们可能相互冲突,他们会按照下面的优先级起作用:

[A]【预设的缩放级别列表】缩放级别由预先设置的比例尺或解析度决定

{{{scales}}} -解析度的数组由这些比例尺直接转化而来
{{{resolutions}}} - 解析度数组直接从初始化函数的option参数中带来
Examples:
{{{
    var options = { scales: [50000000, 30000000, 10000000, 5000000] };
    map = new OpenLayers.Map( $('map') , options);
}}}

{{{
    var options = { resolutions: [1.40625,0.703125,0.3515625,0.17578125,0.087890625,0.0439453125] };
    map = new OpenLayers.Map( $('map') , options);
}}}

* '''maxResolution and numZoomLevels''' - ''!ZoomLevels are determined based on a maximum resolution and the number of desired !ZoomLevels''

[B]【最大解析度 &缩放级别的总数】缩放级别在最大解析度和缩放级别的总数上被决定
B1 最大解析度的确定
{{{minScale}}} --解析度的值从比例尺由单位{{{units}}}转化来
{{{maxExtent}}} AND {{{maxResolution == "auto"}}} --解析度由地图的div尺寸和maxExtent属性计算而来。若maxExtent属性未指定,默认从map继承,即全世界
{{{maxResolution}}}--解析度的值直接从layer的options参数中带来,若没指定,则默认为从map的options中带来
B2 缩放级别的总数确定
    B2_a基于最大和最小解析度的比值来计算--确定最小解析度:
{{{maxScale}}} --解析度的值从比例尺由单位{{{units}}}转化来
{{{minExtent}}} AND {{{minResolution == "auto"}}}--解析度的值基于地图div尺寸和minExtent属性来计算。minExtent属性必须被指定,默认不从map继承
{{{minResolution}}} --解析度的值从layer指定的option参数中直接带来,若没指定,最小解析度保持为空,缩放级别数直接接受
    B2_b {{{numZoomLevels}}}缩放级别数直接从layer指定的option参数带来,若没有指定默认从map的option带来

Examples:

||maxResolution||Converted from minScale using specified units||
||numZoomLevels||Default from map||
{{{
    var options = { minScale: 50000000,
                    units: "degrees"
                  };
    map = new OpenLayers.Map( $('map') , options);
}}}
[[BR]]

||maxResolution||Calculated based on div size and default maxExtent from map||基于div的尺寸和地图最大范围计算
||numZoomLevels||Calculated using ratio of maxResolution/minResolution||用最大最小分辨率的比值计算
{{{
    var options = { maxResolution: "auto",
                    maxExtent: new OpenLayers.Bounds(-180, -90, 180, 90),
                    minResolution: 0.0439453125
                  };
    map = new OpenLayers.Map( $('map') , options);
}}}
[[BR]]

||maxResolution||Specified||
||numZoomLevels||Specified||
{{{
    var options = { maxResolution: 0.17578125,
                    numZoomLevels: 15
                  };
            map = new OpenLayers.Map( $('map') , options);
}}}
[[BR]]

||maxResolution||Default from map||
||numZoomLevels||Converted maxScale (using default units from map) to minResolution, then uses ratio of maxResolution/minResolution to calculate numZoomLevels||
{{{
    var options = { maxScale: 10000000 };
    map = new OpenLayers.Map( $('map') , options);
}}}
[[BR]]

||maxResolution||Specified||
||numZoomLevels||Calculated minResolution based on div size and default minExtent from map, then uses ratio of maxResolution/minResolution to calculate numZoomLevels||
{{{
    var options = { maxResolution: 0.17578125,
                    minResolution: "auto",
                    minExtent: new OpenLayers.Bounds(-1, -1, 1, 1),
                  };
    map = new OpenLayers.Map( $('map') , options);
}}}

Scale和Resolution的含义及转换算法相关推荐

  1. 进制转换算法(通用,极简)

    检索词: ​ 进制转换.通用进制转换.二进制转十进制.二进制转八进制.二进制转十六进制. ​ 十进制转二进制.十六进制转二进制.八进制转二进制.通用算法.字符型输入输出 一.英文先行 英文 中文 缩写 ...

  2. gps84转换gcj02公式_地球坐标系 (WGS-84) 相互转火星坐标系 (GCJ-02) 的转换算法

    import java.util.HashMap; import java.util.Map; /** * 地球坐标系 (WGS-84) 相互转火星坐标系 (GCJ-02) 的转换算法 * * @au ...

  3. 地址转换算法 C++实现

    操作系统模拟之地址转换算法. 文件共3份,其中1份cpp,2份.h,代码如下: main.cpp #include "init.h"int main() {printf(" ...

  4. java集合——集合与数组间的转换+算法

    [0]README 0.1) 本文描述转自 core java volume 1, 源代码为原创,旨在理解 java集合--集合与数组间的转换+算法 的相关知识: 0.2) for full sour ...

  5. ExcelToHtmlTable转换算法:将Excel转换成Html表格并展示(项目源码+详细注释+项目截图)...

    功能概述 Excel2HtmlTable的主要功能就是把Excel的内容以表格的方式,展现在页面中. Excel的多个Sheet对应页面的多个Tab选项卡. 转换算法的难点在于,如何处理行列合并,将E ...

  6. MATLAB | sRGB图像的灰度转换算法

    列举了几种常见的灰度转换算法,通过计算结构相似性参数评价不同转换方式所得到灰度图片之间的相似性,并绘制了不同灰度图片之间的差异. % gray_convert.m % sRGB图像转换为灰阶图 Rr ...

  7. 迅雷7 down.php,普通文件与迅雷、旋风、快车、RayFile的下载地址转换算法

    普通文件与迅雷.旋风.快车.RayFile的下载地址转换算法 我们平时在网上寻找资源时,都看到一些网站里特别标明分开,用迅雷下载:用旋风下载:用快车下载等这些标签,如迅雷,我们常常会见到类似于如下的链 ...

  8. Racket实现数字与中文的转换算法三(程序测试)

    前面两篇介绍了阿拉伯数字与中文数字之间的互相转化.详情请见: Racket实现数字与中文的转换算法一(阿拉伯数字转换为中文数字)--https://blog.csdn.net/chinazhangyo ...

  9. 二进制,八进制,十进制,十六进制转换算法

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 进制转换算法(Convert) (二.八.十六进制) → (十进制) 二进制 → 十进制 八进 ...

  10. 【人脸交换技术】:探索最高效的面部转换算法

    [人脸交换技术]:探索最高效的面部转换算法 随着计算机视觉和深度学习技术的飞速发展,人脸交换技术越来越成熟.人脸交换技术是指将一个人的面部特征转移到另一个人身上的技术.它可以应用于影视特效.表情包制作 ...

最新文章

  1. 一文看尽4种SLAM中零空间的维护方法
  2. java swing 外观框架_【GUI】一、Swing外观框架BeautyEye使用
  3. mustache模板技术
  4. Apache Superset从入门到放弃(基于python3.6.9)
  5. 【opencv】——钢管计数(霍夫圆变换 + 阈值 + canny)
  6. 这个地球仪太惊艳了,陪孩子畅聊天文地理。
  7. spring IoC/DI
  8. mybatis那些事~
  9. STL_set/vector/deque
  10. sqlite mysql excel_SQlite数据库信息怎么转成excel文件?
  11. c++使用unordered_map与map的区别
  12. 宕昌一中2021高考成绩查询,2020届毕业生:宕昌一中“拍了拍”你 | 青春不散场 扬帆再起航...
  13. 目录遍历漏洞_雷神众测漏洞周报 2020.10.052020.10.114
  14. javaIO流实现文件拷贝
  15. Lintcode 尾部的0
  16. ASP网站实例教程:IIS安装配置
  17. openwrt + dnsmasq + anti-AD 两步搞定广告屏蔽
  18. 无法启动此程序,因为计算机中丢失pthreadVC2.dll
  19. Opencv:图像旋转,cv2.getRotationMatrix2D 和 cv2.warpAffine 函数
  20. vscode中terminal不支持workon激活虚拟环境?试试修改默认shell

热门文章

  1. Pycharm中工程项目的多个python环境的管理使用方法的一点点理解
  2. 入门系列- ABP 本地化
  3. 第1章第25节:如何通过幻灯片母版统一管理相同类型的幻灯片1 [PowerPoint精美幻灯片实战教程]
  4. 【考研数学】二. 一元函数积分学
  5. excel两个表格数据对比_两个excel表格核对的多种方法
  6. jsdroid 教程_ps教程自学平台
  7. 浏览器兼容性测试工具
  8. 如何用电脑查看自己的IP地址
  9. mysql创建视图注意事项_mysql视图创建注意事项(转)
  10. 微信开发 自动转发朋友圈 自动添加好友等等