之前一直想使用HTML5技術全新做一套地圖API,可是苦於時間和精力,遲遲未有行動。后來下定決心,利用下班和周末做出一個大體框架出來,現在和網友分享一下自己的整體的一個思路和想法。歡迎大家提出寶貴建議,希望把這套API做的更好,有人真正利用起來。DEMO訪問地址, 猛擊這里。
| 數據 |
我們看到的電子地圖是多個圖層疊加之后的效果,每一個圖層都至少對應着一個地圖服務。我們這樣可以理解服務,我們把簡單的參數傳給后台,后台會把原始數據返回來,前端或者應用就可以根據自己需要,渲染成圖。
這里返回的數據,不僅僅是矢量數據,也包括柵格數據。
矢量數據,包括那些點線面的具體坐標、投影或者坐標系。矢量數據使用場景:數據經常更新,需要知道數據屬性或坐標。
柵格數據,提前生成好的圖片或者動態生成的圖片。柵格數據使用場景:底圖,計算量較大的渲染圖。
一般來說,一個地圖,最下面是一個底圖,然后在上面疊加一些矢量數據和柵格數據。底圖主要是為了在當前比例尺下顯示大概地形要素。底圖變動周期比較長,數據量比較大,不適合使用矢量數據加載。現在通用的做法,將地圖分割成一個個的小圖片,然后等到使用的時候拼接起來。我們可以想象一下,之前的屋頂上面的瓦,是怎么一個形態?是不是一個一個拼接成的,然后形成屋頂的,沒有誰家的瓦,是一個整體吧。這樣做的好處主要有這么幾個:
1:可以動態拼接某一范圍的底圖。
2:可以局部更新瓦片。
| 坐標系 |
坐標系分為投影坐標系和地理坐標系,不多說這個了,因為關於這方面的知識實在是太多了,我對這個不是太擅長,只是說一下常見的就可以了。
地理坐標系,是以經緯度為地圖的存儲單位的。
投影坐標系參數當中都會包括一個地理坐標系,實質上是一個平面坐標系統,單位通常是米。
WGS84,是為GPS全球定位系統使用而站立的坐標系統,屬於地理坐標系。GPS采集到的數據,都是基於WGS84。中國現在使用較多的是西安80或者北京2000,這就需要一個轉換過程,不過具體參數是保密,現在轉換的工具或者公式,轉換都會存在誤差的,也就會經常看到一些數據疊加發生了偏移錯位(當然不僅僅是因為這一個原因,國內的數據發布到網絡上面,都要求做偏移處理的)。WGS84東西方向范圍[-180,180],南北方向范圍[-90,90]。由於坐標系和投影實在是太多而且名字加參數太長,不容易記,所以就給每一種坐標系定義了一個或多個序列號,WGS84他的wkid是4326。
Web Mercator屬於投影坐標系,這是一個正軸等角投影,投影出來之后呈現給我們的是一個正方形。我們都知道地球是一個橢球形,這樣肯定會有誤差,在大比例尺下面,就可以忽略這個誤差了。不過話說回來,無論使用哪一種坐標系都會有誤差的。等角投影,保證了對象形狀不變,而且也保證了方向和位置的相對性性。這就是在眾多的投影當中,我們為什么會選中它的原因(當然不是我選擇的,基本上互聯網公司底圖都是使用這種投影)。三個wkid代表它3857、102100、102133,用的最多的還是102100。東西和南北方向范圍都是[-20037508.3427892,20037508.3427892]
下面一節是主要是講述以谷歌和微軟Bing Maps為例,探討瓦片是如何計算的。
