1.没有豆浆机怎么办?

喝豆浆是我们早晨中基本必备的一环,油条豆浆,其乐融融。如果我问大家豆浆是怎么来的,五谷不分的人会说是用钱买的,了解有黄豆这会事的人会说是用豆浆机把黄豆磨出来的。如果我们再倒退十几年,我相信见到过挑着担子卖豆浆的人就会给出一个更详细的答案了,先用水侵泡黄豆一夜,然后在器皿中充分捣碎,再用中火一直煮,并且要不断搅拌,直至浮沫消失,豆浆才做成了。

听到这个答案,很多人就会惊讶了,这么麻烦啊,还是有豆浆机方便。现在我提出一个问题,如果停电了,如果豆浆机坏了,如果你没有钱去买豆浆机,你还能自己做出豆浆吗?难道你就只能去买别人的豆浆喝?

2.如果没有二次开发包,怎么办?

如果我把已经有的地图数据比作黄豆,我问大家一个问题,如果我们的项目由于经费问题,不提供正版的Runtime,也不提供AGS的地形图服务,那我们该如何让浏览器来显示地形图呢?当然,有的人会指出一整套开源的方案,比如我用Geoserver啊等等。

那如果我再问你,假如有一天我们碰到了一个奇怪的业主,它跟你说,我们只想地图在第级别显示,我们只想地图显示某一区域,我们的要素太多太多了,我们希望能在地图拖动的时候动态的将可视范围内的要素加载上来,等等等等问题。如果你是一个只知道用豆浆机的人,你该如何完成这些刁钻的问题?

二次开发做到一定程度的人,也不会只局限在,C/S时加载MXD出个地图,B/S时写入一个地形图服务URL出个图的。他同样也必须了解,到底是如何将服务端一个一个瓦片变成浏览器里看到的一张完整的地图的。

这里我将连续花上几个篇幅来一一回答这个问题。

3.地图比例尺中的Scale和Resolution

前面我不厌其烦的给大家说了很多本节的题外话,现在言归正传,我们开始这个系列中的第一个问题,地图比例尺换算原理。想要从底层实现瓦片的显示,我们首先必须了解瓦片本身。

我们用arcgis切完图后,打开发布的服务或者打开config.xml配置文件,可以看到所切之图的相关配置。如图所示:

其中levels即为所切图的比例尺参数。每一层Level包含了一个resolution参数和一个scale参数。

Scale表示的是比例尺,即地图上的一厘米代表着实际上的多少厘米。例如地图上1厘米代表实地距离500千米,可写成:1 ∶ 50,000,000或写成:1/50,000,000。

Resolution表示的是分辨率。Resolution 的实际含义代表当前地图范围内,1像素代表多少地图单位(X地图单位/像素),地图单位取决于数据本身的空间参考。可见Resolution跟 dpi有关系(dpi代表每英寸的像素数),跟地图的单位也有关系。

4.行列号——瓦片存放地址的标识

在这里给大家再介绍一个GIS里的术语——行列号。我么可以这么想象,把一张矩形的地图,按照一定的规律(按照切图原点,切图范围,瓦片大小),分成了很多个大小相同的矩形,那么这个矩形所在位置,我么基本上是可以用Row和Col来表示出来。当然,如果我们了解影像金字塔这个概念,那么前面还要加上一个Level(影像级别),说通俗点就是你目前切割的这个矩形是属于整个影像中的哪一层的。

这里,我们先看看切完地图后,瓦片的存放路径,我以离散型瓦片(Exploded)为例:

这里的L06表示的是瓦片所在地图的级别,R00001179d表示的瓦片的行号,C0000a24e为瓦片的列号。这些数字是怎么算出来的,容我留着在后面的几章给大家一一来讲解。

不过这里我可以负责任的告诉大家,如果想知道行列号怎么换算,那么下面这个问题你必须知道答案。

屏幕上1像素代表实际距离是多少?

5.屏幕上1像素代表的实际距离是多少?

在计算瓦片的行列号之前,我们需要得到图上一像素代表实际距离多少米。现在假设地图的坐标单位是米,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米。

6.平面坐标系和经纬度坐标系中的比例尺

6.1平面坐标系中的比例尺

当数据库为平面坐标系统时,此时系统中所需的比例尺应该从scale中取得。因为原scale中表示的实际单位是厘米,而我们系统中需要的单位是米,所以在填写地图比例尺时,会将scale除以一百后再填写。更具第二节中描写,我们可以在系统中换算出1像素代表了多少米。

6.2经纬度坐标系中的比例尺

当数据库为经纬度坐标系统时,此时系统中所需的比例尺应该从resolution中取得。此时的resolution直接代表了地图上一像素等于实际中的多少度。

但是,因为代码中已经有了一个如第二节中所描述的一个转换算法,所以此时在填写数据库中比例尺时,需要将此算法逆向换算后再填入。

即:resolution*96/inch2centimeter

7.英寸转厘米所引发的问题

英寸转厘米的国际参数是:2.5399998,当利用天地图或者其他第三方非AGS切图的地图时,都可使用这个参数值。

但是,当用AGS所切之图时,此参数变成了:2.54000508001016。这可能是AGS自己内部定义的一个转换参数。

根据参数的不同,当我们换算经纬度坐标系下的比例尺时,要根据不同的参数来进行转换。当是AGS地图时,则为:resolution*96/2.54000508001016。

8.总结

在了解屏幕上1像素代表实际距离多少是怎么算出来之后,我们可以进入下一章节了——根据地理范围换算出瓦片行列号的原理。

