GIS離線地圖的下載與發佈

    許多GIS應用都需要地圖數據,有的通過訪問互聯網的地圖(如百度地圖、高德地圖、谷歌地圖、天地圖、BingMap等),有的因爲是內網(專網)需要離線地圖則需要將地圖先下載緩存切片後再發布,下載離線地圖的方式有很多,比如使用一些地圖下載器下載,導出爲google切片規則、arcgis切片規則、WMTS規則後通過Web服務器發佈後,客戶端通過OpenLayers.js、arcgis api for JS、SuperMap iClient等方式開發。現在市面上有不少的地圖下載器,基本都具備地圖下載與導出功能,如太樂地圖下載器可以下載各種互聯網地圖並導出爲多種切片規則或拼接tif圖片。離線地圖的下載的關鍵技術是熟悉各種互聯網地圖的規則,目前的規則基本都差不多,有WebMecator、WGS84的規則,懂GIS的人知道,谷歌、BingMap、高德地圖等都遵循這些規則,天地圖遵循有兩種規則,百度地圖的規則比較特殊。地圖也存在偏移,谷歌中國的地圖、BingMap、高德地圖、百度地圖都有偏移,天地圖的地圖沒有偏移。

下載後的地圖,發佈相對簡單,建議使用Google Z/X/Y的規則導出,然後發佈,開發起來相對方便多了。

這兩年因各個行業的客戶對離線地圖的需求,我總結了一些基本的需求如下:

1.能下載各種互聯網地圖,並導出爲切片;

2.能提供離線地圖的訪問接口,地圖客戶端進行訪問;

3.能週期性或者按需下載切片;

4.能下載街道地圖、衛星影像地圖;

5.能在地圖上疊加各種點位,比如視頻監控點位、人員位置點位、車輛點位、車輛軌跡、房屋、報警點位等等;

6.能在地圖上進行GIS地圖可視化展示,結合GIS地圖與echarts或MapV等方式展示遷徙圖、熱力圖、流量圖;

7.能將地圖轉換爲深色(黑色、藍色),滿足大屏上展示地圖的需求(因爲大屏如果是白色的地圖很刺眼);

8.能查詢地圖的點位、道路、建築、POI等數據,並地圖顯示與定位。

9.能支持多種離線地圖的切換,比如可以看百度、高德、谷歌的街道地圖與衛星地圖,並且支持座標糾偏(因爲這些地圖本來就是是有偏移的);

10.支持內網地圖中路徑分析、緩衝區分析、地名查詢服務、地址編碼、反地址解析、座標糾偏服務。

 

以上需求都是可以解決的,方法有很多,可以不用商業GIS軟件平臺都可以解決,這也是用戶爲什麼自己找解決方案的原因,如果按照傳統的做法,至少需要買套商業GIS服務版本,國外的50~80萬不等,國內的30萬的樣子,如果加上地圖數據10萬~100萬不等,一下子一兩百萬就沒了,所以這也是許多用戶選擇離線地圖與一些輕量級的GIS平臺的原因。當然,商業GIS軟件有他的優勢,具體就不細說了,但如果是以上的需求,着實可以不用購買,完全可以通過開源GIS來解決,性能與功能都能滿足要求。

這兩年因爲需求多,我給不少客戶提供了綜合性的解決方案,爲用戶節省了許多銀子,特別是私企用戶,省下來的都是利潤。

方案包括幾部分:

1.離線地圖下載與發佈;

2.離線地圖自動緩存(可以不提前緩存,真正做到按需下載);

3.離線地圖按需按週期自動更新;

4.離線地圖疊加矢量地圖;

5.離線地圖服務標準化接口(統一了不同地圖都使用同一個地圖接口,用戶不需要熟悉很多API);

6.離線地圖變色服務;

7.地圖糾偏服務;

8.提供基於OpenLayers.js的強大的地圖示例(含源碼,降低用戶的開發難度與學習成本),包括各種地圖功能與可視化功能。

