999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種低成本的離線地圖GIS解決方案

2019-12-06 08:48:53朱森光
軟件 2019年10期

摘? 要: 在GIS應用中,許多現有的商業GIS方案需要聯網在線訪問地圖數據,如果網絡狀況不佳可能會訪問延遲甚至失敗,影響用戶使用體驗。本文使用C++編程技術實現了一種低成本的不依賴于網絡的離線地圖GIS解決方案。

關鍵詞: GIS;WebGIS;離線地圖;在線地圖

中圖分類號: TP302.1? ? 文獻標識碼: A? ? DOI:10.3969/j.issn.1003-6970.2019.10.032

本文著錄格式:朱森光. 一種低成本的離線地圖GIS解決方案[J]. 軟件,2019,40(10):142146

A Low-cost Offline Map GIS Solution

ZHU Sen-guang

(Shanghai Yazhu Intelligent Technology Co., Ltd., Shanghai 201100, China)

【Abstract】: In GIS applications, many existing commercial GIS solutions require online access to map data. If the network is not in good condition, the access delay or even failure may affect the user experience. This paper uses C++ programming technology to implement a low-cost offline map GIS solution.

【Key words】: GIS; WebGIS; Offline map; Online map

0? 引言

越來越越多的項目需要使用GIS地圖功能[1-6],商業GIS地圖軟件功能繁多、復雜度高,核心功能模塊封裝成庫,對外只提供二次開發接口,編程靈活度不高,價格也較貴,普通用戶承受不起。本文研究實現了一種低成本的離線地圖GIS方案,可在某些預算較少的項目中使用。

1? 原理

我們平常看到的地圖都是平面地圖,而地球是個球體,這就需要一種將球體表面曲面映射成二維平面的方法,比較常用的映射方法是墨卡托投影法[7]。

墨卡托投影算法有好幾個變種,各GIS地圖廠家使用自己的變種算法,本文的方案由于要用到開放地圖openstreetmap網站的地圖瓦片資源,所以使用openstreetmap的投影算法進行描述,設lon為經度,lat為緯度,z為地圖放大層級,(x,y)為平面地圖的像素坐標,則有:

(1)

(2)

這里解釋一下地圖放大層級z這個參數,當我們瀏覽平面地圖時通過鼠標滾輪上下滾動可以縮放地圖,當地圖縮小時z就減小,當地圖放大時z就增大。圖1示意了當z=1時的世界地圖。

從圖1中可以看到,當z=1時,世界地圖被分成了4小塊,每小塊小地圖為256*256像素大小稱之為一個瓦片,每個瓦片的坐標用列col和行row來表示,z=1時4個瓦片小地圖拼成了一幅世界地圖,地圖在硬盤上就是以這4個瓦片小圖片的形式存儲的。

圖2為z=5時的中國中部地區地圖,可以看到此時地圖上的西安市所在的瓦片坐標為列col=25,行row=12,瓦片個數已經遠遠大于4了,z越大組成地圖的瓦片個數就越多,地圖分辨率也越高。

2? 軟件實現

2.1? 地圖拼接顯示

既然是離線GIS地圖方案那么首先要把地圖從網絡下載到本地硬盤,可以從開放地圖openstreet map網站下載。離線GIS地圖是以瓦片小圖片形式存儲在本地硬盤的,圖3為瓦片小圖片在文件管理器里的瀏覽視圖,每個瓦片小圖片大小為256*256像素,以png圖像格式存儲。

將這些瓦片拼接在一起就形成了一幅完整的地圖,軟件顯示地圖時,首先根據當前分辨率計算出對應的放大層級z,然后根據地圖顯示區域計算出所需的一系列瓦片的行號和列號,最后將這些瓦片在內存中拼接成完整的地圖在界面上顯示。圖4為地圖在軟件界面上顯示的效果圖。

需要指出的是本文使用的地圖拼接方法跟目前流行的WebGIS[8]有所不同。WebGIS使用HTML5[9]的canvas畫布技術,使用javascrip腳本來完成地圖拼接顯示,本文是用C++編程技術實現的,C++的編譯后運行比腳本語言的解釋運行效率要高很多,本地硬盤訪問瓦片數據也比WebGIS通過網絡在線訪問服務器上的瓦片數據要快。

2.2? 縮放平移

2.2.1? 縮放

在圖4所示的軟件界面中,鼠標點擊“放大”按鈕,地圖放大層級z增大,地圖分辨率提高,點擊“縮小”按鈕,地圖放大層級z減小,地圖分辨率降低。z變化后拼接地圖的瓦片列col,行row也相應變化,軟件到硬盤上讀取新的瓦片小圖片重新拼接后在界面上顯示即可。放大縮小也可以通過鼠標滾輪上下滾動來觸發,滾輪上滾地圖放大,滾輪下滾地圖縮小。

圖5為將圖4的地圖放大后的地圖效果圖。

圖6為將圖4的地圖縮小后的地圖效果圖。

