如何开发自己的电子地图系统 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,應用,地形圖劃分,瀏覽。
?
?
轉載于:https://www.cnblogs.com/hyg290/p/3871239.html
總結
以上是生活随笔為你收集整理的如何开发自己的电子地图系统 web版 单机或联网的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html的圆形字体,css字体加载和圆形
- 下一篇: cleave.js_使用Cleave.j