使用HTML5 canvas做地图(1)基础知识
之前一直想使用HTML5技术全新做一套地图API,可是苦于时间和精力,迟迟未有行动。后来下定决心,利用下班和周末做出一个大体框架出来,现在和网友分享一下自己的整体的一个思路和想法。欢迎大家提出宝贵建议,希望把这套API做的更好,有人真正利用起来。DEMO访问地址,猛击这里。
数据 |
我们看到的电子地图是多个图层叠加之后的效果,每一个图层都至少对应着一个地图服务。我们这样可以理解服务,我们把简单的参数传给后台,后台会把原始数据返回来,前端或者应用就可以根据自己需要,渲染成图。
这里返回的数据,不仅仅是矢量数据,也包括栅格数据。
矢量数据,包括那些点线面的具体坐标、投影或者坐标系。矢量数据使用场景:数据经常更新,需要知道数据属性或坐标。
栅格数据,提前生成好的图片或者动态生成的图片。栅格数据使用场景:底图,计算量较大的渲染图。
一般来说,一个地图,最下面是一个底图,然后在上面叠加一些矢量数据和栅格数据。底图主要是为了在当前比例尺下显示大概地形要素。底图变动周期比较长,数据量比较大,不适合使用矢量数据加载。现在通用的做法,将地图分割成一个个的小图片,然后等到使用的时候拼接起来。我们可以想象一下,之前的屋顶上面的瓦,是怎么一个形态?是不是一个一个拼接成的,然后形成屋顶的,没有谁家的瓦,是一个整体吧。这样做的好处主要有这么几个:
1:可以动态拼接某一范围的底图。
2:可以局部更新瓦片。
坐标系 |
坐标系分为投影坐标系和地理坐标系,不多说这个了,因为关于这方面的知识实在是太多了,我对这个不是太擅长,只是说一下常见的就可以了。
地理坐标系,是以经纬度为地图的存储单位的。
投影坐标系参数当中都会包括一个地理坐标系,实质上是一个平面坐标系统,单位通常是米。
WGS84,是为GPS全球定位系统使用而站立的坐标系统,属于地理坐标系。GPS采集到的数据,都是基于WGS84。中国现在使用较多的是西安80或者北京2000,这就需要一个转换过程,不过具体参数是保密,现在转换的工具或者公式,转换都会存在误差的,也就会经常看到一些数据叠加发生了偏移错位(当然不仅仅是因为这一个原因,国内的数据发布到网络上面,都要求做偏移处理的)。WGS84东西方向范围[-180,180],南北方向范围[-90,90]。由于坐标系和投影实在是太多而且名字加参数太长,不容易记,所以就给每一种坐标系定义了一个或多个序列号,WGS84他的wkid是4326。
Web Mercator属于投影坐标系,这是一个正轴等角投影,投影出来之后呈现给我们的是一个正方形。我们都知道地球是一个椭球形,这样肯定会有误差,在大比例尺下面,就可以忽略这个误差了。不过话说回来,无论使用哪一种坐标系都会有误差的。等角投影,保证了对象形状不变,而且也保证了方向和位置的相对性性。这就是在众多的投影当中,我们为什么会选中它的原因(当然不是我选择的,基本上互联网公司底图都是使用这种投影)。三个wkid代表它3857、102100、102133,用的最多的还是102100。东西和南北方向范围都是[-20037508.3427892,20037508.3427892]
下面一节是主要是讲述以谷歌和微软Bing Maps为例,探讨瓦片是如何计算的。
使用HTML5 canvas做地图(1)基础知识的更多相关文章
- 使用HTML5 canvas做地图(3)图片加载平移放大缩小
终于开始可以写代码了,手都开始痒了.这里的代码仅仅是在chrome检测过,我可以肯定的是IE10以下浏览器是行不通,我一直在考虑,是不是使用IE禁止看我的篇博客,就是这群使用IE的人,给我加了很多工作 ...
- 使用HTML5 canvas做地图(2)瓦片以及如何计算的
上一篇也说到瓦片,我们为什么使用瓦片?这一篇主要是关于如何拼接地图? 下面的一张图,可以一眼明了,地图是如何切割以及拼接的. 瓦片信息 瓦片信息包括切图原点,瓦片大小,格式,分辨率以及分辨率级别等. ...
- html5 canvas做的图表插件
用highchart的时候发现它是用svg来画图的,那么用canvas来做怎么样的. 以前做AS图表插件的时候,绘制图画主要用容器的Graphics对象来绘制,而canvas的context和Grap ...
- 用HTML5 Canvas 做擦除及扩散效果
2013年的时候曾经使用canvas实现了一个擦除效果的需求,即模拟用户在模糊的玻璃上擦除水雾看到清晰景色的交互效果.好在2012年的时候学习HTML5的时候研究过canvas了,所以在比较短的时间内 ...
- Canvas和SVG的基础知识,以及两者的区别(小白)
首先我们来说一下Canvas是什么,它有什么作用以及它的知识点. Canvas是<HTML5>的新标签,它通常用于通过脚本(也就是JavaScript)来绘制图像.但是它本身并没有绘制能力 ...
- 【Bugly干货分享】一起用 HTML5 Canvas 做一个简单又骚气的粒子引擎
Bugly 技术干货系列内容主要涉及移动开发方向,是由Bugly邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 前言 好吧,说是“粒子引擎”还是大言不 ...
- 一起用HTML5 canvas做一个简单又骚气的粒子引擎
前言 好吧,说是"粒子引擎"还是大言不惭而标题党了,离真正的粒子引擎还有点远.废话少说,先看demo 本文将教会你做一个简单的canvas粒子制造器(下称引擎). 世界观 这个简单 ...
- 用HTML5 Canvas做一个画图板
使用HTML5可以非常简单地在canvas上实现画图应用,用支持html5的浏览器便可在下面的区域进行绘画,要看到演示效果,请确保你的浏览器支持HTML5: 功能很简单,原理其实和拖放是类似的,主要是 ...
- 用HTML5 CANVAS做自定义路径的动态效果图片!
最近对HTML5开始感兴趣了,实现的效果如下图,大家可以从代码里换掉图片 我用的是canvas里面的2d绘图,其中上图的路径是网上在线绘制的,我太懒了,哈哈 下面是网址: http://www.vic ...
随机推荐
- SQL Server中通过设置非聚集索引(Non-Clustered index)来达到性能优化的目的
首先我们一下,在SQL Server 2014 Management Studio中,如何为一张表设置Non-Clustered index 具体可以参考 https://docs.microsof ...
- 20. CTF综合靶机渗透(十三)
靶机说明: Wellcome to "PwnLab: init", my first Boot2Root virtual machine. Meant to be easy, I ...
- UVaLive 11525 Permutation (线段树)
题意:有一个由1到k组成的序列,最小是1 2 … k,最大是 k k-1 … 1,给出n的计算方式,n = s0 * (k - 1)! + s1 * (k - 2)! +… + sk-1 * 0!, ...
- git 仓库拆分方案对比
此文已由作者张磊授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 前言 git 拆分仓库在网上已有的案例上来看,分为 submodule 和 subtree. 还有基于这两个方 ...
- Tensorflow函数——tf.placeholder()函数
tf.placeholder()函数 Tensorflow中的palceholder,中文翻译为占位符,什么意思呢? 在Tensoflow2.0以前,还是静态图的设计思想,整个设计理念是计算流图,在编 ...
- 从阿里中台战略看企业IT架构转型之道
此文是我阅读<企业IT架构转型之道>一书的学习笔记,所有内容出自钟华老师的这本书. 零.为何读<企业IT架构转型之道> 在加入X公司后,开始了微服务架构的实践,也开始了共享平台 ...
- Python中的try和except语句
Python中是通过缩进来解析代码块的,要特别注意tab和空格符,两者不可以混用,通常情况下用四个空格来代替tab键 下面通过一个简单的例子来说明 提示用户输入工作的时间和每小时的时薪,如果超过40个 ...
- 2018杭电多校第五场1002(暴力DFS【数位】,剪枝)
//never use translation#include<bits/stdc++.h>using namespace std;int k;char a[20];//储存每个数的数值i ...
- UML——前两章
前言 软件开发过程中,在生命周期中,我们大都知道要写文档,但是针对这种团队集体完成的事情,如果中间出现了人员流动问题,这时侯有文档仅仅是不够的.为了让大多数开发人员和用户能直观的了解软件开发的进度和流 ...
- 基于svn+ssh:访问svn的部署以及客户端配置
1.安装ssh sudo apt-get install ssh 2.安装subversion sudo apt-get install subversion 3.为参与项目开发的成员建立用户帐户 s ...