離線地圖解決方案【轉載】
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系統已經是非