制作自己的电子地图
電子地圖一般可以使用Baidu api等,優(yōu)點(diǎn)功能強(qiáng)大,但缺點(diǎn)是需要連接官方服務(wù)器,且難以定制自己的內(nèi)容.
?現(xiàn)在開發(fā)簡單的電子地圖,不再依賴其他API.
1選擇開發(fā)語言as3?
?
2地圖投影
?
為了電子地圖影像無縫拼接起來,整個(gè)地球必須使用一個(gè)投影.一般選擇墨卡托投影(Mercator projection),下圖:
在墨卡托投影下,比例和面積明顯扭曲了 (特別是在兩極附近的地區(qū)).
為了簡化計(jì)算,我們使用球面投影的形式,而不是橢圓形的形式。由于投影是僅用于地圖顯示,而不是顯示數(shù)字坐標(biāo),我們不需要額外的橢圓投影的精度。使用球面投影的原因大約有0.33%規(guī)模扭曲在Y軸方向,視覺上不明顯
????????????????????????
?
地面分辨率和地圖比例尺
?
除了投影, 渲染地圖還需要地面分辨率或地圖比例尺。最低水平的縮放級別(1級),地圖是512 x 512像素。在每個(gè)連續(xù)的縮放級別,地圖寬度和高度增長的因素2:縮放級別? 2級是1024 x 1024像素,三級為2048 x 2048像素,4級是4096 x 4096像素,等等。一般來說,地圖的寬度和高度(以像素為單位)可以計(jì)算為:
地圖寬度=地圖高度= 256 * 2水平像素
地面分辨率:地圖上一個(gè)像素表示的地面距離。例如,在地面分辨率10米/像素,每個(gè)像素代表一個(gè)地面10米的距離。地面分辨率取決于縮放級別和它的緯度。使用一個(gè)地球半徑6378137米,地面分辨率(米/像素)可以計(jì)算為:
地面分辨率= cos(緯度* pi / 180)*地球周長/地圖寬度
=(cos(緯度* pi / 180)* 2 * pi * 6378137米)/(256 * 2水平像素)
地圖比例尺:在相同的單位下,地圖距離和地面距離之間的比率。例如,地圖比例尺為1:100000,地圖上的每一英寸代表一個(gè)地面100000英寸的距離。類似地面分辨率,地圖比例尺取決于緯度和縮放級別,它可以通過地面分辨率計(jì)算出來,比如給點(diǎn)每英寸的屏幕分辨率,通常96 dpi:
地圖比例尺= 1:地面分辨率*屏幕dpi / 0.0254米/英寸
= 1:(cos(緯度* pi / 180)* 2 * pi * 6378137 *屏幕dpi)/(256 * 2 * 0.0254)
?
下表列出每個(gè)縮放級別(在赤道來衡量)。(注意,地面分辨率和地圖比例尺也取決于緯度,上述方程所示,但不包括下表所示。)
?
| 縮放級別 | 地圖寬度和高度(象素) | 地面分辨率 (米 / 象素) | 地圖比例尺(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 |
?
像素坐標(biāo)
已經(jīng)在每個(gè)縮放級別的細(xì)節(jié)有了投影和比例尺,我們可以將地理坐標(biāo)轉(zhuǎn)換成像素坐標(biāo)。由于地圖寬度和高度是在不同的縮放級別,像素坐標(biāo)也是如此。像素在地圖的左上角像素坐標(biāo)總是 (0,0)。像素在地圖右下角的像素坐標(biāo)是(width-1 height-1),或在前面的小節(jié)方程(256 * 2level–1, 256 * 2level–1)。例如,在3級,像素坐標(biāo)范圍從(0,0)到(2047、2047),如下:
?
有了經(jīng)度,緯度和縮放級別,像素XY坐標(biāo)可以如下計(jì)算:
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
緯度和經(jīng)度使用WGS 84坐標(biāo)系。雖然地圖使用球面投影,重要的是將所有的地理坐標(biāo)轉(zhuǎn)換成一個(gè)共同的坐標(biāo)系,都轉(zhuǎn)成WGS 84坐標(biāo)系。假設(shè)經(jīng)度范圍從-180 到 180度,緯度范圍必須裁剪,從-85.05112878到85.05112878。 這避免了在兩極出現(xiàn)異常,使投影地圖為矩形。
?
Tile坐標(biāo)和Quadkeys
為優(yōu)化地圖的檢索和顯示性能,地圖每Tile被分割成256 x 256像素的塊。像素的數(shù)量在每個(gè)縮放級別下都不同,瓷磚的數(shù)量:
地圖寬度=地圖高度= 2 level tiles
每個(gè)Tile的XY坐標(biāo)系范圍從左上角(0,0),到右下角(2level–1, 2level–1)。例如,在第三級的Tile坐標(biāo)范圍從(0,0)到(7,7)如下:
?
給出一對像素XY坐標(biāo),可以很容易地確定TileY坐標(biāo):
tileX = floor(pixelX / 256)
tileY = floor(pixelY / 256)
為了優(yōu)化Tiles的索引和存儲, 組合二維TileXY坐標(biāo)系進(jìn)入一維的字符串被稱為四叉樹Key,或簡稱為“quadkeys”。在每個(gè)縮放級別,每個(gè)quadkey唯一標(biāo)識一個(gè)tile。給定一個(gè)在縮放級別為3級的TileXY坐標(biāo)系(3,5),quadkey確定如下:
tileX = 3 = 011 2
tileY = 5 = 101 2
quadkey = 100111 2 = 213 4 = " 213 "
?
?
3,下載地圖數(shù)據(jù)
測試數(shù)據(jù)可從google地圖下載。
?
4、顯示結(jié)果如下
5,應(yīng)用顯示GPS坐標(biāo)
導(dǎo)入地名坐標(biāo)數(shù)據(jù)入庫,建webservice,查詢結(jié)果如下
?
?
?
6,應(yīng)用,地形圖劃分,瀏覽。
?
總結(jié)
- 上一篇: 欧瑞变频器故障码表_尼得科变频器故障代码
- 下一篇: IBHLink S7++ 模块 AEG