Ошибка при просмотре Scene Service с использованием ArcGIS Javascript API - невозможно использовать оператор «in» для поиска «кода» в false - PullRequest
1 голос
/ 08 июля 2019

Я использую ArcGIS Javascript API 4.11.Я получаю эти ошибки при просмотре Scene Service с моего портала и предоставлении его идентификатора.

Вот снимок экрана с ошибкой, которую я получаю. Снимок экрана 01

Я использую этот код.

require([
  "esri/Map",
  "esri/views/SceneView",
  "esri/layers/SceneLayer",
  "esri/identity/OAuthInfo",
  "esri/identity/IdentityManager",
  "esri/layers/ImageryLayer",
  "esri/views/layers/ImageryLayerView"
], function(
  Map, SceneView, SceneLayer, OAuthInfo, esriId, ImageryLayer, ImageryLayerView
) {
  debugger;
  var info = new OAuthInfo({
    appId: "AnFbtGbH4t9A2XTi",
    // appId: "q244Lb8gDRgWQ8hM",
    // Uncomment the next line and update if using your own portal
    // portalUrl: "https://<host>:<port>/arcgis"
    // Uncomment the next line to prevent the user's signed in state from being shared with other apps on the same domain with the same authNamespace value.
    // authNamespace: "portal_oauth_inline",
    popup: false
  });

  esriId.registerOAuthInfos([info]);

  esriId
  .checkSignInStatus(info.portalUrl + "/sharing")
  .then(function() {
    //displayItems();
  }).catch(function() {
    // Anonymous view
    esriId.getCredential(info.portalUrl + "/sharing");
  });

  var map = new Map({
    basemap: "dark-gray",
    ground: "world-elevation"
  });

  var view = new SceneView({
    container: "viewDiv",
    map: map,
  });

  var sceneLayer = new SceneLayer({
    portalItem: {
      id: "e7bf9f676ed64937bff9f44c84fdae2b"
    },
    popupEnabled: false
  });

  map.add(sceneLayer);
});

Карта загружается, но слой сцены не загружается.Пожалуйста, помогите.

Аналогичный код, который я пробовал в codepen с тем же идентификатором, также выдает мне ту же ошибку - https://codepen.io/anon/pen/rEqgJB

1 Ответ

0 голосов
/ 11 июля 2019

Элемент портала , который вы пытаетесь загрузить, на самом деле является BuildingSceneLayer .Приведенный выше код пытается загрузить его как обычный SceneLayer .

. Поэтому API сообщает об ошибке SceneLayer does not support this layer type (2-я ошибка на скриншоте).

Просто заменитеSceneLayer с BuildingSceneLayer и все работает:

require([
  "esri/Map",
  "esri/views/SceneView",
  "esri/layers/BuildingSceneLayer"
], function(Map, SceneView, BuildingSceneLayer) {

...

  // Create BuildingSceneLayer and add to the map
  var sceneLayer = new BuildingSceneLayer({
    portalItem: {
      id: "e7bf9f676ed64937bff9f44c84fdae2b"
    },
    popupEnabled: false
  });
  map.add(sceneLayer);

...

});

Вот фиксированный Codepen, который показывает здание после загрузки слоя.https://codepen.io/arnofiva/pen/c410babb5384945a12b1d8206ebe27ce?editors=1010


Альтернативный способ добиться того же - попросить API загрузить произвольный слой из элемента портала , и в этом случае он автоматически определяет тип слоя:

Layer.fromPortalItem({
  portalItem: {
    id: "e7bf9f676ed64937bff9f44c84fdae2b"
  }
}).then(function(layer) {
  // Adds layer to the map
  map.add(layer);
});

Вы можете воспользоваться этими примерами, показывающими специфичные для BuildingSceneLayer возможности:

...