比例尺=图上距离与实际距离的比。本文主要侧重于电子地图(或者web地图)的计算

文章目录

  • 一、概述
  • 二、查看源码
  • 三、总结

一、概述

比例尺,作为地图三要素(比例尺、图例、注记)之一,是地图不可或缺的组成部分。从传统的纸质地图到现在的电子地图,如天地图、百度地图、高德地图、腾讯地图、谷歌地图、Bing地图等,都能看到其身影。
在一张传统的纸质地图中、地图的长宽是固定的,对应的地理长度也是固定的,因此比例尺也是固定的,且容易计算,即地图一段距离:实际对应的地理长度。而现在的电子地图、随着地图的缩放,一定屏幕宽度(像素)对应的实际距离不同,因此随着地图的缩放级别不一样,比例尺也发生相应的改变。但实质还是没变,只是添加了缩放级别、分辨率和屏幕像素等。
缩放级别、分辨率、和像素的相关知识有很多,这里就不进行详细描述。
举个例子:以全球墨卡托地图为例
缩放级别为0,对应1张图片,
像素宽度为256,实际距离为2πearth.radius(6378137m)=40075016.68557849
0级下的分辨率为40075016.68557849/256=156543.03392804097(像素/米)
0级下的比例尺:1:591658710.9091312(将分辨率的像素转换为米即可得到)

1英寸=0.0254米=96像素
1像素=0.0254/96 米

二、查看源码

