1. 程式人生 > >離線地圖解決方案【轉載】

離線地圖解決方案【轉載】

Web GIS離線解決方案
1、背景

在離線環境下(區域網中)的GIS系統中如何使用地圖?這裡的地圖主要指的是地圖底圖,有了底圖切片資料,我們就可以看到地圖,在上面加上自己的業務資料圖層,進行相關操作。

要在離線環境下看到GIS地圖,就要有底圖切片資料,地圖的底圖切片資料在一定時間內是不會變化的,可以使用一些地圖下載器下載地圖切片,如這個地圖下載器。

在CS系統中可以基於GMap.Net來做,參考《百度谷歌離線地圖解決方案》。

下面介紹下Web系統如何使用GIS切片資料,開發web GIS系統。

2、使用GeoWebCache釋出WMS服務

Geowebcache是基於Java的Web開源專案,主要用於快取各種WMS資料來源的地圖瓦片,它實現了多種服務介面,包括WMS-C,WMTS,TMS,KML。

Geowebcache作為一個獨立的開源專案,在最近被Geosever的幾個版本所整合,主要是對釋出的WMS圖層建立快取切片。

服務釋出步驟:

1)官網下載 geowebcache-1.8.0-war.zip,直接解壓得到geowebcache.war檔案,將該檔案直接拷貝至tomcat目錄下的webapps下即可,啟動tomcat會對war包進行解壓。

2)修改geowebcache的配置檔案geowebcache-core-context.xml。該檔案在Tomcat的webapps\geowebcache\WEB-INF下,修改如下:

<bean id="gwcXmlConfig"
class="org.geowebcache.config.XMLConfiguration"> <constructor-arg ref="gwcAppCtx" /> <!--<constructor-arg ref="gwcDefaultStorageFinder" />--> <constructor-arg value="D:\\GisMap\\" /> <!-- By default GWC will look for geowebcache.xml in {GEOWEBCACHE_CACHE_DIR}, if
not found will look at GEOSEVER_DATA_DIR/gwc/ alternatively you can specify an absolute or relative path to a directory by replacing the gwcDefaultStorageFinder constructor argument above by the directory path, like constructor-arg value="/etc/geowebcache" --> <property name="template" value="/geowebcache.xml"> <description>Set the location of the template configuration file to copy over to the cache directory if one doesn't already exist. </description> </property> </bean>

修改gwcXmlConfig例項化時使用固定路徑,該路徑可以為任意新建路徑資料夾。Geowebcache啟動之後會檢查此資料夾下是否存在gewebcache.xml檔案,如果不存在則按模板新建立並讀取使用,如果存在則直接讀取使用。

3)修改第2步中的gewebcache.xml檔案:

<layers>
    <arcgisLayer>
        <name>ARCGIS-Demo</name>
        <tilingScheme>D:\\GisMap\\Layer\\conf.xml</tilingScheme>
        <tileCachePath>D:\\GisMap\\Layer\\_alllayers</tileCachePath>
    </arcgisLayer>
</layers>

在layers節點裡新增arcgisLayer節點(預設生成的gewebcache.xml的layers節點有許多其他冗餘資料,可刪除可保留)。Name節點表示待新增圖層的名稱(這裡配置為ARCGIS-Demo),titlingscheme節點為conf.xml檔案的路徑,tileCachePath為瓦片資料的路徑。

4)瓦片地圖的準備

其中conf.xml為配置檔案,conf.cdi為顯示區域約束檔案,_alllayers資料夾下則存放了切片資料,Status.gdb為切片狀態情況記錄(可直接刪除)。

通過瓦片下載器下載瓦片地圖,然後生成的切片資料_alllayers資料夾:

L01-L10表示地圖縮放級數,按照ArcGIS切片目錄組織,切片命名規則也和ArcGIS切片資料命名規則一致。(conf.xml、conf.cdi和_alllayers在同級目錄)。

5)啟動tomcat,繼而啟動Geowebcache服務,瀏覽器訪問 localhost:8080/geowebcache,如果一切正確的話可以看到下面的頁面

該頁面簡單說明了Geowebcache的一些情況。

點選“A list of all the layers and automatic demos”連線可以看到下面:

該頁面顯示了geowebcache.xml配置的圖層資訊。圖中可以看到只配置了一個名字為ARCGIS-Demo的圖層,使用的EPSG3857座標系,釋出的圖片格式為png格式,點選png連結即可看到瓦片地圖。

這裡地圖顯示的級別和座標系配置都來自conf.xml檔案。這裡的前端js使用的是Openlayers。檢視網頁原始碼:

View Code
個人比較喜歡leaflet這個GIS javascript庫,使用leaflet載入GeoWebCache釋出的這個服務:

