画一片立方体

71 阅读1分钟

通过经纬度范围和规定高度在球上画一片立方体:

DrawRangeGrid(4, [20, 30], [100, 107], [0, 4000])
const LON_LAT_TABLE = [0.10, 0.10, 0.10, 0.10, 0.10]
const HEIGHT_TABLE = [100, 200, 400, 800, 1000]
const DrawRangeGrid = (level, lon_range, lat_range, height_range) => {
  const lonlatResolution = LON_LAT_TABLE[level]
  const heightResolution = HEIGHT_TABLE[level]
  const lon_min = lon_range ? lon_range[0] : -180
  const lon_max = lon_range ? lon_range[1] : 180
  const lat_min = lat_range ? lat_range[0] : -90
  const lat_max = lat_range ? lat_range[1] : 90
  const height_min = height_range ? height_range[0] : 0
  const height_max = height_range ? height_range[1] : Math.pow(2, 16)
  
  console.log("long lat resolution", lonlatResolution)
  console.log("height resolution", heightResolution)
  
  const instances = []

  for (let lon = lon_min; lon <= lon_max - lonlatResolution; lon += lonlatResolution) {
    for (let lat = lat_min; lat <= lat_max - lonlatResolution; lat += lonlatResolution) {
      for (let height = height_min; height <= height_max; height += heightResolution) {
        const graphic = new mars3d.graphic.BoxPrimitive({
          // position: [lat+lonlatResolution/2,lon+lonlatResolution/2,height+heightResolution/2],
          position: new mars3d.LngLatPoint(lat + lonlatResolution / 2, lon + lonlatResolution / 2, height + heightResolution / 2),
          style: {
            dimensions: new Cesium.Cartesian3(1000.0, 1000.0, 1000.0),
            // fill: true,
            // material: Cesium.Color.WHITE.withAlpha(0.01),
            color: Cesium.Color.YELLOW.withAlpha(0.3)
            // opacity: 0.01,
            // outline: true,
            // outlineColor: Cesium.Color.YELLOW
            // clampToGround: true
          },
          id: lat + " " + lon + " " + height,
          attr: { remark: "示例1" }
        })
        instances.push(graphic)
      }
    }
  }

  const combine = new mars3d.graphic.BoxCombine({
    instances
  })

  flyLineGraphicLayer.addGraphic(combine)
}