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

【回顧】上篇交代了Map是各類圖層(無論是實際上的圖層仍是由圖層構成的對象)的容器,是數據的容器,並不做顯示(由視圖類繪製)。並重點講解了由圖層構成的複雜圖層——高程屬性ground和底圖屬性basemap。html

這一篇結合OGC標準,講一下可操做圖層的類型、生成。前端

注意:若是看不懂這篇,能夠先跳過,可是你不知道在JsAPI中用什麼圖層加載什麼數據的時候,這篇須要複習。本篇屬於字典類型的教程,方便之後查閱。數據庫

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

目錄:http://www.javashuo.com/article/p-tloynsnb-ks.html瀏覽器

1. 圖層和數據

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

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

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

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

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

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

第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等。

相關文章
相關標籤/搜索