Open LastPoem opened 4 years ago
投影: 墨卡托投影:正轴等角圆柱投影,在投影后地图上任意两点的角度和实际球面上任意两点的角度相同,即方向不变,适用于导航。从地球中心投影到与地球赤道相切的圆柱曲面上,因此越往南北变形越大。
Web墨卡托投影: 又称球体墨卡托投影,是墨卡托投影的变种。接收的是WGS84的经纬度数据,但在投影时将地球近似为一个半径为6387137米的标准球体以简化计算。
web墨卡托投影(球体墨卡托投影)也有两套标准: EPSG4326:Web墨卡托投影后的平面地图,但仍然使用WGS84的经度、纬度表示坐标; EPSG3857:Web墨卡托投影后的平面地图,坐标单位为米。
瓦片编号: 不同地图商使用不同的编号方法。目前主要有四种编号方法:
1.谷歌XYZ:Z表示缩放层级,Z=zoom;XY的原点在左上角,X从左向右,Y从上向下。 2.TMS:开源产品的标准,Z的定义与谷歌相同;XY的原点在左下角,X从左向右,Y从下向上。 3.QuadTree:微软Bing地图使用的编码规范,Z的定义与谷歌相同,同一层级的瓦片不用XY两个维度表示,而只用一个整数表示,该整数服从四叉树编码规则 4.百度XYZ:Z从1开始,在最高级就把地图分为四块瓦片;XY的原点在经度为0纬度位0的位置,X从左向右,Y从下向上。
关于经纬度: 国内的经纬度有三套系统。 WGS84:为一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系。 GCJ02:又称火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。 BD09:为百度坐标系,在GCJ02坐标系基础上再次加密。其中bd09ll表示百度经纬度坐标,bd09mc表示百度墨卡托米制坐标。
使用OpenStreetMap的坐标为WGS84;使用高德地图、腾讯地图的坐标为GCJ02;使用百度地图的坐标为BD09;谷歌地图和Bing地图的中国部分采用了高德地图的数据,所以坐标为GCJ02。
WGS84的坐标转化为GCJ02的坐标是单向的,即WGS84的坐标能够准确地变换为GCJ02坐标;但GCJ02坐标转换为WGS84时会存在精度损失。
GCJ02的坐标和BD09的坐标转换是双向的,转换规则可以参考以下python代码
import math
x_pi = 3.14159265358979324 * 3000.0 / 180.0
def amapcoor2bmapcoor(amap_lon, amap_lat):
x = amap_lon
y = amap_lat
z = math.sqrt(x * x + y * y) + 0.00002 * math.sin(y * x_pi)
theta = math.atan2(y, x) + 0.000003 * math.cos(x * x_pi)
bmap_lon = z * math.cos(theta) + 0.0065
bmap_lat = z * math.sin(theta) + 0.006
return (bmap_lon, bmap_lat)
def bmapcoor2amapcoor(bmap_lon, bmap_lat):
x = bmap_lon - 0.0065
y = bmap_lat - 0.006;
z = math.sqrt(x * x + y * y) - 0.00002 * math.sin(y * x_pi);
theta = math.atan2(y, x) - 0.000003 * math.cos(x * x_pi);
amap_lon = z * math.cos(theta);
amap_lat = z * math.sin(theta);
return (amap_lon, amap_lat)
1.定义
地图切片:采用预生成的方法存放在服务器端,然后根据用户提交的不同请求,把相应的地图瓦片发送给客户端的过程,它是一种多分辨率层次模型,从瓦片金字塔底层到顶层,分辨率越来越低,但表示的地理范围不变。
地图缓存:又称地图瓦片,是一个包含了不同比例尺下整个地图范围的地图切片的目录,即一个缓存的地图服务就是能够利用静态图片来快速地提供地图的服务。
2.优缺点 1)速度快,预先配色,显示效果佳,满足高并发访问,适合做底图。
2)瓦片地图缓存非常高效,如果你曾经查看过某一区域的瓦片,当你再次查看该区域的瓦片时,浏览器可能使用之前缓存的相同的瓦片,而不用重新下载一次。
3)瓦片地图可以渐进加载。中心区域的瓦片可能优先于边缘区域的瓦片加载,你可以移动或定位某一点,即使当前地图边缘区域还未加载。
4)简单易用。所以很容易在服务器、网络、桌面或移动设备上实现技术集成。
5)需要额外占用磁盘空间,需要预先生成切片,无法自定义地图。
3.原理
切片之前要确定切图的起点(Tiling scheme origin point)、图片宽度和高度,设置起点(WGS84下默认是(-400,400))的目的在于保证同一坐标系下的切片地图可以完美的叠加在一起。
在默认的Tiling scheme origin下和图片大小的情况下进行地图切片,可以根据用户设置的比例尺来计算地图数据在整个网格中的行列号,计算公式如下:
其中point是当前坐标,this是origin点坐标,plottingResolution指当前Level的地图的地图分辨率。
如果要计算plottingResolution,可以根据用户输入的levelScale得到当前条件下的地图分辨率:
Scale=1:(96*2*Math.PI*6378137*resolution/360/0.0254);
4.主要概念 1) 四至(Extent)和原点(Origin)
2)切片的分辨率和比例尺
比例尺:图上一单位长度代表实际多少长度单位;分辨率:屏幕一像素(px)代表实际多少单位,实际单位按照地图坐标而定。分辨率与dpi(每英寸的像素数)有关、与地图单位有关。
分辨率和比例尺转换关系: 1、如果地图单位是米,dpi=96 1英寸=2.54厘米;1英寸=96像素;最终换算的单位是米;
Scale=1:(96*Resolution/0.0254); 2、如果地图单位是度(地理坐标系是WGS84),dpi为96,1度约等于111194.872221777米;
Scale=1:(962Math.PI6378137Resolution/360/0.0254);
5.切片分类
1)矢量切片(详情)
是一种利用协议缓冲(Protocal Buffers)技术的紧凑的二进制格式用来传递信息。当渲染地图时矢量切片使用一系列存储的内部数据进行制图。被组织到矢量切片的图层比如(水、道路、区域等),每一层都有包含几何图形和可变属性的独立要素。通俗地讲,就是将矢量数据以建立金字塔的方式,像栅格切片那样分割成一个个描述性文件,以GeoJson格式或者PDF等自定义格式组织,然后在前端根据显示需要按需请求不同的矢量瓦片数据进行Web绘图
常见的格式有GeoJson、TopoJson、PDF(ArcGIS格式)、KML、GeoRSS等等。
2)栅格切片