球面墨卡托(Spherical Mercator)
地理信息描述空间位置相关的信息,在空间位置的表达中,需要基于空间参照系来保证数据精度以及不同数据源之间的相互叠加/空间分析操作。自Google Maps与2005年发布以来,电子地图服务与普通民众的日常生活关联日益密切,对于从事GIS行业的人员来说,基于现有地图服务制作相关应用能够达到事半功倍的效果。在本篇文章中主要介绍电子地图数据相关的概念以及构成弟子地图服务基础的Web Mercator投影坐标系的相关内容。
相关概念:
- Spacial Reference,空间参考
- EPSG,European Petroleum Survey Group (EPSG),该组织负责维护并发布坐标参照系统的数据集参数,以及坐标转换描述
- GCS,地理坐标系,椭球体定义,如WGS84坐标系,世界地理坐标系,EPSG 4326,GPS使用该坐标系,以及国内的54,80坐标系,使用经纬度坐标
- PCS,投影坐标系,基于GCS椭球体定义的投影方式的定义
- Mercator投影,由荷兰人Mercator定义的正轴等角切圆柱投影。Google Maps, Yahoo Maps, Microsoft Maps等网络电子地图服务使用基于该投影坐标系的Web Mercator坐标系, EPSG:900913 或 EPSG:3785,使用像素坐标(单位:像素)或者空间直角坐标(单位:米)
- Groud Resolution,地面精度为地图上的像素表达的地面距离,单位为meters per pixcel
- Map Scale,地图比例尺为地图距离与地面距离的比值
- Tile,瓦片表示网络地图中的最小组成部分
- TMS,Tile Map Service,瓦片地图服务,使用层行列坐标或者Quadkey
坐标转换
在使用公开的电子地图服务构建应用并叠加数据时,需要用到以下的坐标转换场景:
- LatLon <-> Meters <-> Pixels <-> Tile
- WGS84 coordinates Spherical Mercator Pixels in pyramid Tiles in pyramid
- lat/lon XY in metres XY pixels Z zoom XYZ from TMS
- EPSG: EPSG:
- .----. --------- -- TMS
- \ / | | /--------/ QuadTree
- ----- --------- /------------/
- KML, public WebMapService Web Clients TileMapService
EPSG:900913坐标范围
- [-, -, , ]
- let r =
- // 常量20037508根据地球周长(单位米)计算
- // 坐标原点位于范围中心
- offset = * pi * r / 2.0
EPSG:900913金字塔缩放级别地面精度(pixels/meter)
- // 整个区域在金字塔顶层 (zoom=0)为一张256x256 pixels的 瓦片,往下逐层细分
- baseMetersPerPixel = offset * / =
LatLon 与 Meter X/Y互相转换
- def YToLat(y)
- {
- return pi / 2.0 - 2.0 * atan(exp(-y/r))
- }
- def LatToY(lat)
- {
- sinLat = sin(lat);
- return 0.5*log((1.0 + sinLat)/(1.0 - sinLat))*r;
- // return -log(tan(pi / 4.0 - lat / 2.0)) * r;
- }
- def LonToX(lon)
- {
- return lon * offset / pi
- }
- def XToLon(x)
- {
- return x * pi / offset
- }
其中,LatToY有两种写法,转换原理为:
- let t = tan(pi / 4.0 - lat / 2.0)
- = tan((pi/2.0–lat) / 2.0)
- // 由半角公式
- = sin(pi/2.0–lat) / (+cos(pi/2.0–lat))
- // 由sin(π/2-α)= cosα, cos(π/2-α)= sinα
- = cos(lat)/(+sin(lat))
- = sqrt((-sin(lat))/(+sin(lat)))
- Log(t)
- = log(sqrt((-sin(lat))/(+sin(lat))))
- = -0.5*log((+sin(lat))/ (-sin(lat)))
Meter X/Y 与 Pixel x/y 互相转换
此处示范的是Bing Map中的转换方法,设定为:(origin [0,0] in top-left),如下图所示(Level 3)
- def MetersPerPixel2(zoom)
- {
- return baseMetersPerPixel / ( << zoom)
- }
- def PixelYToY(pixelY,zoom)
- {
- return offset - pixelY * MetersPerPixel2(zoom)
- }
- def YToPixelY(y,zoom)
- {
- return (offset - y) / MetersPerPixel2(zoom)
- }
- def PixelXToX(pixelX, zoom)
{
return pixelX * MetersPerPixel2(zoom) - offset
}- def XtoPixelX(x,zoom)
{
return (x + offset) / MetersPerPixel2(zoom)
}
Pixel x/y 与 Tile l/r/c或者quadkey互相转换
此处示范的是Bing Map中的瓦片编号方法,如下图所示(Level 3)
- def TileToPixel(tile)
- {
- east = (tile.X + ) *
- north = tile.Y *
- south = (tile.Y+) *
- west = tile.X *
- }
- def PixelToTile(pixelX, pixelY)
- {
- tile.X = floor(pixelX / )
- tile.Y = floor(pixelY / )
- }
通过tile的层行列号,转换到Bingmap下的quadkey的方法详见MSDN.
参考:
球面墨卡托(Spherical Mercator)的更多相关文章
- 横轴墨卡托 (Transverse Mercator) 投影
横轴墨卡托 (Transverse Mercator) 投影 描述 此投影又称为高斯-克吕格投影,它与墨卡托投影相似,不同之处在于圆柱是沿经线而非赤道纵向排列.通过这种方法生成的等角投影不会保持真实的 ...
- 墨卡托坐标与LBS应用
今天了解到这边的LBS应用,一般用的是墨卡托坐标. 也就是商品库的商品入库的时候,会根据输入,使用百度地图提供的一个API,来转换成一个墨卡托坐标. 然后用户流量过来的时候,会带来历史坐标,和当前坐标 ...
- WGS84与WGS84 Web Mercator
1. WGS84与WGS84 Web Mercator 1.1 关于WGS1984投影坐标系 UTM (Universal Transverse Mercator)坐标系是由美国军方在1947提出的. ...
- 墨卡托投影坐标系(Mercator Projection)原理及实现C代码
墨卡托投影是一种"等角正切圆柱投影",荷兰地图学家墨卡托(Mercator)在1569年拟定:假设地球被围在一个中空的圆柱里,其赤道与圆柱相接触,然后再假想地球中心有一盏灯,把球面 ...
- OpenLayers中的球面墨卡托投影
最近看OpenLayers,研究到地图投影时找到官方的文档,就翻译了一下,由于英文能力差,翻译不好的地方,请看原文 原文地址:http://docs.openlayers.org/library/sp ...
- [转]墨卡托投影坐标系(Mercator Projection)原理及实现C代码
墨卡托投影是一种“等角正切圆柱投影”,荷兰地图学家墨卡托(Mercator)在1569年拟定:假设地球被围在一个中空的圆柱里,其赤道与圆柱相接触,然后再假想地球中心有一盏灯,把球面上的图形投影到圆柱体 ...
- [转]地理投影,常用坐标系详解、WGS84、WGS84 Web墨卡托、WGS84 UTM、北京54坐标系、西安80坐标系、CGCS2000坐标系
转自:http://www.rivermap.cn/docs/show-1829.html 常用坐标系详解 (一)WGS84坐标系 WGS-84坐标系(World Geodetic System一19 ...
- 【GIS】WGS84与Web墨卡托理解(转)
坐标系 · WGS84,地理坐标系,单位度,在三维上可以很好的展示全球的数据,但在二维上显示时在高纬度地区变形较大,另由于WGS84坐标系与CGCS2000坐标系差异很小,所以WGS84坐标系在Web ...
- Web墨卡托投影(转)
Google Maps地图投影全解析(1):Web墨卡托投影 Google Maps.Virtual Earth等网络地理所使用的地图投影,常被称作Web Mercator或Spherical Mer ...
随机推荐
- vxworks一个超级奇怪的错误(parse error before `char')
void tserver(int id) { if(debug){ useResource(,id);} char msgBuf[MAX_MSG_LEN]; if (msgQReceive(myMsg ...
- VS2010+WINDBG+VMWARE9.0和fatal error RC1106: invalid option: -ologo错误
提供属性配置文件一份: http://pan.baidu.com/s/1iS1Ix <?xml version="1.0" encoding="utf-8" ...
- shell 从文件按行读
#!/bin/shheart=/archlog2/archive_2/heartbeatwhile truedofor file in `cat $heart`;doecho "wei xi ...
- 使用yum和iso镜像离线升级RedHat系统
创建一个用于挂载iso镜像的目录.由于这个目录不能在挂载时自动创建,所以需要以root身份先创建一个目录.命令: mkdir mount_dir 以root身份把iso镜像挂载到上一步创建的目录上.命 ...
- Xmind Pro 3.4.0.201311050558 Xmind 3.4 破解版 Crack
其实就一个附件.某大神那里的下不到了.从这里就好了. 使用方法请参见压缩包~ 如果连接不能用了请及时告知回复.>< 仅适用于与版本号为201311050558的Xmind.当然尊重正版开发 ...
- 神奇的问题记录【SqlDataAdapter Fill DataSet】
今天发现程序中有一张报表查询速度很慢[全条件要二分钟左右],查找相关原因,准备进行优化处理.注:报表调用存储过程,存储过程返回两个table就有以下神奇的故事: 直接将SQL语句在SSMS中执行发现全 ...
- Video Surveillance - POJ 1474(判断是否存在内核)
题目大意:询问是否在家里装一个监视器就可以监控所有的角落. 分析:赤裸裸的判断多边形内核题目. 代码如下: #include<iostream> #include<string.h& ...
- zoj 2588 Burning Bridges【双连通分量求桥输出桥的编号】
Burning Bridges Time Limit: 5 Seconds Memory Limit: 32768 KB Ferry Kingdom is a nice little cou ...
- Java 中 String 类和StringBuilder 类的常用方法
String 类提供了许多用来处理字符串的方法,例如,获取字符串长度.对字符串进行截取.将字符串转换为大写或小写.字符串分割等,下面我们就来领略它的强大之处吧. String 类的常用方法: 结合代码 ...
- UVA 557 - Burger(概率 递推)
Burger When Mr. and Mrs. Clinton's twin sons Ben and Bill had their tenth birthday, the party was ...