該文章翻譯至ArcGIS官網教程Layers and data,採用了Google翻譯輔助,對不恰當的名稱和語句作了修改。有能力的建議直接閱讀英文原版。javascript
圖層是能夠在Map
對象中使用的數據集合。能夠在客戶端上建立圖層數據,由ArcGIS Online和ArcGIS Enterprise託管,或由外部服務器託管。html
圖層一般用於管理和顯示大量要素。要素是地理位置或實體的記錄。每一個要素都包含爲幾何圖形(點,折線或多邊形)定義的空間座標和存儲其餘信息的屬性字段。這些要素集能夠被認爲是:java
注意:有時會說要素有模式,而幾何圖形沒有模式。git
使用一組要素時,通常的經驗法則是:json
FeatureLayer
顯示數據GraphicsLayer
顯示數據ArcGIS JS API具備許多可用於訪問和顯示圖層數據的圖層類。全部類都繼承自Layer
。使用哪一個類取決於數據的格式和數據的存儲位置。不一樣的圖層類型顯示出不一樣的功能。api
下面是最多見的圖層類的列表。數組
Class | Data Storage | Capabilities |
---|---|---|
FeatureLayer |
存儲在ArcGIS Online或ArcGIS Enterprise中的地理數據 | Displaying, querying, filtering and editing large amounts of geographic features. |
GraphicsLayer |
臨時存儲在內存中的地理數據 | Displaying individual geographic features as graphics, visual aids or text on the map. |
CSVLayer /KMLLayer /GeoJSONLayer |
存儲在經過網絡訪問的外部文件中的地理或表格數據 | Displaying data stored in an external file format as a layer. |
TileLayer /VectorTileLayer |
數據集存儲在切片模式中用於快速渲染 | Displaying basemaps and other tiled datasets for geographic context. |
MapImageLayer |
地理數據存儲在ArcGIS Enterprise中並以圖像方式呈現 | Displaying layers dynamically rendered by an ArcGIS Server service. |
ImageryLayer |
存儲在ArcGIS Enterprise中的地理遙感圖像 | Displaying satellite or other imagery data. |
FeatureLayer
是引用地理要素集合的圖層。集合中的全部要素必須具備相同的幾何類型和屬性字段。服務器
要素圖層數據源能夠在應用程序加載的數據的內存中,也能夠從ArcGIS Online或ArcGIS Enterprise上託管的REST API服務請求數據。在ArcGIS Online或ArcGIS Enterprise中託管數據是首選方法,尤爲適用於訪問和顯示大量地理數據。要數圖層在客戶端和服務器上都通過高度優化,能夠快速顯示並支持各類功能,包括:網絡
ArcGIS for Developers和ArcGIS Online提供了用於導入GeoJSON,Excel,CSV,geodatabases和shapefile等數據的工具。導入數據會在ArcGIS Online中建立可用做服務器端數據源的要素圖層項目。ide
一般,圖層數據是從ArcGIS Online或ArcGIS Enterprise上託管的REST API服務加載的,但也能夠直接從內存中的一組要素建立要素圖層。
例如,下面以JSON格式給出了加利福尼亞州洛杉磯的要素集合。能夠將該數據轉換爲可在FeatureLayer
中顯示的格式。
{ "places": [ { "id": 1, "address": "200 N Spring St, Los Angeles, CA 90012", "longitude": -118.24354, "latitude": 34.05389 }, { "id": 2, "address": "419 N Fairfax Ave, Los Angeles, CA 90036", "longitude": -118.31966, "latitude": 34.13375 } ] }
從上面的JSON數據建立要素圖層的第一步是將兩個場所數據轉換爲具備
attributes和
geometry屬性的
Graphic`對象。
Property | Type | Description |
---|---|---|
attributes |
Object |
Key-value 形式用於存儲有關要素的地理信息 |
geometry |
Geometry |
提供相對於座標系的位置要素。可能的值是Point (點),Polygon (多邊形)和Polyline (多線段)對象 |
如下代碼示例將包含兩個場所數據的數組轉換爲Graphic
對象數組。
var graphics = places.map(function (place) { return new Graphic({ attributes: { ObjectId: place.id, address: place.address }, geometry: { longitude: place.longitude, latitude: place.latitude } }); });
第二個步驟是建立一個FeatureLayer
對象,並指定至少所述objectIdField
,fields
,renderer
,和source
如下代碼示例將場所數組轉換爲Graphic
對象數組。
var graphics = places.map(function (place) { return new Graphic({ attributes: { ObjectId: place.id, address: place.address }, geometry: { longitude: place.longitude, latitude: place.latitude } }); });
在建立第二個步驟FeatureLayer
是實際建立一個FeatureLayer
對象,並至少指定下表中所所述的objectIdField
,fields
,renderer
,和source
屬性。
Property | Type | Description |
---|---|---|
source |
Collection<Graphic> |
Graphic 對象的集合用於建立要素圖層 |
renderer |
Renderer |
渲染器用於在要素的位置顯示符號 |
objectIdField |
String |
標識要素圖層的名稱 |
fields |
Object[] |
包含字段的名稱和值的JavaScript對象數組 |
popupTemplate |
PopupTemplate |
要素圖層中要素的彈出模板 |
如下代碼示例建立一個 FeatureLayer
並將該source
屬性顯式設置爲graphics
。Autocasting用於設置的renderer
,popup
和fields
特性。
var featureLayer = new FeatureLayer({ source: graphics, renderer: { type: "simple", // autocasts as new SimpleRenderer() symbol: { // autocasts as new SimpleMarkerSymbol() type: "simple-marker", color: "#102A44", outline: { // autocasts as new SimpleLineSymbol() color: "#598DD8", width: 2 } } }, popupTemplate: { // autocasts as new PopupTemplate() title: "Places in Los Angeles", content: [{ type: "fields", fieldInfos: [ { fieldName: "address", label: "Address", visible: true } ] }] }, objectIdField: "ObjectID", // This must be defined when creating a layer from `Graphic` objects fields: [ { name: "ObjectID", alias: "ObjectID", type: "oid" }, { name: "address", alias: "address", type: "string" } ] }); map.layers.add(featureLayer);
瞭解有關自動 autocasting或從graphic數組建立要素圖層的詳細信息。探索如何在示例代碼中使用要素圖層的全部功能。
FeatureLayer
還支持從url
屬性指定的REST API服務返回的要素集合。這是訪問和顯示大型數據集的最有效方法。要素圖層將與要素服務一塊兒使用,以儘量高效地檢索要素,若是啓用,將提供對其餘功能(如編輯)的訪問。
var layer = new FeatureLayer({ url: "https://services3.arcgis.com/GVgbJbqm8hXASVYi/arcgis/rest/services/Trailheads/FeatureServer/0" }); map.layers.add(layer);
在add a layer to a map教程中瞭解有關向地圖添加圖層的詳細信息。
除URL外,您還能夠引用存儲在ArcGIS Online或ArcGIS Enterprise中的圖層項。這些項引用REST API服務,該服務存儲層的數據以及其餘配置選項。
var layer = new FeatureLayer({ portalItem: { id: "883cedb8c9fe4524b64d47666ed234a7", portal: "https://www.arcgis.com" // Default: The ArcGIS Online Portal } }); map.layers.add(layer);
在adding a layer from an item教程中瞭解從項目中添加圖層的詳細信息。
圖形一般用於將文本、形狀和具備不一樣幾何形狀的圖像添加到地圖中。建立圖形圖層的最簡單方法是將Graphic
對象建立爲數組,並將此數組傳遞給GraphicsLayer
對象的屬性graphics
。
每一個Graphic
類都包含如下屬性:
屬性 | 類型 | 描述 |
---|---|---|
attributes |
Object |
用於存儲有關要素的地理信息的鍵值對 |
geometry |
Geometry |
提供的位置相對於一個特徵的座標系 可能的值是Point ,Polygon 和Polyline 對象 |
popupTemplate |
PopupTemplate |
圖形的彈出模板 |
symbol |
Symbol |
定義圖形在圖層中的渲染方式 |
下面的代碼示例建立一個Graphic
,該對象具備Point
幾何類型、彈出窗口和符號的新對象。而後經過將一組Graphic
對象傳遞給graphics
屬性來建立一個新的GraphicsLayer
。
var pointGraphic = new Graphic({ attributes: { name: "LA City Hall", address: "200 N Spring St, Los Angeles, CA 90012" }, geometry: { type: "point", // autocasts as new Point() longitude: -118.24354, latitude: 34.05389 }, symbol: { type: "simple-marker", // autocasts as new SimpleMarkerSymbol() color: [ 226, 119, 40 ], outline: { // autocasts as SimpleLineSymbol() color: [ 255, 255, 255 ], width: 2 } }, popupTemplate: { // autocasts as new PopupTemplate() title: "Places in Los Angeles", content: [{ type: "fields", fieldInfos: [ { fieldName: "name", label: "Name", visible: true }, { fieldName: "address", label: "Address", visible: true } ] }] }, }); var graphicsLayer = new GraphicsLayer({ graphics: [ pointGraphic ] }); map.layers.add(graphicsLayer);
經過 displaying point, polyline, and polygon graphics教程瞭解更多向視圖添加圖形的信息,經過autocasting瞭解更多自動轉換的信息。
其餘類型的數據和文件由特定Layer
的子類直接支持。其中包括用於處理外部文件(如CSV或GeoJSON文件)或集成外部服務(如必應地圖)的特定類型的圖層。
圖層子類 | 數據源 | 數據類型 | 特徵 | 限制 |
---|---|---|---|---|
CSVLayer |
CSV文件 | 矢量圖形做爲點下載 | Client-side processing, popup templates, renderers with 2D and 3D symbols | 可能須要大量下載,具體取決於功能的數量 |
GeoRSSLayer |
GeoRSS feed | 矢量圖形做爲點,折線和多邊形 | - Graphics storage - Popup templates |
- 無3D支持 不支持渲染器 |
GeoJSONLayer |
GeoJSON文件 | 矢量圖形做爲點,折線和多邊形 | 從GeoJSON數據建立圖層 | - 每一個GeoJSON層都接受單一幾何類型 - 數據必須符合RFC 7946規範 |
KMLLayer |
KML數據源 | N / A | N / A | N / A |
WMSLayer |
WMS Service Portal Item | 柵格數據導出爲單個圖像 | OGC規範 | N / A |
WMTSLayer |
- WMTS tile services - Portal Item |
圖像切片 | OGC規範 | N / A |
OpenStreetMapLayer |
OpenStreetMap tile services | 圖像切片 | Displays OpenStreetMap tiled content | N / A |
BingMapsLayer |
Bing Spatial Data Service data | N / A | N / A | N / A |
每一個層都須要不一樣的屬性,具體取決於它們的初始化方式。有關詳細信息,請參閱每一個圖層類型。建立CSVLayer
圖層的示例以下所示。
var earthquakesLayer = new CSVLayer({ url: "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_week.csv", copyright: "USGS Earthquakes", latitudeField: "latitude", // Defaults to "latitude" longitudeField: "longitude" // Defaults to "longitude" }); map.layers.add(earthquakesLayer)
經過 displaying point, polyline, and polygon graphics教程瞭解更多向視圖添加圖形的信息,經過autocasting瞭解更多自動轉換的信息。
底圖用於經過顯示道路,邊界,建築物和其餘數據來爲地圖提供地理背景。底圖一般用切片方式提供服務以便更快地渲染。柵格底圖請求預先建立的圖像。矢量底圖以壓縮二進制格式請求數據並在客戶端上設置樣式。
可使用 Vector Tile Style Editor自定義矢量底圖。自定義數據也可使用ArcGIS Online或ArcGIS Enterprise做爲矢量或柵格切片發佈。
Map
可使用basemap
屬性控制特定對象的底圖,該屬性能夠是標識特定底圖或Basemap
對象的字符串。
var map = new Map({ basemap: "streets-navigation-vector" })
在 Selecting a basemap的教程中瞭解更多信息。
MapImageLayer
用於在ArcGIS Enterprise中顯示地圖服務中的數據。地圖服務一般包含多個子圖層和複雜的製圖。Map Services將數據呈現爲動態生成並在客戶端上顯示的服務器端圖像。
ImageryLayer
用於顯示存儲在ArcGIS Enterprise 中的圖像服務中的圖像或其餘基於柵格的數據。ImageryLayer
一般用於顯示和分析從無人機或衛星捕獲的原始圖像數據或用於顯示科學數據。