2.2.2? 平移

通過鼠標點擊拖拽可以實現平移,平移不會改變放大層級z,但平移后界面視野內的地圖內容發生了變化,也就是視野內組成地圖的瓦片列col,行row發生了變化,軟件到硬盤上讀取新的瓦片小圖片重新拼接后在界面上顯示就實現了平移效果。

圖7為對圖4的地圖進行平移后的地圖效果圖,可以看到地圖上黃浦江的位置往右明顯平移了。

2.3? 坐標計算

2.3.1? 根據經緯度坐標計算地圖像素坐標

GIS地圖一個常用的功能就是根據經緯度坐標計算地圖上的位置,這是通過式(1)、式(2)來計算的。為了驗證此功能,事先通過GPS在上海市世紀大道沿線采集了如下16個經緯度坐標數據:

通過式(1)、式(2)計算出對應平面地圖上的16個點的像素坐標,為了直觀顯示效果,軟件以每個像素點為中心畫出了16個紅顏色填充的小圓圈,效果如圖8所示。

圖8中16個密集的紅色小圓圈示意出了世紀大道上的一系列采集點的位置,擬合出來的路徑跟實際GPS采集的路徑數據基本吻合。

2.3.2? 根據地圖像素坐標計算經緯度坐標

計算地圖上某點的經緯度坐標只要將式(1)、式(2)反推得到如下式(3)、式(4)所示的公式進行計算就可以了。

lon = *360 – 180 (3)

*(4)

在軟件界面中通過縮放平移操作讓上海國際會議中心位于地圖正中心,然后將鼠標移至上海國際會議中心正上方位置取其在地圖上的像素坐標(x,y),使用式(3)、式(4)的公式計算得到上海國際會議中心的經緯度坐標是(121.492395,31.241517),結果顯示在界面左上角如圖9所示。

2.4? 位置標注

位置標注是指可以在地圖上點擊某個位置放置一個圖標并標注描述文字,點擊“標注”按鈕然后在地圖的北京位置上方點擊鼠標左鍵彈出圖10所示的輸入框。

輸入“北京測試點”后點“確定”按鈕,此時在地圖上上海的位置就出現了一個圖標,圖標下方顯示“北京測試點”字樣,用同樣的方法再添加其它幾個標注點,最終效果如圖11所示。

這里有三個編程實現技術:位置定位、圖標在地圖上疊加和文字醒目顯示。位置定位是指記錄標注位置時記錄的是換算后的經緯度數據而不是屏幕坐標數據,這樣才能保證地圖縮放平移后可以計算出新的屏幕坐標正確顯示;圖標在地圖上疊加時要保證圖標矩形區域不能完全遮住地圖,要用到圖像掩碼技術[10];文字顯示采用在藍色矩形背景色上畫白色文字的方法使其看上去更醒目。

2.5? 矢量圖疊加

矢量圖包括點、線、面以及由它們組成的圖案,矢量圖在地圖上疊加后的效果如圖12所示。

畫矢量圖時矢量圖的幾何參數要轉換為經緯度坐標數據,并且需要設計統一的格式進行存儲[11],這樣便于與其它軟件進行數據交換,具備導入其它軟件生成的矢量圖數據文件在地圖上疊加顯示的 功能。

2.6? 測距離

測距離指計算地圖上兩點之間的最短距離。地

球是個球體,地球表面兩點之間的最短距離是通過這兩點的大圓的劣弧線的長度。

設地球半徑為R,起始點A經度為lng1,緯度為lat1,終點B經度為lng2,緯度為lat2,以球心O為原點,球心指向零經度、零緯度點方向為X軸,球心指向90度經度、零緯度點方向為Y軸,球心指向北極為Z軸建立XYZ坐標系。則:

起始點A在XYZ坐標系下的坐標為

Ax = R*cos(lat1)*cos(lng1) (5)

Ay = R*cos(lat1)*sin(lng1) (6)

Az = R*sin(lat1) (7)

終點B在XYZ坐標系下的坐標為

Bx = R*cos(lat2)*cos(lng2) (8)

By = R*cos(lat2)*sin(lng2) (9)

Bz = R*sin(lat2) (10)

設OA與OB的夾角為θ,則由向量點積公式得到:

(11)

那么AB兩點的距離s就是過AB兩點的圓弧長度,公式如式(12)所示。

(12)

如圖13所示,點擊“測距”按鈕,然后在地圖上先后點擊南京和武漢兩個位置,軟件通過式(12)計算出南京和武漢之間的最短距離為458.212千米。

3? 結語

本離線地圖GIS方案使用C++編程技術實現,由于是自主開發,技術可控,后續進行功能擴展非常方便,可以實現很多在線WebGIS方案實現不了的功能,比如:通過圖像邊緣分析算法[12]對地圖內容進行分析可以實現自動計算出某個地區邊界線的長度和區域面積、根據道路圖像特征自動提取道路坐標數據、根據建筑物圖像特征自動統計人口居住密度等等,WebGIS方案由于采用的是腳本語言編程很難實現這些高級功能。目前是在windows平臺下開發的,后面計劃將其移植到linux平臺下,實現跨平臺的離線地圖GIS方案。