9.離線地圖下載(構建用戶需要的離線地圖格式,省事,客戶只需要關心業務開發);

10.提供矢量地圖發佈與矢量地圖數據(全國各種地圖數據);

11.提供離線地圖集羣部署,爲大量併發提供高可用的支撐。

 

以上解決方案爲客戶徹底解決了GIS地圖的困擾。本方案已經很成熟,可以留言交流。

附圖:各種離線地圖的訪問

附圖:地圖變色(深色地圖),這個功能是大屏地圖可視化的福音

附代碼

離線天地圖訪問地址:
http://localhost:6080/MapService.svc/GetMap?maptype=tdt-road&x={x}&y={y}&z={z}

var epsg = 'EPSG:3857';//地圖投影
        var projection = ol.proj.get(epsg);
        var map = new ol.Map({
            target: 'map',
            view: new ol.View({
                center: ol.proj.transform([104.279, 31.136], 'EPSG:4326', epsg),
                projection: projection,
                zoom: 10
            })
        });

var tdtLayer = new ol.layer.Tile({
            source: new ol.source.XYZ({
  title: "天地圖道路",
                url: "http://www.arctiler.com:6080/MapService.svc/GetMap?maptype=tdt-road&x={x}&y={y}&z={z}" //http://www.arctiler.com:6080替換成您的地址
 }),
            rojection: 'EPSG:3857'
        });
        map.addLayer(tdtLayer);

附代碼:訪問各種離線地圖

var map = new ol.Map({
            target: 'map',
            view: new ol.View({
                center: [12406035, 4304933],
                zoom: 5,
                projection: 'EPSG:3857'
            })
        });
       
        var gaodeLayer = new ol.layer.Tile({
            source: new ol.source.XYZ({
                title: "高德地圖",
                url: "http://www.arctiler.com:6080/MapService.svc/GetMap?maptype=gaode-road&x={x}&y={y}&z={z}"
                //  title: "高德地圖影像",
                //url: "http://www.arctiler.com:6080/MapService.svc/GetMap?maptype=gaode-image&x={x}&y={y}&z={z}"
				 //  title: "高德地圖標註",
                //url: "http://www.arctiler.com:6080/MapService.svc/GetMap?maptype=gaode-label&x={x}&y={y}&z={z}"
				 //  title: "天地圖道路",
                //url: "http://www.arctiler.com:6080/MapService.svc/GetMap?maptype=tdt-road&x={x}&y={y}&z={z}"
				 //  title: "天地圖影像",
                //url: "http://www.arctiler.com:6080/MapService.svc/GetMap?maptype=tdt-image&x={x}&y={y}&z={z}"
				 //  title: "天地圖標註",
                //url: "http://www.arctiler.com:6080/MapService.svc/GetMap?maptype=tdt-label&x={x}&y={y}&z={z}"
				 //  title: "百度地圖",
                //url: "http://www.arctiler.com:6080/MapService.svc/GetMap?maptype=baidu-road&x={x}&y={y}&z={z}"
				 //  title: "百度影像",
                //url: "http://www.arctiler.com:6080/MapService.svc/GetMap?maptype=baidu-image&x={x}&y={y}&z={z}"
				 //  title: "百度標註",
                //url: "http://www.arctiler.com:6080/MapService.svc/GetMap?maptype=baidu-label&x={x}&y={y}&z={z}"
				 //  title: "谷歌地圖",
                //url: "http://www.arctiler.com:6080/MapService.svc/GetMap?maptype=google-road&x={x}&y={y}&z={z}"
				 //  title: "谷歌影像",
                //url: "http://www.arctiler.com:6080/MapService.svc/GetMap?maptype=google-image&x={x}&y={y}&z={z}"
            }),
            rojection: 'EPSG:3857'
        });
        map.addLayer(gaodeLayer);

附圖:地圖效果圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章