zoukankan      html  css  js  c++  java
  • Maps Tile 相关计算

    在线地图大部分采用Mercator projection(墨卡托投影),墨卡托投影的等角特性,保证了对象的形状的不变行,正方形的物体投影后不会变为长方形。等角也保证了方向和相互位置的正确性,因此在航海和航空中常常应用,在线地图也利用此特性,在计算人们查询地物的方向时不会出错。但是,等角不可避免的带来的面积的巨大变形,特别是两极地区,但是对我们常规的使用已经足够了。

    但是在线地图大部分不是采用标准的Mercator projection(等角正切),姑且称为Web墨卡托投影。

    X轴:由于赤道半径为6378137米,则赤道周长为2*PI*r = 2*20037508.3427892,因此X轴的取值范围:[-20037508.3427892,20037508.3427892]。

    Y轴:当纬度φ接近两极,即90°时,y值趋向于无穷。这是那些懒惰的工程师就把Y轴的取值范围也限定在[-20037508.3427892,20037508.3427892]之间,搞个正方形。

    因此在投影坐标系(米)下的范围是:最小(-20037508.3427892, -20037508.3427892 )到最大 (20037508.3427892, 20037508.3427892)

    经过反计算,可得到纬度85.05112877980659。因此纬度取值范围是[-85.0511287798065985.05112877980659]

    地理坐标系(经纬度)对应的范围是:最小(-180,-85.05112877980659),最大(180, 85.05112877980659)

    Ground Resolution,地面分辨率,类似Spatial Resolution(空间分辨率),我们这里主要关注用象元(pixel size)表示的形式:一个像素(pixel)代表的地面尺寸(米)。以Virtual Earth为例,Level为1时,图片大小为512*512(4个Tile),那么赤道空间分辨率为:赤道周长/512。其他纬度的空间分辨率则为纬度圈长度/512,极端的北极则为0。Level为2时,赤道的空间分辨率为 赤道周长/1024,其他纬度为 纬度圈长度1024。很明显,Ground Resolution取决于两个参数,缩放级别Level和纬度latitude ,Level决定像素的多少,latitude决定地面距离的长短。地面分辨率的公式为,单位:米/像素:

    ground resolution = (cos(latitude * pi/180) * 2 * pi * 6378137 meters) / (256 * 2level pixels)

    Map Scale,即地图比例尺,图上距离比实地距离,两者单位一般都是米。在Ground Resolution的计算中,由Level可得到图片的像素大小,那么需要把其转换为以米为单位的距离,涉及到DPI(dot per inch),暂时可理解为类似的PPI(pixelper inch),即每英寸代表多少个像素。256 * 2level / DPI 即得到相应的英寸inch,再把英寸inch除以0.0254转换为米。实地距离仍旧是:cos(latitude * pi/180) * 2 * pi * 6378137 meters; 因此比例尺的公式为,一般都化为1:XXX,无单位:

    map scale = 1 : ground resolution * screen dpi / 0.0254 meters/inch

     = 256 * 2level / screen dpi / 0.0254 / (cos(latitude * pi/180) * 2 * pi * 6378137)

    = 1 : (cos(latitude * pi/180) * 2 * pi * 6378137 * screen dpi) / (256 * 2level * 0.0254)

    Quadkeys计算

    比如第三级的(3,5)

    tileX = 3 = 011 2

    tileY = 5 = 101 2

    quadkey = 100111 2 = 2134 = “213”

    下图中的规律自己看,不解释


  • 相关阅读:
    低情商大神的思维,高情商的你会懂么?为什么非常多计算机老师都是坏脾气?为什么提问没人回答?为什么要通过网络自主学习?
    Add Binary
    Codeforces Round #252 (Div. 2) B. Valera and Fruits(模拟)
    cocos2d-x项目101次相遇: Scenes , Director, Layers, Sprites
    Android应用性能优化系列视图篇——隐藏在资源图片中的内存杀手
    Android屏幕信息获取
    android 比较靠谱的图片压缩
    Android 图片压缩,基于比例和质量压缩
    android Bitmap类方法属性 详细说明
    Android入门——Bitmap和BitmapFactory
  • 原文地址:https://www.cnblogs.com/junyuz/p/2009131.html
Copyright © 2011-2022 走看看