地理信息描述空间位置相关的信息,在空间位置的表达中,需要基于空间参照系来保证数据精度以及不同数据源之间的相互叠加/空间分析操作。自Google Maps与2005年发布以来,电子地图服务与普通民众的日常生活关联日益密切,对于从事GIS行业的人员来说,基于现有地图服务制作相关应用能够达到事半功倍的效果。在本篇文章中主要介绍电子地图数据相关的概念以及构成弟子地图服务基础的Web Mercator投影坐标系的相关内容。

相关概念:

  1. Spacial Reference,空间参考
  2. EPSG,European Petroleum Survey Group (EPSG),该组织负责维护并发布坐标参照系统的数据集参数,以及坐标转换描述
  3. GCS,地理坐标系,椭球体定义,如WGS84坐标系,世界地理坐标系,EPSG 4326,GPS使用该坐标系,以及国内的54,80坐标系,使用经纬度坐标
  4. PCS,投影坐标系,基于GCS椭球体定义的投影方式的定义
  5. Mercator投影,由荷兰人Mercator定义的正轴等角切圆柱投影。Google Maps, Yahoo Maps, Microsoft Maps等网络电子地图服务使用基于该投影坐标系的Web Mercator坐标系, EPSG:900913 或 EPSG:3785,使用像素坐标(单位:像素)或者空间直角坐标(单位:米)
  6. Groud Resolution,地面精度为地图上的像素表达的地面距离,单位为meters per pixcel
  7. Map Scale,地图比例尺为地图距离与地面距离的比值
  8. Tile,瓦片表示网络地图中的最小组成部分
  9. 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
/ \ <-> | | <-> /----/ <-> Google
\ / | | /--------/ 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.

参考:

Bing Maps Tile System

Mercator那些事儿

Global Map Tiles Classes

球面墨卡托(Spherical Mercator)的更多相关文章

  1. 横轴墨卡托 (Transverse Mercator) 投影

    横轴墨卡托 (Transverse Mercator) 投影 描述 此投影又称为高斯-克吕格投影,它与墨卡托投影相似,不同之处在于圆柱是沿经线而非赤道纵向排列.通过这种方法生成的等角投影不会保持真实的 ...

  2. 墨卡托坐标与LBS应用

    今天了解到这边的LBS应用,一般用的是墨卡托坐标. 也就是商品库的商品入库的时候,会根据输入,使用百度地图提供的一个API,来转换成一个墨卡托坐标. 然后用户流量过来的时候,会带来历史坐标,和当前坐标 ...

  3. WGS84与WGS84 Web Mercator

    1. WGS84与WGS84 Web Mercator 1.1 关于WGS1984投影坐标系 UTM (Universal Transverse Mercator)坐标系是由美国军方在1947提出的. ...

  4. 墨卡托投影坐标系(Mercator Projection)原理及实现C代码

    墨卡托投影是一种"等角正切圆柱投影",荷兰地图学家墨卡托(Mercator)在1569年拟定:假设地球被围在一个中空的圆柱里,其赤道与圆柱相接触,然后再假想地球中心有一盏灯,把球面 ...

  5. OpenLayers中的球面墨卡托投影

    最近看OpenLayers,研究到地图投影时找到官方的文档,就翻译了一下,由于英文能力差,翻译不好的地方,请看原文 原文地址:http://docs.openlayers.org/library/sp ...

  6. [转]墨卡托投影坐标系(Mercator Projection)原理及实现C代码

    墨卡托投影是一种“等角正切圆柱投影”,荷兰地图学家墨卡托(Mercator)在1569年拟定:假设地球被围在一个中空的圆柱里,其赤道与圆柱相接触,然后再假想地球中心有一盏灯,把球面上的图形投影到圆柱体 ...

  7. [转]地理投影,常用坐标系详解、WGS84、WGS84 Web墨卡托、WGS84 UTM、北京54坐标系、西安80坐标系、CGCS2000坐标系

    转自:http://www.rivermap.cn/docs/show-1829.html 常用坐标系详解 (一)WGS84坐标系 WGS-84坐标系(World Geodetic System一19 ...

  8. 【GIS】WGS84与Web墨卡托理解(转)

    坐标系 · WGS84,地理坐标系,单位度,在三维上可以很好的展示全球的数据,但在二维上显示时在高纬度地区变形较大,另由于WGS84坐标系与CGCS2000坐标系差异很小,所以WGS84坐标系在Web ...

  9. Web墨卡托投影(转)

    Google Maps地图投影全解析(1):Web墨卡托投影 Google Maps.Virtual Earth等网络地理所使用的地图投影,常被称作Web Mercator或Spherical Mer ...

随机推荐

  1. [liu yanling]软件测试的过程

    测试过程按4个步骤进行,即单元测试.组装测试.确认测试和系统测试.

  2. 关于this的小总结

    关于对this目前有几点小理解 ①this指向调用它的元素.就是谁调用它,它就指向谁. ②可以通过call()和apply()改变this的指向 ③setInterval和setTimeout中的th ...

  3. sqoop的安装和使用

    在sqoop使用前,应先安装好hive和zookeeper,还要在一台虚拟机里安装好mysql 1.先将zookeeper启动:zkServer.sh start,集群启动起来:start-all.s ...

  4. HTML5/CSS3动画应用

    http://www.html5tricks.com/cool-html5-css3-animation.html

  5. oracle rac IP详解

    rac环境下vip/public/private IP的区别 每个节点要2块网卡, 3个IP,虚拟IP或者叫做业务IP,单个网卡当掉可以“漂”到其他网卡是继续提供服务 在Oracle RAC环境下,每 ...

  6. Spring笔记(四)SpingAOP

    需要的Jar包(String3.2) com.springsource.net.sf.cglib-2.2.0.jar // 作用于cglib方式的动态代理 com.springsource.org.a ...

  7. HW5.8

    public class Solution { public static void main(String[] args) { System.out.printf("%s\t%s\t%s\ ...

  8. weblogic启动时日志重定向(nohup.out)

    由于weblogic使用  nohup ./startWebLogic.sh &   启动时会将所有日志打印到nohup.out上,长此以往会导致该文件越来越大,不便于管理. 故下面介绍如何重 ...

  9. MSSQL效率优化随记

    1.尽量不要在where中进行计算,尤其是需要遍历的情况原来代码,执行大约40秒 INSERT INTO @TransferCode ( PROXY_NO, TING_NO, WTotal, BTot ...

  10. MapKit框架使用

    MapKit框架使用 一.地图的基本使用 1.简介 MapKit:用于地图展示,例如大头针/路线/覆盖层展示等(着重界面展示) 使用步骤: 导入主头文件 MapKit/MapKit.h MapKit有 ...