參考文獻

[1]趙桔青, 陶福壽. 基于GIS的城鎮土地資源承載力評價[J]. 軟件, 2018, 39(7): 52-56.

[2]沈亮. 基于手機APP\GIS\OLAP的移動運營商網格集中管理中心系統的設計與實現[J]. 軟件, 2016, 37(4): 74-83.

[3]張思佳. 基于RS/GIS的長沙市土地利用和穩定性分析[J]. 軟件, 2018, 39(7): 124-129.

[4]李振星, 邵峰晶, 孫仁誠, 李淑靜, 吳舜堯. 基于分類的GIS地圖符號快速標注算法[J]. 軟件, 2012, 33(2): 108-110.

[5]陳美伊. 基于GIS 的旅游景區虛擬實現技術的研究[J]. 軟件, 2015, 36(10): 30-32.

[6]梁秋實, 桑新柱, 邢樹軍. 利用多視點自由立體顯示系統實時顯示GIS 信息[J]. 軟件, 2016, 37(01): 44-47.

[7]何碧容, 蔡倩. 基于Web墨卡托投影的導航電子地圖設計[J]. 計算機測量與控制, 2017, 25(1): 119-122.

[8]徐子惠, 王方雄, 顧雙飛, 等. 城市交通警情 WebGIS 設計與開發[J]. 軟件, 2018, 39(9): 166-169.

[9]徐莎, 楊帆, 徐昌慶. 基于HTML5的WebGIS 的研究與應用[J]. 信息技術, 2012, (4): 149-151.

[10]黃靜, 王希, 齊東旭, 唐澤圣. 基于二值掩碼圖像的圖像合成方法及其應用[J]. 計算機輔助設計與圖形學學報, 2009, 21(5): 674-679.

[11]鐘云海, 鄭海, 王孝通. 矢量圖的統一表示框架[J]. 中國航海, 2006, (4): 20-22.

[12]李立宗. OpenCV編程案例詳解[M]. 北京: 電子工業出版社, 2016: 99-140.

主站蜘蛛池模板: 亚洲AV无码乱码在线观看代蜜桃| 99伊人精品| AV无码无在线观看免费| 欧美午夜性视频| 国产成人一区免费观看| 人妻精品久久无码区| 久久人妻xunleige无码| 欧美一级高清片欧美国产欧美| 中文无码精品a∨在线观看| 毛片免费视频| 狠狠躁天天躁夜夜躁婷婷| 成人a免费α片在线视频网站| 国产菊爆视频在线观看| 亚洲综合狠狠| 在线观看国产小视频| 色哟哟国产成人精品| 午夜爽爽视频| 国产成人精品三级| 欧美精品亚洲二区| 久久99精品国产麻豆宅宅| 亚洲天堂免费在线视频| 无码中字出轨中文人妻中文中| 精品午夜国产福利观看| 色综合久久88色综合天天提莫 | 香蕉伊思人视频| 日韩一区精品视频一区二区| 99爱在线| 一级毛片免费不卡在线视频| 精品国产电影久久九九| 91小视频版在线观看www| 国产男人的天堂| 日韩高清无码免费| 国产精品永久免费嫩草研究院| 亚洲成人网在线观看| 九色免费视频| 日韩高清欧美| 99久久精品国产精品亚洲| 国产超碰在线观看| 日本欧美视频在线观看| 欧美午夜小视频| 欧美三級片黃色三級片黃色1| 怡红院美国分院一区二区| 97精品久久久大香线焦| 亚洲天堂日韩在线| 国产系列在线| 国产美女91呻吟求| 亚洲中文无码av永久伊人| 青青青国产视频手机| 国产国语一级毛片在线视频| 亚洲第一国产综合| 亚洲精品少妇熟女| 欧美精品在线看| 99精品在线看| 国产91熟女高潮一区二区| 91无码人妻精品一区| 久久天天躁狠狠躁夜夜躁| 日韩色图区| 伊人成人在线| 亚洲国产综合精品一区| 热伊人99re久久精品最新地| 精品超清无码视频在线观看| 国外欧美一区另类中文字幕| 欧美日韩精品一区二区在线线| 国产精品第一区在线观看| 午夜天堂视频| 亚洲精品无码抽插日韩| 日韩在线网址| 成人午夜网址| 国产视频自拍一区| 91视频99| 亚洲av无码片一区二区三区| 另类欧美日韩| 亚洲a免费| 国产主播在线一区| 婷婷综合色| 女人av社区男人的天堂| 69免费在线视频| 69国产精品视频免费| 国产欧美日韩综合在线第一| 99精品免费在线| 久久黄色免费电影| 国产一二视频|