地图瓦片相关学习总结
生活随笔
收集整理的這篇文章主要介紹了
地图瓦片相关学习总结
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
瓦片地圖
瓦片地圖金字塔模型是一種多分辨率層次模型,從瓦片金字塔的底層到頂層,分辨率越來越低,但表示
的地理范圍不變。
中文名 瓦片地圖 模 ? ?型層次模型 軟 ? ?件ArcGIS軟件 發(fā) ? ?展 瓦片技術(shù)
目錄
1 原理
2 發(fā)展
原理
首先確定地圖服務(wù)平臺所要提供的縮放級別的數(shù)量N,把縮放級別最低、地圖比例尺最大的地圖圖片作為
金字塔的底層,即第0層,并對其進行分塊,從地圖圖片的左上角開始,從左至右、從上到下進行切割,
分割成相同大小(比如256x256像素)的正方形地圖瓦片,形成第0層瓦片矩陣;在第0層地圖圖片的基礎(chǔ)上
,按每2x2像素合成為一個像素的方法生成第1層地圖圖片,并對其進行分塊,分割成與下一層相同大小
的正方形地圖瓦片,形成第1層瓦片矩陣;采用同樣的方法生成第2層瓦片矩陣;…;如此下去,直到第N一1
層,構(gòu)成整個瓦片金字塔。
首先用(如ArcGIS軟件等)對地圖數(shù)據(jù)進行處理,配成需要的圖層方案,并保存方案。
再用軟件自帶功能進行切片,切片過程中選擇切片方案,根據(jù)所選方案不同,例如金字塔級別不同,地
圖切片范圍不同等,都會影響到切片的速度。切片之后的數(shù)據(jù)稱為瓦片。
發(fā)展
現(xiàn)在越來越多的地圖服務(wù)用到瓦片技術(shù),例如現(xiàn)在我國實行發(fā)布的天地圖服務(wù)就運用了地圖瓦片技術(shù)。
其實切片之后的地圖瓦片是柵格圖像,并不具備定位信息,不過切片運用了相關(guān)切片算法之后,可以計
算出具體定位的位置。例如采用WGS84大地坐標(biāo)系為空間參考,對地圖進行切片,采用一定的切片算法,
例如用經(jīng)緯度步長等比例分割形成地圖瓦片,當(dāng)需要對一個具體地方進行定位時,可以根據(jù)經(jīng)緯度步長
來計算具體位置,以此來達(dá)到定位的功能。
========
柵格圖像
柵格圖像,也稱光柵圖像、柵格圖形,是指在空間和亮度上都已經(jīng)離散化了的圖像。
中文名 柵格圖像 也 ? ?稱光柵圖像、柵格圖形 指 空間和亮度上都已經(jīng)離散化的圖像 拼 ? ?音?
shangetuxiang
目錄
1 概要
2 柵格圖形文件
3 格式分析(BMP)
4 格式分析(JPEG)
概要
我們可以把一幅柵格圖像考慮為一個矩陣,矩陣中的任一元素對應(yīng)于圖像中的一個點,而相應(yīng)的值對應(yīng)
于該點的灰度級,數(shù)字矩陣中的元素叫做像素。數(shù)字圖像與馬賽克拼圖相似,是由一系列像素組成的矩
形圖案,如果所有的像素有且僅有兩個灰度級(黑或白),則稱其為二值圖像,也即位圖;
柵格圖形文件編輯
指一種以像素或是點的方式進行描述并能獨立用于繪圖或顯示的圖形文件,其特點是所有有關(guān)繪圖的數(shù)
據(jù),包括圖例、文字等,都已包含在該電子文件中。
格式分析(BMP)
BMP文件格式:
BMP(Bitmap-File)圖形文件是Windows采用的圖形文件格式,在Windows環(huán)境下運行的所有圖象處理軟件
都支持BMP圖象文件格式。Windows系統(tǒng)內(nèi)部各圖像繪制操作都是以BMP為基礎(chǔ)的。Windows 3.0以前的BMP
圖文件格式與顯示設(shè)備有關(guān),因此把這種BMP圖象文件格式稱為設(shè)備相關(guān)位圖DDB(device-dependent?
bitmap)文件格式。Windows 3.0以后的BMP圖象文件與顯示設(shè)備無關(guān),因此把這種BMP圖象文件格式稱為
設(shè)備無關(guān)位圖DIB(device-independent bitmap)格式(注:Windows 3.0以后,在系統(tǒng)中仍然存在DDB位
圖,象BitBlt()這種函數(shù)就是基于DDB位圖的,只不過如果你想將圖像以BMP格式保存到磁盤文件中時,
微軟極力推薦你以DIB格式保存),目的是為了讓W(xué)indows能夠在任何類型的顯示設(shè)備上顯示所存儲的圖
象。BMP位圖文件默認(rèn)的文件擴展名是BMP或者bmp(有時它也會以.DIB或.RLE作擴展名)。
格式分析(JPEG)
JPEG文件格式:
JPEG文件的格式是分為一個一個的段來存儲的(但并不是全部都是段),段的多少和長度并不是一定的
。只要包含了足夠的信息,該JPEG文件就能夠被打開,呈現(xiàn)給人們。JPEG文件的每個段都一定包含兩部
分一個是段的標(biāo)識,它由兩個字節(jié)構(gòu)成:第一個字節(jié)是十六進制0xFF,第二個字節(jié)對于不同的段,這個
值是不同的。緊接著的兩個字節(jié)存放的是這個段的長度(除了前面的兩個字節(jié)0xFF和0xXX,X表示不確定
。他們是不算到段的長度中的)。注意:這個長度的表示方法是按照高位在前,低位在后的,與Intel的
表示方法不同。比方說一個段的長度是0x12AB,那么它會按照0x12,0xAB的順序存儲。但是如果按照
Intel的方式:高位在后,低位在前的方式會存儲成0xAB,0x12,而這樣的存儲方法對于JPEG是不對的。
這樣的話如果一個程序不認(rèn)識JPEG文件某個段,它就可以讀取后兩個字節(jié),得到這個段的長度,并跳過
忽略它。
========
?Google瓦片地圖算法解析
概述:主要是闡述如何將瓦片地圖圖片拼接成完整地圖的一些概念以及相關(guān)算法。
基本概念:
地圖瓦片地址:http://mt2.google.cn/vt/lyrs=m@167000000&hl=zh-
CN&gl=cn&x=420&y=193&z=9&s=Galil
瓦片圖片
現(xiàn)在就是要將一張張這類的地圖瓦片,在客戶端拼接成一幅完整的地圖。
瓦片大小為:256x256。
url中關(guān)鍵參數(shù)解析:
參數(shù) 描述
mt2.google.cn Google瓦片服務(wù)服務(wù)器,可以嘗試mt1.google.cn依然有效。Google提供多臺瓦片服務(wù)
器,減輕服務(wù)器負(fù)載,提高網(wǎng)絡(luò)訪問效率。
x 瓦片的橫向索引,起始位置為最左邊,數(shù)值為0,向右+1遞增。
y 瓦片的縱向索引,起始位置為最上面,數(shù)值為0,向下+1遞增。
z 地圖的級別,以Google為例,最上一級為0,向下依次遞增。
地圖投影:Web墨卡托——互聯(lián)網(wǎng)地圖通用的地圖投影方式,將橢圓形地圖投影成平面上的正文形,欲了
解詳情請baidu之,如無特殊說明本文所指均為Web墨卡托投影下。
Bounds(地圖范圍):[ -20037508.3427892, -20037508.3427892, 20037508.3427892,?
20037508.3427892],單位為米,20037508.3427892表示地圖周長的一半,以地圖中心點做為(0,0)坐
標(biāo)。
Levels:地圖的級別,例如:0……22。
Resolutions:分辨率數(shù)組,與級別相對應(yīng),即一個級別對應(yīng)一個分辨率,分辨率表示當(dāng)前級別下單個像
素代表的地理長度。
Resolutions[n] = 20037508.3427892 * 2 / 256 / (2^n)
Center:地圖顯示中心點。
Level:地圖顯示級別。
viewSize:地圖控件窗口的大小。
根據(jù)已知地圖中心點、顯示級別可以將地圖顯示范圍計算出來:
viewBounds = [Center.x - Resolutions[l]*viewSize.width/2, Center.y - Resolutions[l]
*viewSize.height/2, Center.x + Resolutions[l].viewSize.width/w, Center.y + Resolutions
[l].viewSize.height/h]
地圖切圖方式:
一幅地圖由4^n個256的正方形組成,n為級別
例如:第0級為4^0個,即世界地圖由一個256圖片表示。
第1級世界地圖應(yīng)由4^1(4)個256圖片組成,也就是將世界地圖(上一級的單個圖片)等分成4
塊256圖片。
往下每一級依此類推……
?
拼圖算法剖析:
1、計算瓦片url
要想出圖就發(fā)須知道地圖控件可視范圍起始點瓦片索引、末尾瓦片索引,中間區(qū)域的瓦片索引循環(huán)
遍歷即可得出。
下面看看如果計算出起始點、末尾瓦片url索引:
已知:l(縮放級別)、bounds(地圖范圍——[ -20037508.3427892, -20037508.3427892,?
20037508.3427892, 20037508.3427892])、viewBounds(地圖控件可視范圍)、分辨率(Resolutions[l]
)、瓦片像素寬高(256)。
未知:startX(視圖起始瓦片X方向索引)、startY(視圖起始瓦片Y方向索引)、endX(視圖
未尾瓦片x方向索引)、endY(視圖未尾瓦片y方向索引)。
求解:
startX = floor(((viewBounds.leftBottom.x - bounds.leftBottom.x) / Resolutions[l]) / 256);
startY = floor(((viewBounds.leftBottom.y - bounds.leftBottom.y) / Resolutions[l]) / 256);
endX = floor(((viewBounds.rightTop.x - bounds.rightTop.x) / Resolutions[l]) / 256);
endY = floor(((viewBounds.rightTop.y - bounds.rightTop.y) / Resolutions[l]) / 256);
firstTileUrl(起始瓦片Url) = http://**********?x=startX&y=startY&z=l;
endTileUrl(末尾瓦片Url) = http://**********?x=endX&y=startY&z=l;
中間部分的url循環(huán)遍歷即可得出。
好啦!組成視圖所有瓦片的url都已得出。下面就是要解決將這些瓦片放到哪的問題。
2、計算瓦片放在地圖控件上的位置
先分析一下:其實只要將起始位置的瓦片像素位置算出來就可以了,由于瓦片像素大小為256,后面
的各瓦片位置也就明了了。
所以這里只探討一下起始瓦片的像素位置。
已知:startX(視圖起始瓦片X方向索引)、startY(視圖起始瓦片Y方向索引)、分辨率
(Resolutions[l])、瓦片像素寬高(256)、bounds(地圖范圍——[ -20037508.3427892, -
20037508.3427892, 20037508.3427892, 20037508.3427892])、viewBounds(地圖控件可視范圍)。
未知:startTileX(起始瓦片左上角X方向地理坐標(biāo))、startTileY(起始瓦片左上角Y方向地
理坐標(biāo))、distanceX(瓦片左邊與地圖控件左邊相距的像素距離)、distanceY(瓦片上邊與地圖控件
上邊相距的像素距離)。
求解:
startTileX = bounds.leftBottom.x + (startX * 256 * Resolutions[l]);
startTileY = bounds.rightTop.y - (startY * 256 * Resolutions[l]);
distanceX = (viewBounds.leftBottom.x - startTileX) / Resolutions[l];
distanceY = (startTileY - viewBounds.rightTop.y) / Resolutions[l]
公式不是最簡,以方便理解,相信看官此時已經(jīng)知道起始瓦片在地圖控件中的擺放位置了——設(shè)地
圖控件起始像素位置為(0,0),那么此瓦片的像素的位置就是(-distanceX、-distanceY)。其它瓦
片依據(jù)256像素寬高的關(guān)系依次而出。
到此已經(jīng)算出了各瓦片的url以及它們應(yīng)該擺放的位置,準(zhǔn)備工作已完成,直接帖圖即可完成出圖工作。
算法可應(yīng)用于Google、Baidu、Yahoo、Bing等web墨卡托投影的地圖瓦片。
原文出處:http://www.cnblogs.com/ninemilli/archive/2011/12/26/2289285.html
========
騰訊與百度地圖瓦片規(guī)則分析
目錄(?)[+]
1.騰訊地圖瓦片與Google地圖瓦片區(qū)別和聯(lián)系
1)騰訊地圖瓦片與Google的地圖瓦片切割方法相同,只不過騰訊地圖瓦片完全遵循TMS標(biāo)準(zhǔn),Google地
圖瓦片則是TMS的一種變種。
2)地圖投影坐標(biāo)系均采用Web Mercator投影,地圖瓦片分辨率也完全一致。
3)騰訊地圖瓦片的坐標(biāo)原點在左下角【-85.05112877980659,-180】,Google 地圖瓦片的坐標(biāo)原點在左
上角【85.05112877980659,-180】。
4)騰訊瓦片的最小縮放級別為4級,通過與騰訊低級別瓦片地址的對比分析,得出其ULR地址與xyz參數(shù)
的對應(yīng)關(guān)系如下:
騰訊瓦片計算方法:URL = z ?/ ?Math.Floor(x / 16.0) ?/ Math.Floor(y / 16.0) / x_y.png,其中
x,y,z為TMS瓦片坐標(biāo)參數(shù)。
5)與Google瓦片坐標(biāo)的關(guān)系,上式中騰訊地圖瓦片坐標(biāo)的x,z與Google 瓦片坐標(biāo)系的X 、Z是相等的,Y?
的轉(zhuǎn)換關(guān)系為:Y(Tencent) + ?Y(Google) = Math.pow(2,zoom) - 1
6)為了保密,騰訊地圖與Google地圖在大陸地區(qū)均進行了偏移處理,采用的是國家火星坐標(biāo)系GCJ-02。
注:瓦片解析方法參考以前的博文:Google 地圖切片URL地址解析。
2.騰訊與Google地圖瓦片轉(zhuǎn)換實例:
Google瓦片: http://mt2.google.cn/vt/lyrs=m@258000000&hl=zh-
CN&gl=CN&src=app&x=214130&y=114212&z=18&s=Ga
騰訊瓦片:http://p3.map.gtimg.com/maptilesv2/18/13383/9245/214130_147931.png?
version=20130701
下面示例中 xyz為Google瓦片地圖的參數(shù)。
[csharp] view plain copy 在CODE上查看代碼片派生到我的代碼片
int x = 214130; ?
int y = 114212; ?
int z = 18; ?
y = int.Parse( Math.Pow(2, z).ToString()) - 1 - y; ?
string url = z.ToString() + "/" + Math.Floor(x / 16.0).ToString() + "/" ??
? ? + Math.Floor(y / 16.0).ToString() ?+ "/" + x.ToString() + "_" ??
? ? + y.ToString() + ".png"; //計算結(jié)果:18/13383/9245/214130_147931.png ?
3.百度地圖坐標(biāo)系統(tǒng)及地圖瓦片分辨率
1)百度地圖坐標(biāo)系統(tǒng)解析:http://www.cnblogs.com/jz1108/archive/2011/07/02/2095376.html
2)百度地圖瓦片分辨率與比例尺:http://hi.baidu.com/chuansl/item/5e646bc2cad418334494161d
18級,1個像素代表1米,17級,1個像素代表2米,16級代表4米,依此類推。
3)百度地圖地圖投影采用的依然是Web Mercator投影,地圖瓦片的切片規(guī)則遵循TMS標(biāo)準(zhǔn),瓦片坐標(biāo)原
點在經(jīng)緯度為0的附近,但卻做了一定的偏移處理,經(jīng)測算深圳地區(qū)的偏移量約為(-865,15850),即
地圖瓦片(0, 0)是從Web Mercator投影坐標(biāo)系的(-865,15850)點開始的。
4)為了保密,百度地圖做了偏移處理,使用的是百度的BD-09坐標(biāo)系,在國家要求的火星坐標(biāo)系GCJ-02
上做了進一步的處理,因此GPS經(jīng)緯度定位會出現(xiàn)偏移。
4.地圖分辨率、比例尺及像素PPI之間的關(guān)系
比例尺,通常以比率(如 1:10000 )來表示,表示圖上距離與實地距離之比。例如 1:10000 表示圖上?
1cm 代表實際距離 10000cm,即100米。 由于比例尺起源較早,通常用(紙質(zhì))圖上的距離衡量實際距
離;而分辨率則通常用設(shè)備屏幕上的距離來衡量實際距離。而同一個地圖視圖,尺度是唯一的,比例尺
和分辨率只不過是兩種表示方法,因此它們是一一對應(yīng)的。 比例尺與分辨率之間的換算公式如下:
Scale:地圖比例尺;Resolution:地圖分辨率;PPI:每英寸的像素點數(shù)。
其中 PPI,即 Pixel per Inch,即每英寸的像素點數(shù)(在不混淆情況下,也有用 DPI 來表示該參數(shù))
。0.0254 為英寸和米的轉(zhuǎn)換常數(shù)。
參考:分辨率與比例尺
5.總結(jié)
騰訊、百度、Google的地圖投影均采用Web Mercator 投影坐標(biāo)系;騰訊與Google的地圖瓦片分辨率及切
片范圍是完全相同的,僅僅是命名規(guī)則稍有不同,這就使得同一位置和縮放級別的地圖瓦片是完全可以
重疊的;而百度地圖每個縮放級別分辨率與前兩者均不相同,而且地圖瓦片的坐標(biāo)原點做了一定的偏移
,導(dǎo)致百度地圖與前兩者的瓦片是無法重疊的,這是因為百度在GCJ-02的基礎(chǔ)上又進行了加密處理,形
成了百度獨有的BD-09坐標(biāo)系。
6.應(yīng)用
網(wǎng)絡(luò)地圖基本采用的是同一投影(Web Mercator),依據(jù)地圖瓦片索引算法可以對不同來源的地圖進行
Mushup應(yīng)用,綜合坐標(biāo)轉(zhuǎn)換可與地方坐標(biāo)系很好的匹配。以下是在ArcGIS中匹配地方坐標(biāo)系的應(yīng)用效果
。
應(yīng)用參考:開源項目ArcBruTile 和BruTile。
ArcBruTile display basemaps from OpenStreetMap, Bing, MapQuest, CloudMade, Mapbox, Stamen?
Design, PDOK (NL), National Park Service (US), Waag Society (NL) and others in ArcGIS?
Desktop 10.0/10.1/10.2.
BruTile is a C# open source library to access tile services like OpenStreetMap and Bing.?
BruTile has few dependencies, is platform independent and has a limited scope. It is?
intended for reuse by other more sophisticated libraries
ArcBruTile is based on the generic tiling library BruTile. For other viewers based on?
BruTile library ?see theMapsui project (Silverlight, WPF, Pixelsense, Windows Phone,?
Windows 8).
========
總結(jié)
以上是生活随笔為你收集整理的地图瓦片相关学习总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# SharpMap 学习总结
- 下一篇: 资源文件相关学习总结