電子地圖一般可以使用Baidu api等其他的API來制作,優點功能強大,但缺點是需要連接官方服務器,且難以定制自己的內容.
現制作簡單的電子地圖,不用依賴其他API,而且方便自己擴展,流程如下:
1選擇開發語言as3
2地圖投影
為了電子地圖影像無縫拼接起來,整個地球必須使用一個投影.一般選擇墨卡托投影(Mercator projection),下圖:

在墨卡托投影下,比例和面積明顯扭曲了 (特別是在兩極附近的地區).
為了簡化計算,我們使用球面投影的形式,而不是橢圓形的形式。由於投影是僅用於地圖顯示,而不是顯示數字坐標,我們不需要額外的橢圓投影的精度。使用球面投影的原因大約有0.33%規模扭曲在Y軸方向,視覺上不明顯
地面分辨率和地圖比例尺
除了投影, 渲染地圖還需要地面分辨率或地圖比例尺。最低水平的縮放級別(1級),地圖是512 x 512像素。在每個連續的縮放級別,地圖寬度和高度增長的因素2:縮放級別 2級是1024 x 1024像素,三級為2048 x 2048像素,4級是4096 x 4096像素,等等。一般來說,地圖的寬度和高度(以像素為單位)可以計算為:
地圖寬度=地圖高度= 256 * 2水平像素
地面分辨率:地圖上一個像素表示的地面距離。例如,在地面分辨率10米/像素,每個像素代表一個地面10米的距離。地面分辨率取決於縮放級別和它的緯度。使用一個地球半徑6378137米,地面分辨率(米/像素)可以計算為:
地面分辨率= cos(緯度* pi / 180)*地球周長/地圖寬度
=(cos(緯度* pi / 180)* 2 * pi * 6378137米)/(256 * 2水平像素)
地圖比例尺:在相同的單位下,地圖距離和地面距離之間的比率。例如,地圖比例尺為1:100000,地圖上的每一英寸代表一個地面100000英寸的距離。類似地面分辨率,地圖比例尺取決於緯度和縮放級別,它可以通過地面分辨率計算出來,比如給點每英寸的屏幕分辨率,通常96 dpi:
地圖比例尺= 1:地面分辨率*屏幕dpi / 0.0254米/英寸
= 1:(cos(緯度* pi / 180)* 2 * pi * 6378137 *屏幕dpi)/(256 * 2 * 0.0254)
下表列出每個縮放級別(在赤道來衡量)。(注意,地面分辨率和地圖比例尺也取決於緯度,上述方程所示,但不包括下表所示。)
| 縮放級別 |
地圖寬度和高度(象素) |
地面分辨率 (米 / 象素) |
地圖比例尺(96 dpi) |
| 1 |
512 |
78,271.5170 |
1 : 295,829,355.45 |
| 2 |
1,024 |
39,135.7585 |
1 : 147,914,677.73 |
| 3 |
2,048 |
19,567.8792 |
1 : 73,957,338.86 |
| 4 |
4,096 |
9,783.9396 |
1 : 36,978,669.43 |
| 5 |
8,192 |
4,891.9698 |
1 : 18,489,334.72 |
| 6 |
16,384 |
2,445.9849 |
1 : 9,244,667.36 |
| 7 |
32,768 |
1,222.9925 |
1 : 4,622,333.68 |
| 8 |
65,536 |
611.4962 |
1 : 2,311,166.84 |
| 9 |
131,072 |
305.7481 |
1 : 1,155,583.42 |
| 10 |
262,144 |
152.8741 |
1 : 577,791.71 |
| 11 |
524,288 |
76.4370 |
1 : 288,895.85 |
| 12 |
1,048,576 |
38.2185 |
1 : 144,447.93 |
| 13 |
2,097,152 |
19.1093 |
1 : 72,223.96 |
| 14 |
4,194,304 |
9.5546 |
1 : 36,111.98 |
| 15 |
8,388,608 |
4.7773 |
1 : 18,055.99 |
| 16 |
16,777,216 |
2.3887 |
1 : 9,028.00 |
| 17 |
33,554,432 |
1.1943 |
1 : 4,514.00 |
| 18 |
67,108,864 |
0.5972 |
1 : 2,257.00 |
| 19 |
134,217,728 |
0.2986 |
1 : 1,128.50 |
| 20 |
268,435,456 |
0.1493 |
1 : 564.25 |
| 21 |
536,870,912 |
0.0746 |
1 : 282.12 |
| 22 |
1,073,741,824 |
0.0373 |
1 : 141.06 |
| 23 |
2,147,483,648 |
0.0187 |
1 : 70.53 |
像素坐標
已經在每個縮放級別的細節有了投影和比例尺,我們可以將地理坐標轉換成像素坐標。由於地圖寬度和高度是在不同的縮放級別,像素坐標也是如此。像素在地圖的左上角像素坐標總是 (0,0)。像素在地圖右下角的像素坐標是(width-1 height-1),或在前面的小節方程(256 * 2level–1, 256 * 2level–1)。例如,在3級,像素坐標范圍從(0,0)到(2047、2047),如下:

有了經度,緯度和縮放級別,像素XY坐標可以如下計算:
sinLatitude = sin(latitude * pi/180)
pixelX = ((longitude + 180) / 360) * 256 * 2 level
pixelY = (0.5 – log((1 + sinLatitude) / (1 – sinLatitude)) / (4 * pi)) * 256 * 2 level
緯度和經度使用WGS 84坐標系。雖然地圖使用球面投影,重要的是將所有的地理坐標轉換成一個共同的坐標系,都轉成WGS 84坐標系。假設經度范圍從-180 到 180度,緯度范圍必須裁剪,從-85.05112878到85.05112878。 這避免了在兩極出現異常,使投影地圖為矩形。
Tile坐標和Quadkeys
為優化地圖的檢索和顯示性能,地圖每Tile被分割成256 x 256像素的塊。像素的數量在每個縮放級別下都不同,瓷磚的數量:
地圖寬度=地圖高度= 2 level tiles
每個Tile的XY坐標系范圍從左上角(0,0),到右下角(2level–1, 2level–1)。例如,在第三級的Tile坐標范圍從(0,0)到(7,7)如下:

給出一對像素XY坐標,可以很容易地確定TileY坐標:
tileX = floor(pixelX / 256)
tileY = floor(pixelY / 256)
為了優化Tiles的索引和存儲, 組合二維TileXY坐標系進入一維的字符串被稱為四叉樹Key,或簡稱為“quadkeys”。在每個縮放級別,每個quadkey唯一標識一個tile。給定一個在縮放級別為3級的TileXY坐標系(3,5),quadkey確定如下:
tileX = 3 = 011 2
tileY = 5 = 101 2
quadkey = 100111 2 = 213 4 = " 213 "

3,下載地圖數據
測試數據可從google地圖下載。
4、顯示結果如下

5,應用顯示GPS坐標
導入地名坐標數據入庫,建webservice,查詢結果如下

6,應用,地形圖划分,瀏覽。

