3D标注线不适用于客户端图形

时间:2017-12-04 16:42:27

标签: arcgis arcgis-js-api

我正在努力使用带有客户端图形的标注线。

我关注了使用the "Point styles for cities" example中的要素图层的the "LyonPointsOfInterest (FeatureServer)"

但它不适用于根据Web服务返回的数据创建客户端图形的要素图层。

3d标注线有限制吗?

这是我的代码段:

  1. 根据图层定义创建要素图层:

    featureLayer = new FeatureLayer({
      fields: this.layerDefinition.fields,
      objectIdField: this.layerDefinition.objectIdField,
      geometryType: this.layerDefinition.geometryType,
      id: this.layerId
    });
    
  2. 设置高程和特征缩减和渲染器:

    featureLayer.elevationInfo = {
      // elevation mode that will place points on top of the buildings or other SceneLayer 3D objects
      mode: "relative-to-scene"
    };
    // feature reduction is set to selection because our scene contains too many points and they overlap
    featureLayer.featureReduction = {
      type: "selection"
    };
    
    featureLayer.renderer = this._getUniqueValueRenderer() as any as Renderer// callout render
    
  3. 此处为渲染器代码:

    _getUniqueValueRenderer() {
      let verticalOffset = { // verticalOffset shifts the symbol vertically
        screenLength: 150, // callout line length
        maxWorldLength: 200,
        minWorldLength: 35
      },
      uniqueValueRenderer = {
        type: "unique-value", // autocasts as new UniqueValueRenderer()
        field: "AQHI",
        uniqueValueInfos: [{
          value: 1,
          symbol: this._get3DCallOutSymbol(verticalOffset, "Museum.png", "#D13470")
        }, {
          value: 2,
          symbol: this._get3DCallOutSymbol(verticalOffset, "Restaurant.png", "#F97C5A")
        }, {
          value: 3,
          symbol: this._get3DCallOutSymbol(verticalOffset, "Church.png", "#884614")
        }, {
          value: 4,
          symbol: this._get3DCallOutSymbol(verticalOffset, "Hotel.png", "#56B2D6")
        }, {
          value: 5,
          symbol: this._get3DCallOutSymbol(verticalOffset, "Park.png", "#40C2B4")
        }, {
          value: 6,
          symbol: this._get3DCallOutSymbol(verticalOffset, "Museum.png", "#D13470")
        }, {
          value: 7,
          symbol: this._get3DCallOutSymbol(verticalOffset, "beer.png", "#F97C5A")
        }, {
          value: 8,
          symbol: this._get3DCallOutSymbol(verticalOffset, "senate.png", "#884614")
        }, {
          value: 9,
          symbol: this._get3DCallOutSymbol(verticalOffset, "Hotel.png", "#56B2D6")
        }, {
          value: 10,
          symbol: this._get3DCallOutSymbol(verticalOffset, "Park.png", "#40C2B4")
        }
      ]};
      return uniqueValueRenderer;
    }
    
    _get3DCallOutSymbol(verticalOffset: any, iconName: string, color: string) {
      return {
        type: "point-3d", // autocasts as new PointSymbol3D()
        symbolLayers: [{
          type: "icon", // autocasts as new IconSymbol3DLayer()
          resource: {
            href: this.iconPath + iconName
          },
          size: 20,
          outline: {
            color: "white",
            size: 2
          }
        }],
        verticalOffset: verticalOffset,
        callout: {
          type: "line", // autocasts as new LineCallout3D()
          color: "white",
          size: 2,
          border: {
            color: color
          }
        }
      };
    }
    
  4. 将源设置为基于Web服务数据生成的图形数组

    featureLayer.source = graphics;
    

1 个答案:

答案 0 :(得分:0)

您不应在实例中使用this.layerDefinition作为新的FeatureLayer,而是将其放入新的var中。同意this.layerId

var layerDef = this.layerDefinition;
var lyrId = this.layerId;
featureLayer = new FeatureLayer({
  fields: layerDef.fields,
  objectIdField: layerDef.objectIdField,
  geometryType: layerDef.geometryType,
  id: lyrId
});

因为此地点的this.位于new Feature()

的范围内