<!DOCTYPE html>
<html>
<head>
    <title>Leaflet - Offline Demo</title>
    <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css" />
    <script src="https://unpkg.com/[email protected]/dist/leaflet.js"></script>
</head>
<body>
    <div id="map" style="height:100vh;" ></div>
    <script type="text/javascript">

    var mapCenter = new L.LatLng(32.1280, 118.7742); //南京

    var map = new L.Map('map', {
        center : mapCenter,
        zoom : 4
    });

    var wmsLayer = L.tileLayer.wms("http://localhost:8080/geowebcache/service/wms", {
        layers: 'ARCGIS-Demo',
        format: 'image/png'
    });
    wmsLayer.addTo(map);

    var marker = new L.Marker(mapCenter);
    map.addLayer(marker);
    marker.bindPopup("<p>Hello! ;}</p>").openPopup();

    </script>
</body>
</html>

3、使用自定義的Http服務

GeowebCache本質上就是個Http服務,通過請求引數獲取配置檔案中的路徑中的切片資料,返回給請求方。

我們可以自己寫個獨立的Http服務,從資料庫中讀取切片資料返回給請求方。

其中“1818940751”是下載器下載的地圖型別,z/x/y分別是zoom和地圖切片行列號。

前端js使用leaflet載入:

var amapNormalUrl = 'http://localhost:8899/788865972/{z}/{x}/{y}';
var amapNormalLayer = new L.TileLayer(amapNormalUrl, {
    minZoom : 1,
    maxZoom : 18,
    attribution : '高德普通地圖'
});

var mapCenter = new L.LatLng(32.1280, 118.7742); //南京
var map = new L.Map('map', {
        center : mapCenter,
        zoom : 9,
        minZoom: 1,
        maxZoom: 18,
        layers : [ amapNormalLayer ]
});

複製程式碼
前端js可以自定義投影Projection演算法,而國內google地圖、高德地圖和騰訊地圖都是標準的墨卡託投影,可以直接用leaflet載入。

配合一些畫圖外掛,再配合一些後臺POI檢索服務,如:

《使用Lucene索引和檢索POI資料》

《使用Solr進行空間搜尋》

則能做出如下效果:

總結:介紹瞭如何使用下載的離線切片資料在區域網環境下發布Web GIS地圖服務,前端配合使用一些js外掛,實現web下空間資料的檢索。

在Github上開源了一些程式碼,包含自定義的Http地圖服務,和一個簡單的頁面WebGISDemo。

附件:

conf.cdi
conf.xml

參考:

作者:阿凡盧
出處:http://www.cnblogs.com/luxiaoxun/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。
分類: GIS

相關推薦

離線地圖解決方案轉載

Web GIS離線解決方案 1、背景 在離線環境下(區域網中)的GIS系統中如何使用地圖?這裡的地圖主要指的是地圖底圖,有了底圖切片資料,我們就可以看到地圖,在上面加上自己的業務資料圖層,進行相關操作。 要在離線環境下看到GIS地圖,就要有底圖切片資料,地

ubuntu sogou 輸入法無法輸入文字,解決辦法轉載

panel div apt-get 方式 workbench install 中文 enc 希望 之前一段時間正常使用的搜狗輸入法突然無法輸出中文(具體現象是,可以呼出搜狗輸入法界面,但是候選詞列表無顯示),解決之後記錄下來,希望能為同樣遇到這個問題的人提供參考。同時附li

Git服務器安裝詳解及安裝遇到問題解決方案

bsp erb 倉庫 .... gnu libcurl 執行 body ebs 轉自:http://www.cnblogs.com/grimm/p/5368777.html git是一個不錯的版本管理的工具。現在自己在搞一個簡單的應用程序開發,想使用git來進行管理。

(通用)Android App代碼混淆終極解決方案

rar $$ enable 知識 object ava write android ref App雖然沒有那麽的高大上,但是代碼的混淆是代表了程序員對App的責任心, 也是對App安全的一點點保證。今天我會將自己做Android混淆的過程和體會分享給大家,也避免大家少走彎路

分布式鎖1 Java常用技術方案轉載

tran 表示 數據庫存儲過程 一次 必須 用戶 一行 希望 itl 由於在平時的工作中,線上服務器是分布式多臺部署的,經常會面臨解決分布式場景下數據一致性的問題,那麽就要利用分布式鎖來解決這些問題。所以自己結合實際工作中的一些經驗和網上看到的一些資料,做一

關於出現Not an editor command: Bundle '**/*.vim'的解決方案

spa log ces ret 運行 uname column clas 由於 轉自:https://blog.csdn.net/YHM07/article/details/49717933 操作系統: $ uname -r 2.6.32-573.7.1.el6.x8

記憶體溢位和記憶體洩漏的區別、產生原因以及解決方案

