python 导入离线地图_PyQGIS开发 -- 离线地图
地圖是地理信息應用的基礎,凡是一切與位置有關的信息都離不開地圖。我們生活中常見的谷歌、百度、高德等公司為我們提供了便利的地圖服務,極大便利了我們生活的方方面面。
在地理信息應用中,地圖往往是基礎底圖,起到……的作用。常見的地圖服務有OpenStreetMap、百度地圖、必應地圖、谷歌地圖、天地圖等等。
在GIS應用系統中,每次都通過網絡連接獲取這些地圖服務無疑是耗時的,這就產生了將這些地圖數據下載、離線存儲的需求。
本文將分別通過QGIS軟件操作和PyQGIS開發示例兩個方面來闡述如何使用QGIS下載OSM(Open Street Map)提供的地圖數據,并離線加載的方法。掌握了PyQGIS加載離線地圖數據的技巧,開發者可以應用到自己開發的Python插件或者獨立應用程序中。由于QGIS的Python API接口與C++ API接口基本一致,因此,QGIS的C++二次開發者也同樣適用。
OSM地圖數據下載
OSM具有豐富的全球開源地理信息數據,提供在線/離線的柵格、矢量數據服務。
由于網絡的原因,在QGIS中加載OSM在線數據并不總是能夠成功,或者地圖加載會非常緩慢。筆者推薦直接用瀏覽器打開 www.openstreetmap.org 網站上,下載離線數據,導出為“.osm”文件。而后文講到的使用QGIS軟件來直接加載OSM在線數據并下載的方法僅供能夠訪問國外網的朋友參考。
在QGIS中,可以使用菜單欄“Vector -> OpenStreetMap -> Download Data”來下載OSM地圖數據。
該功能提供了從“地圖畫布”、“圖層”以及“手動范圍”三種方式下載數據。
這里,以上三種下載方式我們都不講解,它們已經很直觀了。
我們介紹一款叫“OSMDownloader”的插件,它提供了一種使用鼠標拖拽選擇數據下載范圍的方式。
“OSMDownloader”顧名思義,它提供了下載OSM地圖數據的功能。
除了“OSMDownloader”插件以外,我們還需要下載一款“OpenLayers Plugin”插件,它提供了諸如OSM、谷歌、必應等在線地圖服務加載功能。
在QGIS菜單欄依次選擇”Plugins -> Manage and Install Plugins“,在彈出的插件管理窗口中搜索”OSM“找到并安裝“OSMDownloader”這款插件。
同樣,搜索并下載“OpenLayers Plugin”插件。(由于筆者已經安裝了該插件,顧截圖中顯示“Reinstall Plugin”,若沒有安裝過,則該處按鈕會顯示“Install Plugin”)
插件安裝好以后,“OSMDownloader”在QGIS軟件的工具欄上是下面這個樣子的:
而“OpenLayers Plugin”會出現在QGIS的“Web”菜單欄中:
在QGIS中,使用”OSMDownloader“插件下載OSM在線地圖數據的操作如下:
1、打開QGIS軟件,依次選擇菜單欄中的“Web -> OpenLayers plugin -> OpenStreetMap”,加載OSM地圖,并縮放到我們感興趣的位置。
2、點擊“OSMDownloader”插件按鈕,在QGIS地圖窗口中拖動鼠標選擇要下載的地圖數據區域。
3、保存下載文件到本地路徑。
離線地圖數據加載
現在,我們下載好了OSM提供的地圖數據,如何加載呢?
很簡單,直接選中下載的”.osm“文件,拖動到QGIS地圖窗口中,就能打開了。
彈出圖層選擇窗口,點擊“Select All”,并確定。
所有圖層就會在QGIS地圖畫布中展示出來了,如下圖:
這時候,你還可以保存這個地圖工程為”.qgs“的本地文件,下次只需要用QGIS加載這個”.qgs“地圖工程就會自動打開OSM離線地圖數據了。
打開的時候,用QGIS菜單欄“Project -> Open”即可。
需要注意的是,QGIS工程文件只是一個XML文本,只存儲了數據文件的路徑,并沒有存儲數據文件本身,因此,刪除數據文件之后,這個工程文件就會出錯了。拷貝工程文件必須連帶數據文件也要拷貝,并且要將工程文件設置為相對路徑保存(這個不是本節要講的內容,不展開了)。
PyQGIS示例
操作并不復雜,接下來我們使用PyQGIS來完成離線地圖數據加載的操作。
同樣,我們用加載QGIS工程文件的方式來達到打開離線地圖數據的目的,代碼如下:
from PyQt4.QtCore import *
dir = "/Users/Jacory/" # 這個路徑改成你的工程文件路徑
fileName = "OfflineMap.qgs" # 同樣,修改工程文件名稱
f = QFileInfo(dir + fileName)
p = QgsProject.instance()
p.readPath(dir)
p.read(f)
---------------------
OK,本節內容就是這樣,如有錯誤,請批評指正,謝謝。
總結
以上是生活随笔為你收集整理的python 导入离线地图_PyQGIS开发 -- 离线地图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法竞赛入门经典题解目录
- 下一篇: python中的运算和运算符