探究本质,WebGIS前端地图显示之地图比例尺换算原理相关推荐

  1. webGIS学习(二)探究本质,WebGIS前端地图显示之地图比例尺换算原理 发布于 3 年前 作者 lzxue 7473 次浏览 来自 技术 1.没有豆浆机怎么办? 喝豆浆是我们早晨中基本

    1.没有豆浆机怎么办? 喝豆浆是我们早晨中基本必备的一环,油条豆浆,其乐融融.如果我问大家豆浆是怎么来的,五谷不分的人会说是用钱买的,了解有黄豆这会事的人会说是用豆浆机把黄豆磨出来的.如果我们再倒退十 ...

  2. (三)WebGIS前端地图显示之根据地理范围换算出瓦片行列号的原理(核心)

    https://www.cnblogs.com/naaoveGIS/p/3899821.html (三)WebGIS前端地图显示之根据地理范围换算出瓦片行列号的原理(核心) 文章版权由作者李晓晖和博客 ...

  3. WebGIS教学——瓦片行列号换算

    1.影像金字塔简介 1.1 为什么要出现影像金字塔这个概念 现在,我假设我们的服务器上有一个1G的影像,需要将其在前端进行显示.我们传统的做法就是首先将服务器中的1G影像下载到前端,然后浏览器加载渲染 ...

  4. java流程控制原理与方法_1.从本质上看,计算机控制系统的工作原理可归纳为三个步骤,以下不属这三个步骤的是 ( )。_学小易找答案...

    [单选题]下列语句序列执行后, i 的值是( ); int i =1 ; switch ( i ) { case 1: i++; case 2: i+=2; } [单选题]对于 while语句而言, ...

  5. 2020最全前端面试系列(浏览器原理)(最容易忽视的面试隐藏大杀器)

    2020前端面试系列(浏览器原理) 浏览器输入URL到返回页面的全过程 浏览器渲染步骤 重排和重绘 触发reflow情形 减少reflow方法 浏览器本地存储方案的比较 cookie localSto ...

  6. 前端小帆( Promise的原理 )

    前端小帆( Promise的原理 ) 什么是promise 1,promise,简单说就是一个容器,里面保存着某个未来才会结束的事件的结果(通常为一个异步操作) 2,从语法上说,promise是一个对 ...

  7. 回归 HTTP 协议本质:前端还能做哪些性能优化?

    上篇文章聊到:在 HTTP 2.0 时代以后,不需要额外担心由于 TCP 连接数带来的前端性能问题,因此我们不再需要雪碧图等优化手段了.于是前端工程师在 HTTP 协议这层能做的性能优化似乎只有「尽可 ...

  8. WebGIS前端框架(openlayers,mapbox,leaflet)图形图像底层渲染原理分析

    <WebGIS快速开发教程>写好啦_WebGIS小智的博客-CSDN博客 学了这么多的框架,做了这么多的项目,你是否清楚你使用的GIS框架(mapbox,open layers,cesiu ...

  9. 探究vite——新一代前端开发与构建工具(一)

    Vite (法语意为 "快速的",发音 /vit/) 是一种新型前端构建工具,能够显著提升前端开发体验.它主要由两部分组成: 一个开发服务器,它基于 原生 ES 模块 提供了 丰富 ...

  10. []==![]结果为true,探究 == 本质

    关于==与===的区别相信大家都很清楚啦,这理解不再赘述,今天我们来看下[]==![]的结果. 这是楼主碰到过得一个面试题,恩,华丽丽的答错了: []==[] //false,这个是常识,因为在两边都 ...

最新文章

  1. linux多线程求和_211渣硕,海投200+家Java岗(面40,过7),收获多份offer!
  2. C语言实现链表(附完整源码)
  3. 二叉树节点个数,叶子个数,第K层个数,最低公共节点
  4. java的应用程序开发_开发一个Java应用程序(1)
  5. 方舟非主机服务器无限距离,方舟非专业服务器距离限制怎么解除 | 手游网游页游攻略大全...
  6. 七年级计算机上教学计划,初一教学计划模板锦集5篇
  7. 什么是Vue?为什么要学习Vue?如何使用Vue?
  8. 跨平台的开源的可视化分析工具 Grafana的介绍与使用
  9. MYSQL的用户变量(@)和系统变量(@@)
  10. TurboMail 邮件系统V5.2.0新品发布会盛况直击
  11. 1489 数据结构:矩阵鞍点
  12. linux下安装虚拟天文馆,【地理软件】虚拟天文馆——stellarium
  13. app 原形设计常用工具总结
  14. Qt 官方例子 Callout Example
  15. 苹果证书导出p12文件
  16. 饼图加引导线_【如何在饼形图中添加引导线(Excel)】excle里面一条竖状线
  17. “左手画圆,右手画方”
  18. 绘画教程:日式温泉场景怎么画?露天浴场的正确画法!
  19. 20221125使用PR2023自动识别obs-studio录屏生成的MKV视频的字幕
  20. Go基础:for循环

热门文章

  1. 简易支付系统的架构设计
  2. torch.nn.Module.named_buffers(prefix=‘‘, recurse=True)
  3. 【Java】问题记录:fastjson中JSON.isValid()方法校验JSON合法性的BUG
  4. python计算加权平均分
  5. Qt QLineedit 控件出发clicked信号问题
  6. 设计分享 | STM32F103RCT6利用ULN2003驱动步进电机正反转
  7. Typora 官网被Q了?(文中附下载地址)
  8. 韩昊 20190919-4 单元测试,结对
  9. ubuntu系统给u盘拷贝文件
  10. UVA 473 Raucous Rockers