ArcGIS API for JavaScript 4.x 免登录调用arcgis online私有服务

发布时间 2023-12-26 15:13:07作者: Youse的二分口粮地

API keys | ArcGIS Developers

 

前言

 本来以为普通用户调用服务只能依靠登录,仔细研究了一下可以通过key来实现免登录调用服务。

背景

最近在做一个BIM结合GIS的Demo,先通过arcgis pro将.rvt文件配准到实际位置,然后打包成slpk文件,拖拽到arcgis online发布出来,最后在前端加载。 

环境

 arcgis pro 3.0.0

Revit 2021

arcgis api for jacvascipt 4.24

Win10

问题

 01.免费版的online只能发布私有服务,调用私有服务需要登录arcgis online账号

02. 自己发布的服务无法删除:

 03.续订日期才能恢复服务

 

所谓的续订服务的日期大概就是这个吧

 

解决方案

 既然只能发布私有服务,那只能使用api key来解决免登录问题。

进入开发者仪盘表(DashboardAPI keys),发现有一个默认的api-key,可以使用这个key,但我觉得自己新建一个比较好。

 

方案一,使用现有默认key:

①单击View Usage

 ②进入Overview,找到右下角的"Set content item scopes"

 ③选中需要绑定的服务,然后单击右下角Add items

 ④结果

 

⑤如果需要,还可以限制访问的域名

 方案二,新建api-key

①单击左上角新增api key

 ②设置名称和描述

 ③后面的步骤跟方案一相同了:

 

 

代码部分:

const addBIM = (view) => {
  /**
   * apiKey可以在esriConfig设置,也可以在BuildingSceneLayer里面设置
   */
  const apiKey="AAPK1457dc3f91554c6fbde4a85e9826f27bszcOiZPFXyTkT3DClwZbHFvPNvSPNffmWyEF2rfpCeVV5osoQxdS";//此key已经删除一部分,仅作示例用
  // esriConfig.apiKey = apiKey;
  const buildingLayer = new BuildingSceneLayer({
    url: "https://tiles.arcgis.com/tiles/pDXnn9eULK5uzFWf/arcgis/rest/services/wjschoolrvt/SceneServer",
    title: "BIM图层",
    apiKey:apiKey
  });
  view.map.layers.add(buildingLayer);
  view.goTo({
    center: [120.602, 31.145],
    heading: 10,
    zoom: 20,
    tilt: 45
  })
  view.popup.autoOpenEnabled = false;
  // Get the screen point from the view's click event
  view.on("click", function (event) {
    // Search for graphics at the clicked location. View events can be used
    // as screen locations as they expose an x,y coordinate that conforms
    // to the ScreenPoint definition.
    view.hitTest(event).then(function (response) {
      let result = response.results[0];

      if (result) {
        let lon = result.mapPoint.longitude;
        let lat = result.mapPoint.latitude;

        console.log("Hit graphic at (" + lon + ", " + lat + ")", result.graphic);
      } else {
        console.log("Did not hit any graphic");
      }
    });
  });
}
View Code

 

参考网址

01.Set location service scopes(设置api key的关联的服务)