版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/dazhi_1314/article/details/5790506

今天研究了一下Openlayers中的比例尺(scale)和分辨率(resolution),弄懂了一些以前不太懂的东西。

一、首先阐明几个概念:
1、Scale:比例尺,图上距离和实地距离之比。
2、Resolution:分辨率,每个象元代表的实地距离(map units per pixels)。
3、Extent:地图的范围(地图四至)。
4、zoomlevel:缩放的级别(0~15)。
注:因为这几个变量均为对”地图显示“的量化描述,因此均有最大和最小值。
5、map,baselayer:map即地图,其size也是决定显示的因素。baselayer相当于一个地图中的底图,许多尺度变换函数均在baselayer类中实现,所以map中必须添加baselayer。
在Openlayers中如要正确显示一副地图,则上面的变量必须要正确设置,但不一定全部设置,全部设置,计算不正确的话可能导致冲突。可选择设置部分,其余由Openlayers自动计算。
二、scale 和 Resolution 的相互转化。
按照Openlayers中的概念,分比率是比较好计算的,比如直接取地图实际宽度(或高度)和地图div(以像素为单位)大小之比,就得到了该缩放级别下的分辨率。假设:地图单位是米,在某个缩放级别L下的分辨率为R,如何得到该缩放级别L的比例尺?
Scale是图上距离和实地距离之比,现在我们有的是地图的屏幕距离(以像素为单位),实地距离和分辨率,很显然,我们只要得到图上距离即可。问题转化为如何由屏幕距离+分辨率,求图上距离。解决问题的关键是dpi, dots per inches,or pixels per inches。Openlayers假定其接受的地图图片均为72dpi,即72的像素点有一英寸的长度,即屏幕上的地图图片中,72个像素点就是一英寸的长度。现在问题基本上有头绪了,就屏幕距离(像素为单位)通过72dpi这个值,转换为图上距离。假设屏幕距离为P,分辨率为R,则比例尺S为:
实地距离: R * P
图上距离: (P / 72) / 39.3701 = P / (72*39.3701)    
比例尺: S =  P / (72*39.3701)  / R*P   = 1 /  R*72*32.3701
39.3701是inches和米的对应关系。Openlayers专有对象定义了这样的对应关系,为的就是能对于不同投影,不同单位的地图得到一个大概的比例尺。
OpenLayers.INCHES_PER_UNIT =
'inches': 1.0, 
'ft': 12.0,
'mi': 63360.0, 
'm': 39.3701, 
'km': 39370.1, 
'dd': 4374754,
'yd': 36 };
Openlayers中也有这个一个定义:OpenLayers.DOTS_PER_INCH = 72;即前文中提到的dpi。
当然由Scale反算Resolution也很简单,关键是要知道单位,Units。
讲的不太明白,可能我也只是弄懂了Scale和Resolution,对于Zoom,zoomlevel,exten,scale,Resolution之间的关系,我也还有一点模糊,准备再学习一下。如果有人想了解一下,可以看这里,也可以直接研究Openlayers的源码,那样会更有收获些。

————————————————————————————————

学习,更有耐心些

