zoukankan      html  css  js  c++  java
  • google map是怎样工作的

    Google Map 怎样工作

    这是我对google map工作的一个分析,特别是地图卫片怎样被编码.google map 用简单的url预载入卫片的方式获得。这篇文章解释怎样建立从它们的地理坐标(经纬度)来建立url

     

    地图卫片编码

    1) Google Map 用两个不同的算法来编码卫片们的定位。

     

    比如说,有这么一个url http://mt1.google.com/mt?n=404&v=w2.12&x=130&y=93&zoom=9,其中X, Y坐标,和一个比例因素。比例因素从最大的17到最小的0。在zoom=17,整个地球在一个卫片中,在zoom=16,地球被卫成2*2……以此类推,每一级比例使卫片多分为4片,所以在z比例因素中,水平和垂直的卫片数目为2^(17-z).

     

    算法:从经纬度和一个比例因素中查找一个卫片坐标

    latitude=90-latitude;

    longitude=180+longitude;

    double latTileSize=180/(pow(2,(17-zoom)));

    double longTileSize=360/(pow(2,(17-zoom)));

    int tilex=(int)(longitude/longTileSize);

    int tiley=(int)(latitude/latTileSize);

    事实上,这个算法理论上是覆盖整个地区位置的但并不匹配整个地球。

     

    服务:

    Google用了4个服务来平衡加载,它们是m1,m2,m3,m4

    卫片大小:

    每个卫片是一个256*256png格式图片.

     

    2) 对于卫星图片,编码有些不同。

    象这样的链接:http://kh0.google.com/kh?n=404&v=8&t=trtqtt ’t’参数编码图片定位。参数的长度指定一个zoom水平。

    要看整个地球,用’t=t’,这给单一的卫片代表地球。在下一个zoom水平,这个卫片北分成4个象限,按顺时针方向: ‘q’ ‘r’ ‘s’ ‘t’。看其中一个象限,增加一个字母在你所能看到的图象上。例如:’t=tq’,给’t’图象的左上象限。

     

    算法:从经纬度和一个比例因素中查找一个卫片坐标

    double xmin=-180;

    double xmax=180;

    double ymin=-90;

    double ymax=90;

    double xmid=0;

    double ymid=0;

     

    string location="t";

    double halflat = latitude / 2;

    for (int i = 0; i < zoom; i++)

        {

            xmoy = (xmax + xmin) / 2;

            ymoy = (ymax + ymin) / 2;

            if (halflat > ymoy) //upper part (q or r)

                {

                ymin = ymoy;

                if (longitude < xmoy)

                { /*q*/

                    location+= "q";

                    xmax = xmoy;

                }

                else

                {/*r*/

                    location+= "r";

                    xmin = xmoy;

                }

            }

            else //lower part (t or s)

            {

                ymax = ymoy;

                if (longitude < xmoy)

                { /*t*/

                    location+= "t";

                    xmax = xmoy;

                }

                else

                {/*s*/

                    location+= "s";

                    xmin = xmoy;

                }

            }

        }

    和前面一样,这个算法理论上是覆盖整个地区位置的但并不匹配整个地球。

    服务:

    Google用了4个服务来平衡加载,它们是kh0, kh1, kh2 and kh3

    卫片大小:

    每个卫片是一个256*256jpg格式图片

     

    例子:

    http://kh0.google.com/kh?n=404&v=8&t=t

     

    并且四个象限加载 :

    • http://kh0.google.com/kh?n=404&v=8&t=tq
    • http://kh1.google.com/kh?n=404&v=8&t=tr
    • http://kh2.google.com/kh?n=404&v=8&t=ts
    • http://kh3.google.com/kh?n=404&v=8&t=tt

      
        

  • 相关阅读:
    Error Domain=com.google.greenhouse Code=-102
    给分类(Category)添加属性
    Eclipse 4.4(luna) 安装Veloeclipse 2.0.8时报错的问题
    MAVEN常用命令
    Redis之七种武器
    Redis系统性介绍
    Nginx、LVS及HAProxy负载均衡软件的优缺点详解
    Redis介绍以及安装(Linux)
    MYSQL + MHA +keepalive + VIP安装配置(三)--keepalived安装配置
    MYSQL + MHA +keepalive + VIP安装配置(二)--MHA的配置
  • 原文地址:https://www.cnblogs.com/liping13599168/p/654002.html
Copyright © 2011-2022 走看看