(轉自:https://www.cnblogs.com/Sharley/p/5285045.html) 記憶體溢位 out of memory,是指程式在申請記憶體時,沒有足夠的記憶體空間供其使用,出現out of memory;比如申請了一個integer,但給它存了long才能存下的數,那就

乾貨 | Elasticsearch 叢集健康值紅色終極解決方案

題記 Elasticsearch當清理快取( echo 3 > /proc/sys/vm/drop_caches )的時候,出現 如下叢集健康值:red,紅色預警狀態,同時部分分片都成為灰色。  檢視Elasticsearch啟動日誌會發現如下: 叢集服務超時連線的情況。 bserver: timeou

Hadoop叢集datanode磁碟不均衡的解決方案

一、引言: Hadoop的HDFS叢集非常容易出現機器與機器之間磁碟利用率不平衡的情況,比如叢集中新增新的資料節點,節點與節點之間磁碟大小不一樣等等。當hdfs出現不平衡狀況的時候,將引發很多問題,比如MR程式無法很好地利用本地計算的優勢,機器之間無法達到更好的網路頻寬使用率,機器磁碟無法利用等等。 二、問題

Linux隨筆 - linux 多個會話同時執行命令後history記錄不全的解決方案轉發

tap 博文 end -s mef 內容 bin %s 命令 基本認識linux默認配置是當打開一個shell終端後,執行的所有命令均不會寫入到~/.bash_history文件中,只有當前用戶退出後才會寫入,這期間發生的所有命令其它終端是感知不到的。 問題場景那麽問題來了

Linux(Ubuntu)無法調節亮度的解決方案1(還原Fn組合鍵調節方法

原文:https://itsfoss.com/fix-brightness-ubuntu-1310/ 首先,確保你的膝上型電腦僅有Intel核心顯示卡 Step1 執行以下命令 ls /sys/class/backlight/ 如果是類似這樣,前面是筆記本品牌之類的代號,

springboot使用fastjson中文亂碼解決方法 轉載

以前使用fastjson替換jackson時,沒有直接在頁面列印過json,都是js使用沒有出現亂碼,偶然 打印出來出現了中文亂碼 之前使用的配置方式 @Configuration public class FastJsonConf { @Bean public HttpMessageC

百度谷歌離線地圖解決方案離線地圖下載)

離線地圖解決方案,除了買地圖資料,使用專業的ArcGIS來做外,也可以使用GMap.Net來做。 使用了GMap一年了,也有了一些積累,開發了一個可以下載ArcGIS、百度、谷歌、高德、騰訊SOSO、天地圖、Here等地圖的地圖下載器。 百度和google地圖載入顯示如下: 百度普通地圖: 百

SELECT的結果中出現"亂碼"的解決方案--葉子

--測試資料 declare @table table (colname varchar(8)) insert into @table select '微•博' union all select '團•購' union all select '裸•婚' union all s

iOS語音播放之切換聽筒和揚聲器的方法解決方案

注意事項(也就是我說的問題)     對於不希望啟動接近感測器功能的應用,如果需要進行揚聲器和聽筒進行切換過程中,則必須通過啟用接近感測器來進行聲音輸出模式的切換,在此時,必須要注意,如果當聲音通過聽筒進行播放完畢時,在播放完畢時,此時仍在聽筒模式輸出,如果此時關閉感測器功能,則導致在離開聽筒時,由於感測器

Nginx使用反向代理時 Hessian 的 411 錯誤解決方案

問題描述: 用 Hessian 實現 web service 過程中,需要建立物件時,是使用 HTTP POST 方法來傳遞資料的。但是在有反向代理 (nginx) 的情況下,會丟擲異常 (com.caucho.hessian.client.Hess

MySQL 5.6記憶體佔用過高解決方案總結

最近把MySQL升級到了5.6版本,無意中在工作管理員發現MySQL記憶體佔用達到400+M,這是怎麼回事呢?以前的版本可沒有遇到過這種情況啊。開始的時候還以為是快取了某個資料量較大的表的資料。於是重啟MySQL服務,但結果出乎意料,MySQL服務一起啟動,記憶體就又飆

Arcgis for Android開發檔案一(離線地圖解決方案

ArcGIS Runtime for Android開發解決方案資料 目錄 前言 一、ArcGIS Runtime for Android 開發環境的搭建 二、ArcGIS Runtime for Android 離線地圖包的製作 三、ArcGIS Runtime for

基於超級賬本Fabric的供應鏈跟蹤解決方案開源

開發十年,就只剩下這套架構體系了! >>>   

轉載VMware下的Ubuntu用ifconfig不能顯示ip地址的解決方案

技術分享 linu p地址 ssg 們的 網絡接口 ssh 註意 onf 轉載於 http://blog.163.com/wjn_mcu/blog/static/23801601620146161062704/ 背景 在虛擬機下運行操作系統,尤其是Linux系統已經是非