Dataearth学习之从入门到放弃【初出茅庐】

Dataearth也是基于cesium开发的,由于自己水平太菜,所以决定拿这种封装成熟一点的东西弄弄,先培养培养兴趣,而且与cesium的接口其实差不多;

深表感谢,对于这些在技术上做出伟大贡并且无私奉献的人!

一、创建场景

1)加载地形数据

//超图地形服务地址
var url = "https://www.supermapol.com/realspace/services/3D-stk_terrain/rest/realspace/datas/info/data/path";
var vtxfTerrainProvider = new Cesium.CesiumTerrainProvider({
url: url,
requestVertexNormals: true
});

地形服务地址:

超图: "https://www.supermapol.com/realspace/services/3D-stk_terrain/rest/realspace/datas/info/data/path"

DataEarth:【https://dataearth.airlook.com/web/examples/#terrain】【https://dataearth.airlook.com/web/assets/SampleData/DataEarth/dem/dem3/】

影像服务地址:

谷歌:

 var GoogleMap = new Cesium.ImageryLayer(new Cesium.UrlTemplateImageryProvider({
    url: "http://mt1.google.cn/vt/lyrs=s&hl=zh-CN&x={x}&y={y}&z={z}&s=Gali" //谷歌影像      
  }));
  viewer.imageryLayers.add(GoogleMap);

 

 

  //创建Google影像
   var google = new Cesium.UrlTemplateImageryProvider({
     url: 'http://mt0.google.cn/vt/lyrs=s&hl=zh-CN&x={x}&y={y}&z={z}',
     tilingScheme: new Cesium.WebMercatorTilingScheme(),
     maximumLevel: 20
   });
   //添加影像数据
   viewer.imageryLayers.addImageryProvider(google); 

 二、添加矢量数据

  //添加影像数据
  viewer.imageryLayers.addImageryProvider(google);
  var layer = viewer.scene.tilesetLayers.add(
    new Cesium.Cesium3DTileset({
      url: "http://127.0.0.1:9080/data/view/1161530617177522177/",
      id: "1161530617177522177",
      name: "成都建筑物",
      maximumMemoryUsage:1024
    })
  );
  layer.style = new Cesium.Cesium3DTileStyle({
    color: {
      conditions: [
        ['${height} >= 70', 'rgba(45, 0, 75, 0.5)'],
        ['${height} >= 60', 'rgb(102, 71, 151, 0.5)'],
        ['${height} >= 40', 'rgb(170, 162, 204, 0.5)'],
        ['${height} >= 30', 'rgb(224, 226, 238, 0.5)'],
        ['${height} >= 20', 'rgb(252, 230, 200, 0.5)'],
        ['${height} >= 10', 'rgb(248, 176, 87, 0.5)'],
        ['${height} >= 5', 'rgb(198, 106, 11, 0.5)'],
        ['true', 'rgb(127, 59, 8)']
      ]
    }
  });
  viewer.camera.flyTo({
    destination: Cesium.Cartesian3.fromDegrees(104.1, 30.65, 1500),
    orientation: {
      heading: Cesium.Math.toRadians(357.35068101799146),
      pitch: Cesium.Math.toRadians(-31.92035363183754),
      roll: 0.0
    }
  });

  function add() {
    var _height = 0;
    for (var i = 0; i <= 10; i++) {
      setTimeout(function () {
        creatWater(_height += 10)
      }, 1000);
    }
  }

  var water = null;

  function creatWater(_height) {
    if (water != null)
      viewer.scene.waterCollection.remove(water);
    water = new Cesium.DEWater(viewer);
    //水面点集合
    var waterPostion = [];
    waterPostion.push(Cesium.Cartesian3.fromDegrees(104.16, 30.72, _height));
    waterPostion.push(Cesium.Cartesian3.fromDegrees(103.95, 30.72, _height));
    waterPostion.push(Cesium.Cartesian3.fromDegrees(103.95, 30.60, _height));
    waterPostion.push(Cesium.Cartesian3.fromDegrees(104.16, 30.60, _height));
    var waterpolygon = new Cesium.PolygonGeometry({
      polygonHierarchy: new Cesium.PolygonHierarchy(waterPostion),
      perPositionHeight: true
    });
    water.waterPolygon = waterpolygon;
    viewer.scene.waterCollection.add(water);
  }

  var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
  handler.setInputAction(function (evt) {
    var ray = viewer.camera.getPickRay(evt.position);
    var cartesian = viewer.scene.globe.pick(ray, viewer.scene);
    var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
    var lng = Cesium.Math.toDegrees(cartographic
      .longitude);
    //经度值    
    var lat = Cesium.Math.toDegrees(cartographic.latitude);
    //纬度值    
    var mapPosition = {
      x: lng,
      y: lat,
      z: cartographic.height
    };
    console.log(mapPosition.x, mapPosition.y, mapPosition.z);
    //cartographic.height的值为地形高度。
  }, Cesium.ScreenSpaceEventType.LEFT_CLICK);

三、绘制水面

var layer = viewer.scene.tilesetLayers.add(
  new Cesium.Cesium3DTileset({
    url: "http://127.0.0.1:9080/data/view/1161530617177522177/",
    id: "1161530617177522177",
    name: "成都建筑物"
  })
);
layer.style = new Cesium.Cesium3DTileStyle({
  color: {
    conditions: [
      ['${height} >= 70', 'rgba(45, 0, 75, 0.5)'],
      ['${height} >= 60', 'rgb(102, 71, 151, 0.5)'],
      ['${height} >= 40', 'rgb(170, 162, 204, 0.5)'],
      ['${height} >= 30', 'rgb(224, 226, 238, 0.5)'],
      ['${height} >= 20', 'rgb(252, 230, 200, 0.5)'],
      ['${height} >= 10', 'rgb(248, 176, 87, 0.5)'],
      ['${height} >= 5', 'rgb(198, 106, 11, 0.5)'],
      ['true', 'rgb(127, 59, 8)']
    ]
  }
});
viewer.camera.flyTo({
  destination: Cesium.Cartesian3.fromDegrees(104.1, 30.65, 1500),
  orientation: {
    heading: Cesium.Math.toRadians(357.35068101799146),
    pitch: Cesium.Math.toRadians(-31.92035363183754),
    roll: 0.0
  }
});

function add() {
  var _height = 0;
  for (var i = 0; i <= 10; i++) {
    setTimeout(function () {
      creatWater(_height += 10)
    }, 1000);
  }
}

var water = null;

function creatWater(_height) {
  if (water != null)
    viewer.scene.waterCollection.remove(water);
  water = new Cesium.DEWater(viewer);
  //水面点集合
  var waterPostion = [];
  waterPostion.push(Cesium.Cartesian3.fromDegrees(104.16, 30.72, _height));
  waterPostion.push(Cesium.Cartesian3.fromDegrees(103.95, 30.72, _height));
  waterPostion.push(Cesium.Cartesian3.fromDegrees(103.95, 30.60, _height));
  waterPostion.push(Cesium.Cartesian3.fromDegrees(104.16, 30.60, _height));
  var waterpolygon = new Cesium.PolygonGeometry({
    polygonHierarchy: new Cesium.PolygonHierarchy(waterPostion),
    perPositionHeight: true
  });
  water.waterPolygon = waterpolygon;
  viewer.scene.waterCollection.add(water);
}

 

posted @ 2019-08-15 15:01  狐狸先生  阅读(618)  评论(0编辑  收藏  举报