Openlayers中的比例尺(scale)和分辨率(resolution)相关推荐

  1. ros中订阅/map话题,获取地图尺寸,获取机器人原点origin,获取地图分辨率resolution (c++,python,waitForMessage,wait_for_message)

    ros中订阅/map话题,获取地图尺寸,获取机器人原点position,获取地图分辨率resolution 1. #include <ros/ros.h> #include <nav ...

  2. OpenLayers中地图缩放级别的设置方法

    一.概述 在OpenLayers中,地图必须具有一个缩放级别的范围,缩放级别可以用比例尺(scale)或者分辨率(resolution)表示. 比例尺--屏幕上1米代表多少地图坐标单位:分辨率--屏幕 ...

  3. 开源GIS(十一)——openlayers中加载离线标准与自定义切片(深度好文)

    目录 一.引言 二.离线标准与自定义切片的制作与使用 1.离线切片的制作 2.离线切片的使用 三.离线标准切片加载 四.离线自定义切片加载(重点非常有用) 五.总结 一.引言 上一篇文章中讲解了在线切 ...

  4. Openlayers中使用Cluster+Overlay实现点击单个要素和聚合要素时显示不同弹窗

    场景 Openlayers中使用Cluster实现缩放地图时图层聚合与取消聚合: Openlayers中使用Cluster实现缩放地图时图层聚合与取消聚合_BADAO_LIUMANG_QIZHI的博客 ...

  5. Openlayers中使用Cluster实现点位元素重合时动态聚合与取消聚合

    场景 Openlayers中使用Cluster实现缩放地图时图层聚合与取消聚合: Openlayers中使用Cluster实现缩放地图时图层聚合与取消聚合_BADAO_LIUMANG_QIZHI的博客 ...

  6. Openlayers中使用Cluster实现缩放地图时图层聚合与取消聚合

    场景 Openlayers中实现地图上打点并显示图标和文字: Openlayers中实现地图上打点并显示图标和文字_BADAO_LIUMANG_QIZHI的博客-CSDN博客_openlayers 打 ...

  7. Openlayers中使用animate实现车辆定位导航效果(以当前车辆为中心移动)

    场景 Openlayers中加载Geoserver切割的EPSG:900913离线瓦片地图并显示: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/ ...

  8. Openlayers中使用Overlay实现点击要素弹窗并且弹窗随之移动

    场景 Vue+Openlayer使用overlay实现弹窗弹出显示与关闭: Vue+Openlayer使用overlay实现弹窗弹出显示与关闭_BADAO_LIUMANG_QIZHI的博客-CSDN博 ...

  9. 开源GIS(十二)——openlayers中加载切片原理

    目录 一.切片加载方法 1.代码 2.代码分析 3.参数解释 二.切片加载原理 一.切片加载方法 1.代码 var projection = ol.proj.get('EPSG:3857');// 瓦 ...

最新文章

  1. Python入门100题 | 第070题
  2. 4.非关系型数据库(Nosql)之mongodb:普通索引,唯一索引
  3. fillna函数_听说这些pandas函数,是数据科学家和软件工程师的最爱
  4. sklearn中SVM调参说明
  5. jsf 项目_您将在下一个项目中使用JSF吗?
  6. Sqlite SQL格式化输入函数splite3_mprintf
  7. QT动态连接库的编写
  8. 【Python】pymysql模块处理Mysql数据库
  9. Shell脚本实现每个工作日定时执行指定程序
  10. service.php,service.php
  11. 2021年重庆高考成绩排名查询,2021年重庆理科高考成绩排名一分一段表,重庆高考理科成绩排名查询...
  12. GDI绘制矩形缺少右边和底部边界线问题
  13. 【转】如何分析解决Android ANR
  14. PS如何删除智能图层为可编辑状态
  15. 微软应用商店Ubuntu 20.04 LTS打开0x8007019e错误解决
  16. 2.GSAP(TweenMax手册/TweenLite手册)之一
  17. 【大疆DJI】安卓开发实习历程- 0.前期准备到面试(HR电话初面+技术一面+技术二面/终面+OC)
  18. 《万能数据库查询分析器》创作人之2014年总结
  19. 2017河南工业大学校赛 C 魔法宝石
  20. Nginx代理websocket

热门文章

  1. 通达OA任意用户登录复现(最新)
  2. 关于Rust读取自定义toml文件
  3. 跨国引入强势技术 安全行业又添生力军
  4. 【Android 系统开发】 编译 Android文件系统 u-boot 内核 并烧写到 OK-6410A 开发板上
  5. 2021年制冷与空调设备运行操作免费试题及制冷与空调设备运行操作考试试卷
  6. 全力以赴提升粮食产能,建设责任担当
  7. java命令--jstack 工具
  8. 一个不错的网站,颜色推荐 http://www.colorhexa.com/
  9. 原 Java课前总结与课后习题原 Java课前总结与课后习题
  10. VC++实现局域网嗅探QQ号