地圖投影
                編輯時間:2017-06-03

                投影

                地球是一個三維球體(近似說法),而地圖則是一個二維平面。您在 Google Maps API 中看到的地圖與其他的

                地球平面地圖一樣,都是地球在平面上的投影。簡單來說,投影可定義為緯度/經度值在投影地圖的坐標上的映

                射。

                Google Maps API 中的投影必須實現 Projection 接口。Projection 實現必須能提供坐標系之間的單向映射

                和雙向映射。也就是說,您必須定義地球坐標 (LatLng) 和 Projection 的世界坐標系之間雙向轉換的方法。

                Google Maps 使用墨卡托投影法來根據地理數據創建地圖,并將地圖上的事件轉換為地理坐標。您可以通過

                 Map(或任何標準的基本 MapType)上調用 getProjection() 以獲取該投影。對于大部分用途來說,該標

                 Projection 已經足夠,不過您也可以定義和使用您自己的自定義投影。


                實現投影

                在實現自定義投影時,您需要定義以下內容:

                • 用于實現緯度和經度坐標與笛卡爾平面之間雙向映射的公式。(Projection 接口僅支持向直線坐標的轉換)。


                • 基本圖塊大小。所有圖塊必須為矩形。


                • 縮放級別為 0 且使用基本圖塊集的地圖的“世界大小”。請注意:對于縮放級別為 0 且僅由一個圖塊構

                  成的地圖,其世界大小和基本圖塊大小是相同的。

                投影中的坐標轉換

                每個投影都提供了兩種方法,讓您可以在地理坐標和世界坐標這兩個坐標系之間進行轉換:

                • Projection.fromLatLngToPoint() 方法將 LatLng 值轉換為世界坐標。此方法用于在地圖上定位疊層(同


                • 時定位地圖本身)。


                • Projection.fromPointToLatLng() 方法將世界坐標轉換為 LatLng 值。此方法用于將地圖上發生的事(如



                  點擊)轉換為地理坐標。


                Google Maps 假設投影是直線的。


                    通常,您可以在兩種情況下使用投影:創建世界地圖或創建局部區域地圖。在前一種情況下,您應確保

                投影在所有經度上都為直線且與經度垂直。某些投影(尤其是圓錐投影)可能為“局部垂直”(即指向北方),

                例如,當該地圖定位相對于某些參考經度較遠時就會偏離正北。您可以在局部區域使用此類投影,但請注意,該

                投影肯定是不精確的,且越偏離參考經度,轉換誤差就會越明顯。

                投影中的地圖圖塊選擇

                    投影不僅可用于確定位置或疊層的位置,還可用于定位地圖圖塊本身。Maps API 使用 MapType 接口

                來呈現基本地圖,該接口必須同時聲明 projection 屬性(用于識別地圖的投影)和 getTile() 方法(用于

                根據圖塊坐標值檢索地圖圖塊)。圖塊坐標以您的基本圖塊大小(必須為矩形)和地圖的“世界大小”(縮放級

                別為 0 時的地圖世界的像素大小)為基礎。(對于縮放級別為 0 且僅由一個圖塊構成的地圖,其圖塊大小和世

                界大小是相等的)。

                您可以在 MapType  tileSize 屬性內定義基本圖塊大小。在投影的 fromLatLngToPoint() 

                fromPointToLatLng() 方法中隱式定義世界大小。

                由于需要根據這些傳遞的值選擇圖像,因此,為圖像命名可方便系統基于給定的傳遞值以編程方式選擇圖像,如

                map_zoom_tileX_tileY.png

                常見投影 墨卡托  經緯直投,由于谷歌地圖API本身就是墨卡托投影,所以此處給出加載 經緯直投 方式

                的加載瓦片算法(加載天地圖的經緯直投瓦片)


                function BigeMap() {

                }
                BigeMap.prototype.tileSize = new google.maps.Size(256, 256);
                BigeMap.prototype.maxZoom = 19;
                BigeMap.prototype.minZoom = 1;
                BigeMap.prototype.name = "本地地圖";
                BigeMap.prototype.getTile = function (coord, zoom, ownerDocument) {
                   
                var img = ownerDocument.createElement("img"),url='',server = Math.floor(Math.random() * 8);
                   
                img.style.width = 256 + "px";
                   
                img.style.height = 256 + "px";
                   
                url='http://t' + server + '.tianditu.cn/cva_c/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=cva&tileMatrixSet=c&TileMatrix=' + zoom + '&TileRow=' + coord.y + '&TileCol=' +coord.x + '&style=default&format=tiles';
                   
                img.src=url;
                   
                var bg='http://t' + server + '.tianditu.cn/vec_c/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=vec&tileMatrixSet=c&TileMatrix=' + zoom + '&TileRow=' + coord.y + '&TileCol=' + coord.x + '&style=default&format=tiles';
                   
                img.style.backgroundImage='url('+bg+')';
                   
                return img;
                };

                BigeMap.prototype.projection ={
                   
                fromLatLngToPoint: function(latLng) {
                     
                return new google.maps.Point(
                          256
                * (0.5 + latLng.lng() / 360),
                          128
                *(90 - latLng.lat()) / 180
                          );
                   
                },
                   
                fromPointToLatLng: function(point, noWrap) {
                     
                return new google.maps.LatLng(
                        90
                - point.y / 128  * 180 ,
                       
                -180 + point.x / 256 * 360,
                        noWrap);
                   
                }
                }
                ;



                微信掃碼添加客服
                400-028-7262
                聯系我們
                主站蜘蛛池模板: eeuss影院www在线观看免费| 亚洲成色www久久网站| 久久伊人色综合| 女人与禽牲交少妇| 久久精品国产99国产精品亚洲| 热久久99影院| 国产一级二级在线| 亚洲五月激情网| 欧美重口另类在线播放二区| 国产一国产一级毛片视频在线 | 又黄又粗又爽免费观看| 一本之道在线视频| 最好免费观看韩国+日本| 亚洲精品视频免费看| 舌头伸进去里面吃小豆豆| 好男人官网在线观看免费播放| 亚洲AV无码国产精品色| 爽爽yin人网| 国产特级毛片aaaaaa高清| xxxcom在线观看| 欧美猛交xxxxx| 冲田杏梨在线中文字幕全集| 国产av人人夜夜澡人人爽麻豆| 3d动漫精品一区视频在线观看 | 国产无套内射久久久国产| 99久9在线|免费| 性色AV无码中文AV有码VR| 亚洲欧美国产视频| 精品欧美一区二区在线观看| 国产在线步兵一区二区三区| 一个人看的www免费高清| 欧美亚洲国产激情一区二区| 国产一区在线观看视频| 中文网丁香综合网| 在线观看亚洲网站| 久久精品人人做人人爽电影蜜月 | 喝丰满女医生奶水电影| 麻豆人妻少妇精品无码专区| 国产美女mm131爽爽爽毛片| 一级毛片aa高清免费观看| 无翼乌邪恶工番口番邪恶|