ArcGIS——圖層與數據

該文章翻譯至ArcGIS官網教程Layers and data,採用了Google翻譯輔助,對不恰當的名稱和語句作了修改。有能力的建議直接閱讀英文原版。javascript

1. 介紹

圖層是能夠在Map對象中使用的數據集合。能夠在客戶端上建立圖層數據,由ArcGIS Online和ArcGIS Enterprise託管,或由外部服務器託管。html

2. 數據——要素的集合

圖層一般用於管理和顯示大量要素。要素是地理位置或實體的記錄。每一個要素都包含爲幾何圖形(點,折線或多邊形)定義的空間座標和存儲其餘信息的屬性字段。這些要素集能夠被認爲是:java

  • 結構化:若是每一個要素具備相同的幾何圖形和相同屬性的關鍵字
  • 非結構化:若是任何要素具備不一樣幾何圖形或不一樣屬性的關鍵字

注意:有時會說要素有模式,而幾何圖形沒有模式。git

使用一組要素時,通常的經驗法則是:json

3. 核心圖層的類型

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.

4. 使用FeatureLayer展現數據源

FeatureLayer是引用地理要素集合的圖層。集合中的全部要素必須具備相同的幾何類型和屬性字段。服務器

要素圖層數據源能夠在應用程序加載的數據的內存中,也能夠從ArcGIS Online或ArcGIS Enterprise上託管的REST API服務請求數據。在ArcGIS Online或ArcGIS Enterprise中託管數據是首選方法,尤爲適用於訪問和顯示大量地理數據。要數圖層在客戶端和服務器上都通過高度優化,能夠快速顯示並支持各類功能,包括:網絡

ArcGIS for Developers和ArcGIS Online提供了用於導入GeoJSON,Excel,CSV,geodatabases和shapefile等數據的工具。導入數據會在ArcGIS Online中建立可用做服務器端數據源的要素圖層項目。ide

4.1 客戶端數據源

一般,圖層數據是從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數據建立要素圖層的第一步是將兩個場所數據轉換爲具備attributesgeometry屬性的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對象,並指定至少所述objectIdFieldfieldsrenderer,和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對象,並至少指定下表中所所述的objectIdFieldfieldsrenderer,和source屬性。

Property Type Description
source Collection<Graphic> Graphic對象的集合用於建立要素圖層
renderer Renderer 渲染器用於在要素的位置顯示符號
objectIdField String 標識要素圖層的名稱
fields Object[] 包含字段的名稱和值的JavaScript對象數組
popupTemplate PopupTemplate 要素圖層中要素的彈出模板

如下代碼示例建立一個 FeatureLayer並將該source屬性顯式設置爲graphicsAutocasting用於設置的rendererpopupfields特性。

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數組建立要素圖層的詳細信息。探索如何在示例代碼中使用要素圖層的全部功能。

4.2 服務器端數據源

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教程中瞭解從項目中添加圖層的詳細信息。

5. 用GraphicsLayer(圖形層)顯示圖形

圖形一般用於將文本、形狀和具備不一樣幾何形狀的圖像添加到地圖中。建立圖形圖層的最簡單方法是將Graphic對象建立爲數組,並將此數組傳遞給GraphicsLayer對象的屬性graphics

每一個Graphic類都包含如下屬性:

屬性 類型 描述
attributes Object 用於存儲有關要素的地理信息的鍵值對
geometry Geometry 提供的位置相對於一個特徵的座標系 可能的值是PointPolygonPolyline對象
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瞭解更多自動轉換的信息。

6. 使用外部數據源

其餘類型的數據和文件由特定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瞭解更多自動轉換的信息。

7. 使用底圖和切片圖層

底圖用於經過顯示道路,邊界,建築物和其餘數據來爲地圖提供地理背景。底圖一般用切片方式提供服務以便更快地渲染。柵格底圖請求預先建立的圖像。矢量底圖以壓縮二進制格式請求數據並在客戶端上設置樣式。

可使用 Vector Tile Style Editor自定義矢量底圖。自定義數據也可使用ArcGIS Online或ArcGIS Enterprise做爲矢量或柵格切片發佈。

Map可使用basemap屬性控制特定對象的底圖,該屬性能夠是標識特定底圖或Basemap對象的字符串。

var map = new Map({
  basemap: "streets-navigation-vector"
})

Selecting a basemap的教程中瞭解更多信息。

8. 使用ArcGIS Enterprise中的地圖服務

MapImageLayer用於在ArcGIS Enterprise中顯示地圖服務中的數據。地圖服務一般包含多個子圖層和複雜的製圖。Map Services將數據呈現爲動態生成並在客戶端上顯示的服務器端圖像。

9. 使用柵格和圖像數據

ImageryLayer用於顯示存儲在ArcGIS Enterprise 中的圖像服務中的圖像或其餘基於柵格的數據。ImageryLayer一般用於顯示和分析從無人機或衛星捕獲的原始圖像數據或用於顯示科學數據。

相關文章
相關標籤/搜索