使用 ArcGIS API for JavaScript 以 3D 形式堆叠拉伸多边形

JB9*_*B94 3 gis arcgis qgis arcgis-js-api

我有多边形几何图形,并使用 a 以 3D 形式将它们可视化ExtrudeSymbol3DLayer,如 SDK文档示例中所述:

var symbol = {
  type: "polygon-3d",  // autocasts as new PolygonSymbol3D()
  symbolLayers: [{
    type: "extrude",  // autocasts as new ExtrudeSymbol3DLayer()
    size: 5,  // 5 meters in height
    material: { color: "red" }
  }]
};
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

有什么办法可以将这些 3D 挤压件堆叠在一起吗?例如,如果我有纽约市的几何图形,我想用一种颜色从底部拉伸到大约 5m,用一种颜色拉伸 5m 到 10m,等等。有点像制作堆积条形图,但是以更多地理方式。任何意见将不胜感激!

Arn*_*iva 7

这可以通过挤压几何图形并使用elevationInfo图层上的属性将它们放置在一定高度来实现。下面的示例假设您有一个具有多边形几何形状的图层(例如FeatureLayerGeoJSONLayer)。

对于挤出,告诉图层用ExtrudeSymbol3DLayer. 在下面的代码片段中,所有多边形的高度均为 5 米。

layer.renderer = {
  type: "simple",
  symbol: {
    type: "polygon-3d",
    symbolLayers: [
      {
        type: "extrude",
        size: 5, // height in meters
        material: {
          color: "red"
        }
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

之后,您可以通过将挤出的多边形放置在特定高度来使它们飞行relative-to-ground。下面的示例将渲染距地面 10 米的所有多边形。

layer.elevationInfo = {
  mode: "relative-to-ground",
  offset: 10,
  unit: "meters"
}
Run Code Online (Sandbox Code Playgroud)

多边形还不会显示为堆叠的,因为它们都具有相同的颜色、高度和距地面的标高。我们基本上希望在上面的代码片段中为每个多边形拥有不同的值。

以下示例代码通过添加来实现此目的

  • Arcade表达式elevationInfo
  • 多边形的拉伸高度VisualVariable
  • UniqueValueRenderer为每个多边形使用不同的颜色

它们都取决于面要素的属性,因此可以通过更改属性值进行调整。

layer.elevationInfo = {
  mode: "relative-to-ground",
  offset: 10,
  unit: "meters"
}
Run Code Online (Sandbox Code Playgroud)

这是一个运行示例,显示纽约中央公园的一些拉伸多边形。 https://codepen.io/arnofiva/pen/4071d4e79a3cb921f42d6a9e83f5b418?editors=1010

在此输入图像描述