在openlayer的scaleline.js(https://github.com/openlayers/openlayers/blob/v4.6.5/src/ol/control/scaleline.js)中。
第一步、构造ol.control.ScaleLine对象,
动态创建页面元素,如

<div class="ol-scale-line ol-unselectable"><div class="ol-scale-line-inner" style="width: 66px;">10000 km</div>
</div>

设置默认的页面比例尺最小长度:64px
地图渲染、监听、单位等设置

第二步、设置原型方法,这里着重理解方法ol.control.ScaleLine.prototype.updateElement_

  1. 获取视图信息this.viewState_,包括中心点、坐标系、单位、分辨率对应的单位
var viewState = this.viewState_;
……
var center = viewState.center;
var projection = viewState.projection;
var units = this.getUnits();
var pointResolutionUnits = units == ol.control.ScaleLineUnits.DEGREES ?ol.proj.Units.DEGREES :ol.proj.Units.METERS;
  1. 计算中心点的分辨率pointResolution
var pointResolution =ol.proj.getPointResolution(projection, viewState.resolution, center, pointResolutionUnits);

补充:在epsg3857.js文件中,定义了getPointResolution方法。
墨卡托投影,纬度越高,变形越大,不能以赤道的分辨率为准,二是以该纬度的分辨率为准,即纬度周长(2πearth.radiuscos(latπ180))/256,(lat单位为度,需转化为弧度)
公式为:(默认对应0级)
赤道分辨率:resolution =2
πearth.radius/256
某一纬度分辨率:resolution * cos(lat
π*180)

保证单位的统一,需要经纬度坐标和墨卡托的坐标的转化
var mercator.y = ol.proj.EPSG3857.RADIUS Math.log(Math.tan(Math.PI * (lat + 90) / 360));
var lat= mercator.y/ ol.proj.EPSG3857.RADIUS
lat=180/Math.PI
(2atan(exp(mercator.yMath.PI/180))-Math.PI/2);

转化后:resolution / ol.math.cosh(lat / ol.proj.EPSG3857.RADIUS);

//resolution:分辨率,即我们通常计算的以赤道为标准的分辨率
//point:以米为单位
//返回值:某一纬度的分辨率,resolution /*cos(lat*π*180)
getPointResolution: function(resolution, point) {  return resolution / ol.math.cosh(point[1] / ol.proj.EPSG3857.RADIUS);
}

此处省略了其他坐标系的点分辨率的求法,可自行查看、推算。

  1. 根据分辨率求比例尺
//默认minWidth_=64px;
var nominalCount = this.minWidth_ * pointResolution;
//后面根据分辨率单位,对比例尺进行单位转化
……

三、总结

在openlayers中,比例尺的计算,主要是通过视图中心点的分辨率来得到。因此,重点及难点是在不同的坐标系,赤道以外的点的分辨率的计算。

在墨卡托坐标系下,[x,y]的分辨率=resolution / ol.math.cosh(y / ol.proj.EPSG3857.RADIUS);

openlayers中比例尺的计算原理相关推荐

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

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

  2. Openlayers中的比例尺(scale)和分辨率(resolution)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/dazhi_1314/article/d ...

  3. OpenGL中摄像机矩阵的计算原理

    OpenGL中摄像机矩阵的计算原理 熟悉OpenGL|ES的朋友,可能会经常设置摄像机的view矩阵,iOS中相对较好,已经封装了方向,只需要设置摄像机位置,目标点位置以及UP向量即可.下面先介绍下摄 ...

  4. 不同阶QAM调制星座图中,符号能量的归一化计算原理

    文章目录 前言 一.归一化能量计算原理 二.Matlab中如何得到归一化能量符号 总结 前言 在基于QAM调制的matlab仿真程序中,我们通常会产生二进制比特流,并最终映射成QAM符号,该符号大都是 ...

  5. 中职 计算机原理 计算题,中职《计算机原理》测验2.doc

    中职<计算机原理>测验2 计算机原理测验二 一.单项选择题 1.X的8位补码则X的16位补码是( ) A.0000000010110100B.1000000010110100C.11111 ...

  6. 基于新型忆阻器的存内计算原理、研究和挑战

    作者 | 林钰登.高滨.王小虎.钱鹤.吴华强 来源 | <微纳电子与智能制造>期刊 引言 过去半个世纪以来 ,芯片计算性能的提高主要依赖于场效应晶体管尺寸的缩小.随着特征尺寸的减小 ,器件 ...

  7. 《伟大的计算原理》一致谢

    本节书摘来华章计算机<伟大的计算原理>一书中的第1章 ,[美]彼得 J. 丹宁(Peter J. Denning) 克雷格 H. 马特尔(Craig H. Martell)著 罗英伟 高良 ...

  8. ARCore中根据屏幕坐标计算射线的算法

    ARCore中根据屏幕坐标计算射线的算法 ARCore中提供了根据屏幕坐标.视口大小及view. project矩阵计算从屏幕坐标发射一条射线的方法,此方法用于3D拾取. 1 class Ray { ...

  9. lwip协议栈中超时定时器实现原理

    lwip协议栈中超时定时器实现原理 1,超时定时器存在的目的: tcpip协议中存在很多需要定时处理的任务,包括一次性超时处理和周期性超时处理. 以tcp传输为例,每条连接总共需要建立七个定时器,依次 ...

  10. 在计算机系统中有两种不同的图像编码方式,第二章计算机系统与计算原理.ppt...

    第二章计算机系统与计算原理 大学计算机基础 * 信息表示与处理 ----西文字符 ASCII 码是美国信息交换标准代码(American Standard Code for Information I ...

最新文章

  1. java下使用Thumbnailator类库来对图片进行缩放
  2. AWS回应Elastic修改开源协议:创建“真正”开源的Elasticsearch分支
  3. 实验 3:备份和还原配置文件
  4. Airtest自动化测试工具介绍
  5. xavier初始化_深入解读xavier初始化(附源码)
  6. 第二阶段冲刺-个人总结09
  7. rails 5 action cable 服务器部署
  8. 如何将EDM营销与多渠道推广方式相结合
  9. php 多数据库联合查询,php如何同时连接多个数据库_PHP教程
  10. selenium + python自动化测试unittest框架学习(一)selenium原理及应用
  11. Bzoj1103 [POI2007]大都市meg
  12. PlistEdit Pro for Mac(Plist编辑器)
  13. 众多优质资源限时看,24小时删!
  14. JQuery Easyui/TopJUI 基本树形表格的创建
  15. Servlet 中的四大作用域
  16. html%2b怎么转换成加号,url 参数的加号变成空格处理
  17. amigo幸运字符什么意思_OMG,12 个精致的 Java 字符串操作小技巧,学它
  18. 图论Graph Theory:福尔福特森算法 Ford-Fulkerson
  19. Java IO - 分类
  20. 一文搞懂指标采集利器 Telegraf

热门文章

  1. 关于操作系统镜像超过4G的解决办法
  2. 2018年小学计算机面试,2018上半年小学信息技术教师资格证面试试题(精选)第一批...
  3. CnCerT.Net.SKiller工作原理
  4. 关于哔哩哔哩视频,音频合并(使用ffmpeg批量处理)
  5. 周记——20150427
  6. bootstrap多文件上传和单文件上传
  7. 使用Python比较两个文本文件的相似度
  8. 汽车洒水器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  9. 在线SVG转换,支持SVG to PNG、SVG to JPEG、SVG to WEBP 图片转换操作-toolfk程序员在线工具网
  10. 掘地求生是什么游戏 把主播都逼疯的玩个锤子是什么游戏-李廷学