當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


JavaScript ArcGIS MapView.spatialReference用法及代碼示例


基本信息

以下是所在類或對象的基本信息。

AMD: require(["esri/views/MapView"], (MapView) => { /* code goes here */ });

ESM: import MapView from "@arcgis/core/views/MapView";

類: esri/views/MapView

繼承: MapView > View > Accessor

自從:用於 JavaScript 4.0 的 ArcGIS API

用法說明

MapView.spatialReference函數(或屬性)的定義如下:

spatialReference SpatialReference autocast


視圖的空間參考。這表示用於在Map中定位地理特征的投影坐標係或地理坐標係。從版本 4.23 開始,您可以在 MapView 初始化後通過直接更改此屬性或通過更改 BasemapGalleryBasemapToggle 小部件中的底圖來更改 MapView 的空間參考。將spatialReferenceLocked屬性設置為true以防止用戶在運行時更改視圖的空間參考。

在更改空間參考之前,請通過調用 projection.isLoaded() 檢查 projection engine 是否已加載。如果尚未加載,則調用projection.load()方法。如果未加載投影引擎,視圖的中心將默認為視圖的新空間參考中的[0, 0],並且將引發控製台錯誤。

注意

  • 不顯示與視圖的空間參考不兼容的LayerViews。在這種情況下,圖層視圖的 suspended 屬性是 true 並且 spatialReferenceSupported 屬性是 false

  • 設置視圖的空間參考時,中心、範圍或viewpoint.targetGeometry屬性將投影到新的空間參考。調整比例和旋轉屬性以使Map內容在屏幕上保持相同的大小和方向。

  • 為確保TileLayersVectorTileLayers 正確顯示在basemap 中,必須將MapView 的空間參考設置與其tileInfo's 空間參考相匹配。

  • 不支持使用 imageCoordinateSystem 切換空間參考。

默認值:null

例子:

// check if the projection engine is loaded
if (!projection.isLoaded()) {
  // load the projection engine if it is not loaded
  projection.load().then(() => {
   // change the spatial reference of the view to equal earth projection
    view.spatialReference = new SpatialReference({
      wkid: 54035 //equal earth projection
    });
  });
} else {
  // the projection engine is already loaded.
  // change the spatial reference of the view to equal earth projection
  view.spatialReference = new SpatialReference({
    wkid: 54035 //equal earth projection
  });
}
const basemap = await changeBasemap();
const spatialReference = await findSpatialReference(basemap);

// check if basemap has the same spatial reference as the view if they are not equal
// then check if the projection engine is loaded. load the projection engine if it is not loaded.
// If loaded, then simply change view.spatialReference to match the basemap spatialReference
if (spatialReference && !view.spatialReference.equals(spatialReference)) {
  if (!projection.isLoaded()) {
    // load the projection engine if it is not loaded
    await projection.load();
  }
  view.spatialReference = spatialReference;
}

// change the basemap
map.basemap = basemap;

async function changeBasemap() {
  let basemap;
  if (map.basemap.title === "OpenStreetMap Vector Basemap (Blueprint - WGS84)"){
    basemap = new Basemap({
      portalItem: { // Spilhaus - one ocean basemap
        id: "5639ccf22d4c4830ab815c4f9c9319bb"
      }
    });
  } else {
    basemap = osm84;
  }
  return basemap;
}

async function findSpatialReference(basemap) {
  await basemap.load();

  if (basemap.spatialReference) {
    return basemap.spatialReference;
  }

  const layer = basemap.baseLayers.at(0);

  if (!layer) {
    return null;
  }

  await layer.load();

  return layer.spatialReference;
}

相關用法


注:本文由純淨天空篩選整理自arcgis.com大神的英文原創作品 MapView.spatialReference。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。