如何開發自己的電子地圖系統 web版 單機或聯網


電子地圖一般可以使用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,應用,地形圖划分,瀏覽。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM