ArcGIS API for JavaScript 入門教程[6] 再講數據——Map類之可操作圖層


【回顧】上篇交代了Map是各種圖層(不管是實際上的圖層還是由圖層構成的對象)的容器,是數據的容器,並不作顯示(由視圖類繪制)。並重點講解了由圖層構成的復雜圖層——高程屬性ground和底圖屬性basemap。

這一篇結合OGC標准,講一下可操作圖層的類型、生成。

注意:如果看不懂這篇,可以先跳過,但是你不知道在JsAPI中用什么圖層加載什么數據的時候,這篇需要復習。本篇屬於字典類型的教程,方便以后查閱。

轉載注明出處,博客園/CSDN/B站/知乎:秋意正寒

目錄:https://www.cnblogs.com/onsummer/p/9080204.html

1. 圖層和數據

真正的地理數據仍然在服務端,服務端怎么可能把那么龐大的數據傳給你?它根據前端的請求,在需要幾何形狀的時候傳幾何坐標點過來,在需要屬性表的屬性時再傳字段和字段值過來。

那如何連接服務器端的數據前端瀏覽器呢?API用圖層(Layer)的概念,把你看到的東西和雲端服務器的數據連接在一起了。

在Esri家族的產品中,有一個產品叫ArcGIS Enterprise,里面有個組件叫ArcGIS for Server,Server就是通過一個簡單的URL(統一資源定位符)連通服務器端和瀏覽器端,這個URL又被稱作REST URL

大多數圖層都遵循了OGC組織制定的規范。

2. OGC與GIS服務解釋【可跳躍閱讀】

OGC全稱開放地理信息系統聯盟。正是OGC制定的各種規范,使得GIS服務有序可循。

第2節就簡單說幾個規范,第3節則將常用的可操作圖層對應的ArcGIS Server的服務對應起來。

【!】注意,本節如果看不懂可以先跳過,以后會有大量的例子會用到。

2.1 WMS

網絡地圖服務,WebMapService。

以ArcGIS為例,一個mxd,就很完整地對應了一個“地圖”,因為一個mxd就可以制作一幅多圖層、多符號、帶標注的地圖。可以簡單地理解,將mxd文檔整體發布到ArcGIS Server上,這個服務是遵守了WMS規范的。

在ArcGIS Server上,這種服務叫MapService。

在其他開源軟件(如QGIS)和開源地理服務器上(如GeoServer和MapServer),WMS有其他的實現,ESRI只不過自己細化、拓展了WMS,成為自家的地圖服務。

也就是說,WMS≠MapService。但是MapService可以提供WMS服務——這就說明,一個mxd發布的MapService可以包含WMS服務,類似於WMS派生出了MapService。

  【注】ESRI也提供了WMS的支持,在發布MapServer和ImageServer時可以啟用WMS。見3.1和Server幫助文檔。】

在本人的實踐中,GeoServer和ArcGIS Server這兩大主流地理服務器都支持WMS,WMS最終向前端發來請求返回的,是請求地理范圍內的一張圖片

有關WMS還有更詳細的各路請求參數,以下WFS、WCS、WPS也是,有能力的朋友可以到OGC官網找到相關標准自行閱讀,此處暫不展開。

2.2 WFS

網絡要素服務,WebFeatureService。

ESRI將其拓展為FeatureService(即FeatureService≠WFS),但是也對原生的WFS提供了支持,見3.1。

FeatureService支持從文件發布(CSV、Excel、Shapefile),也支持從地理數據庫發布,還支持從mxd發布(在發布MapService時啟用FeatureService)。

返回整張圖片的WMS不同,WFS返回的是帶有幾何和屬性信息的實際要素,客戶端(瀏覽器)可以將這些要素與屬性用於任何類型的地理空間分析。

WFS 服務也支持過濾器,由此用戶可以在數據上執行空間查詢和屬性查詢。

在ArcGIS Server發布WFS時,ArcGIS Server會自動忽略柵格圖層。WFS僅支持企業地理數據庫發布,或者從一個mxd發布。

2.3 WCS

網絡表面服務,WebCoverageService。也叫網絡覆蓋服務,主要是柵格影像。ArcGIS Server上的MapService、ImageService和GeoDataService均可使用從屬它們的子一級WCS服務。

  用mxd發布MapService時啟用WCS(WCS只會識別柵格圖層,矢量圖層等其他圖層會被忽略),當然也可以單獨拿一幅柵格影像發布ImageService時啟用WCS,也可以在發布GeoDataService時啟用WCS。

WCS 的數據源應為下列任一數據形式:

  • 有柵格圖層的地圖文檔(mxd)
  • 柵格數據集或鑲嵌數據集(在Geodatabase中)
  • 引用柵格數據集或鑲嵌數據集的圖層文件(.lyr)
  • 包含柵格數據的地理數據庫(10.1及以上的Server不支持mdb)

【注】WCS中的C=Coverage,但是不等於ArcGIS早期版本的Coverage數據。

盡管WCS的數據源很多,但是都繞不開一個核心詞:Coverage,也即覆蓋數據,也即柵格數據,可以是影像柵格,也可以是普通含義上的柵格。

2.4 WMTS

網絡瓦片(切片)地圖服務,WebMapTileService。

這個在發布MapService和ImageService的緩存服務時,進行多級別切圖即可調用WMTS,無需開啟WMTS(因為切圖默認就是WMTS)。

  有關如何在發布MapService或ImageService時創建作緩存服務,請參考:點我

目前,JsAPI和OpenLayers支持ArcGIS Server的WMTS。

與WMS最大的區別就是WMTS可以將地圖切成多個網格,在不同的比例尺下切出N套緩存小方片,把WMS返回的整張大圖切開,有利於網絡傳輸。

2.5 WPS(與圖層無關,但是屬於OGC常用規范也順帶一提)

網絡處理服務,WebProcessService。

即在服務器端進行地理處理任務,結果再返回到客戶端。在ArcGIS Server中拓展為GPService(即Geoprocess Service)。

同樣,在發布GPService時可以啟用WPS服務。但是此文講的是可操作圖層,這里就不展開了,待到后期講GPService和Task時會展開。

目前,uDig、Openlayers均支持ArcGIS Server上的WPS。而JsAPI使用的是GPService本身。

3. 圖層與Server服務對應表

  注意!並不是所有的圖層都用Server上的服務創建(如GraphicLayer、GeoJSONLayer、CSVLayer等),也並不是所有的服務都是拿來創建圖層的(如后期學到的Task要用到NAService等)。

  ps:Server上的服務不僅僅可以在JsAPI調用,Runtime SDK開發的產品也能用。

3.1 JsAPI 3.X & 4.X圖層對比

需要說明的是,OGC各種標准的支持如下圖所示。

有關更詳細的ArcGIS Server發布這些常用OGC服務的教程,請看ArcGIS Server在線幫助。

3.2 舉例說明

在3.x中(3.25),創建WMSLayer、ArcGISDynamicMapServiceLayer舉例:

// 3.25 jsAPI創建WMS圖層
var map = new Map('map', { basemap: 'streets', center: [-96, 37], zoom: 4 }); var wmsLayer = new WMSLayer('https://sampleserver1.arcgisonline.com/ArcGIS/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer/WMSServer', { resourceInfo: resourceInfo, visibleLayers: ['1', '2'] }); map.addLayers([wmsLayer]);

以上為WMSLayer,以下是ArcGISDynamicMapServiceLayer。

// 3.25 創建獨有的ArcGIS動態地圖服務圖層
var map = new Map("mapDiv", { sliderOrientation : "horizontal" }); var dynamicMapServiceLayer = new ArcGISDynamicMapServiceLayer("https://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Population_World/MapServer", { "opacity" : 0.5, "imageParameters" : imageParameters }); map.addLayer(dynamicMapServiceLayer);

在4.x中(4.8),創建MapImageLayer、PointCloudLayer舉例:

// jsAPI版本4.8 創建獨有的地圖圖像圖層
var
layer = new MapImageLayer({ url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer" }); map.add(layer);

以上為MapImageLayer,以下是PointCloudLayer。

// jsAPI 4.8 利用場景服務創建獨有的點雲圖層
var
layer = new PointCloudLayer({ url: "https://tiles.arcgis.com/tiles/V6ZHFr6zdgNZuVG0/arcgis/rest/services/BARNEGAT_BAY_LiDAR_UTM/SceneServer" }); map.add(layer);

注意,jsAPI的圖層類型有很多,除了MapImageLayer和PointCloudLayer這兩種圖層外,大多數圖層不僅可以用ArcGIS Server上的服務創建,也可以用PortalID創建。

3.3 ArcGIS Server上其他服務有什么用

見Server的幫助文檔。Server上不僅有數據類型的服務(上表),還有處理類型的服務,例如用於支持網絡分析的NAServer等。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM