SM_webGL三维开发note(二)

一、webGL三维开发

…\supermap-iserver-10.0.1-win64-zip\iClient\for3D\webgl\zh目录下

  • \examples --示例程序(源代码方便开发人员快速构建应用)
  • \Build\Cesium --开发脚本库
  • \index.html --首页,整合示范程序、类参考说明以及专题技术文档
  • iClient3D for webgl具有的能力:在这里插入图片描述
  • 示例、API:
    http://support.supermap.com.cn:8090/webgl/examples/examples.html#layer
    看cesium API文档
    http://support.supermap.com.cn:8090/webgl/Build/Documentation/index.html
            webGL 应用的倾斜摄影: 加载倾斜摄影模型–>对它进行单体化
  • http://www.supermapol.com/earth/
二、webGL–helloworld:
  • 1.引入脚本库
    在这里插入图片描述
    代码路径修改为: paths: {
    ‘Cesium’: ‘…/Build/Cesium/Cesium’ },
    新建index.html 文件,添加下面代码块代码
  • 2.添加三维场景的装载容器
  • 3.显示三维场景
<!DOCTYPE html>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html charset=utf-8"/>
		<title>helloWorldwebGL</title>
		<link href="css/widgets.css"rel="stylesheet">
		<script type="text/javascript"src="js/require.min.js"data-main="js/main"></script>
	</head>
	<body>
		<div id="cesiumContainer"style="width:100%;height:100%"></div> <!--div 命名的对象id用来承载整个三维场景-->
		<script type="text/javascript">
				var viewer;
				function onload(Cesium){
						viewer=new	Cesium.Viewer('cesiumContainer');<!--Viewer包含三维球和以外的东西(弹窗等)-->
						var scene=viewer.scene;<!--Viewer包含三维场景,(通过)显示其就可以显示三维场景;定义scene对象-->
				}
		</script>
	</body>
</html>
  • 4.发布工程
    在这里插入图片描述
      电脑开启服务:startup.bat ;使用浏览器访问: http://localhost:8090/helloWorld/index.html
三、Viewer中的数据组织

在这里插入图片描述
不完整例子编码诠释上图:scene.primitives.add(new Cesium.Primitive({
geometryInstances : instance,
appearance : new Cesium.EllipsoidSurfaceAppearance({
material : Cesium.Material.fromType(‘Checkerboard’)
})
}));//primitives是集合,可以使用add方法添加树形下面的实例

var collection = new Cesium.PrimitiveCollection();

collection.add(billboards);

new Cesium.S3MInstance(context, index, ownerGroup, options) S3M模型实例对象。

Name Type Description
context Context context对象。
index Number 该实例所在组的索引位置。
ownerGroup Object 该实例所在组。
options Object 对象具有以下属性:

//new S3MTilesLayer instance //通过该图层类实现加载缓存

var S3MTilesLayer = new S3MTilesLayer({
gl : gl,
servers : [“http://localhost:8090”],
urls : [“http://localhost:8090/data/tile_001.xml”,“http://localhost:8090/data/tile_002.xml”],
position : [10,20],
name : [“S3MTilesLayer”]
});
TerrainProvider添加到**图层中 再添加到scene中 从上图中看出(同一时间)地形只有(可以添加)1个,影像有多个
//camera帮助我们定位的

四、客户端加载数据–保存的场景

打开startup.bat;访问:localhost:8090/iserver/manager 主页->服务管理页面->三维服务下有数据(3D-CBD)-点击->进入rest服务根目录下(localhost:8090/iserver/services/3D-CBD/rest/realspace/scenes/CBD ) (支持浏览s3m缓存)

  • 1.初始化Viewer和Scene(场景类)
    加载保存在工作空间中的三维场景localhost:8090/iserver/services/3D-CBD/rest/realspace
  • 2.获取场景服务地址
  • 3.打开场景
    通过Scene.open(url)方法加载
  • 4.设置相机视角,转换坐标

以下编码 均未运行!

<!DOCTYPE html>
<html >
	<head>
		<meta charset="utf-8">
		<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
		<title>数据加载</title>
		<link href="css/widgets.css" rel="stylesheet">
		<script type="text/javascript" src="js/require.min.js" data-main="js/main"></script>
		<script type="text/javascript">
			var viewer,url;
			function onload(Cesium){
				viewer=new Cesium.Viewer('cesiumContainer');
				var scene= viewer.scene;
				
				var url="http://localhost:8090/iserver/services/3D-CBD/rest/realspace";
				var promise=scene.open(url);//
				Cesium.when(promise,function(layers){
				         scene.camera.setView({destination:new       Cesium.Cartesian3.fromDegrees(116.45438,39.910263,2000)});
						   });										
			}	
		</script>	
	</head>
	<body>
		<div id="cesiumContainer" style="width:100%;height:100%"></div>
	</body>
</html>
  • 访问 localhost:8090/helloWorld/addData-2.html
五、客户端加载数据–s3m(Spatial 3D Model)缓存图层
  • 加载三维切片缓存—*.s3m格式
  • 倾斜摄影模型、BIM模型、点云数据、精细模型、矢量数据等。
  • 通过Scene.addS3MTilesLayerByScp(url,options) 的方式
    • 1.获取S3M图层服务地址

    • 2.添加S3M图层服务

    • 3.设置相机视角,转换坐标

      找到发布的(数据服务 data-bim/rest),三维服务下的3D-bim/rest
      localhost:8090/iserver/services/3D-bim/rest/realspace/datas/bim/config 再点击获取配置文件 得到此 需要的地址

<!DOCTYPE html>
<html >
	<head>
		<meta charset="utf-8">
		<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
		<title>数据加载</title>
		<link href="css/widgets.css" rel="stylesheet">
		<script type="text/javascript" src="js/require.min.js" data-main="js/main"></script>
		<script type="text/javascript">
			var viewer,url;
			function onload(Cesium){
				viewer=new Cesium.Viewer('cesiumContainer');
				var scene= viewer.scene;
				// 博文中步骤五 添加BIM模型
				var url = 'http://localhost:8090/iserver/services/3D-bim/rest/realspace/datas/bim/config';
				var promise = scene.addS3MTilesLayerByScp(url,{name:'bim'});
				Cesium.when(promise,function(layer){
					//设置相机视角,将经度、纬度、高度的坐标转换为笛卡尔坐标
					scene.camera.setView({destination:Cesium.Cartesian3.fromDegrees(106.453557529491150,29.476442887855072,100)});		
				});
					*/										
			}	
		</script>	
	</head>
	<body>
		<div id="cesiumContainer" style="width:100%;height:100%"></div>
	</body>
</html>
六、客户端加载数据–影像、CesiumTerrainProvider
/加载  影像
				var imageryLayers=viewer.imageryLayers;
				地形可以加载一个,但影像可以加载多个
				var imageryProvider=new Cesium.SuperMapImageryProvider({
				url:'http://www.supermapol.com/realspace/services/3D-zf_tin_image_z/rest/realspace/datas/image'
				});
				var layer=imageryLayers.addImageryProvider(imageryProvider);
				viewer.flyTo(layer);

加载地形
				var viewer=new Cesium.Viewer('cesiumContainer',{
					terrainProvider:new Cesium.CesiumTerrainProvider({
					url:'http://www.supermapol.com/realspace/services/3D-zf_tin_image_z/rest/realspace/datas/info',
					requestWaterMask:true,
					requestVertexNormals:true,
					isSct:true//地形服务源自SuperMap iServer发布时需设置isSct为true		
				
					})
				});
				
七、客户端加载数据–影像
  • var imageryProvider=new Cesium.SuperMapImageryProvider
    imageryProvider支持加载的数据类型:
    在这里插入图片描述
八、客户端加载数据–KML
  • KML可包含点、线、面、地标、模型、动画模型等要素
<tilt>0</tilt>
<roll>0</roll>
</Orientation>
<Scale>
<x>1</x>
<y>1</y>
<z>1</z>
</Scale>
  <Link><href>../models/crane.gltf</href></Link>
  </Model>
  </Placemark>
  </kml>

//上面..中包含编码
viewer.dataSources.add(Cesium.KmlDataSource.load('kml/crane.kml',{
	camera:viewer.scene.camera,
	canvas:viewer.scene.canvas
}));

九、客户端加载数据–CZML

CZML是一种JSON格式的字符串,其包含点、线、地标、模型等元素
用于描述与时间有关的动画场景,加载方式如下

var dataSource=new Cesium.CzmlDataSource();
var czml=‘data/simple.czml’;
dataSource.load(czml);
viewer.dataSources.add(dataSource);

十、客户端加载数据–GeoJson

GeoJson是较为通用的一种网络矢量数据传输方案,加载方式如下:

viewer.dataSources.add(Cesium.GeoJsonDataSource.load('mydata.geojson',{
	stroke:Cesium.Color.BLUE.withAlpha(0.8),
	strokeWidth:2.3,
	fill:Cesium.Color.RED.withAlpha(0.3),
	clampToGround:true
}));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值