HFT.js 6.73 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14

// specifiy credentials and assets from Cesium ION account
Cesium.Ion.defaultAccessToken =
	"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJiYjY5ZTAxNy03YTc0LTQyZTYtYjJlMC0xYzYwNTAzNDQ0ZjUiLCJpZCI6MjkwNCwiaWF0IjoxNjM1NDEzOTI0fQ.Xhmt0sD4Dda4Q46FBYew4wPbqlJ4T8U9n1nNNwGyH7o";

// setting up Cesium Viewer
var viewer = new Cesium.Viewer("cesiumContainer", {
	imageryProvider: new Cesium.IonImageryProvider({ assetId: 3 }), //3 bing maps with labels // use Sentinel2 imagery as default assetID:3954
	/////////////////////////////////////////
	// Note the next 3 lines specify that the Cesium Terrain should be used. ION account is needed
	// For a 'flat' Earth the z-offsets below for each of the tilesets needs to be adjusted
	// comment the next 3 lines to remove the Cesium terrain (Resulution approx. 30m)
	/////////////////////////////////////////
	terrainProvider: new Cesium.CesiumTerrainProvider({
15
		url: Cesium.IonResource.fromAssetId(1),
16
17
18
19
20
	}),
});


// set home button extend
21
var extent = Cesium.Rectangle.fromDegrees(9.162794728779428, 48.78605872069245, 9.181827683763427, 48.77616123564855);
22
23
24
25
26
Cesium.Camera.DEFAULT_VIEW_RECTANGLE = extent;
Cesium.Camera.DEFAULT_VIEW_FACTOR = 0;

viewer.scene.globe.enableLighting = true; // set lighting to true

27
28
29
30
31
32
33
// load 3d Tile set of HFT from Cesium ION.
var tileset = viewer.scene.primitives.add(
	new Cesium.Cesium3DTileset({
		url: Cesium.IonResource.fromAssetId(656401),
	})
);

34
35
36
// define a function to zoom to the tileset (invoke later)
var zoomAll = function (tileset) {
	return new Promise(function (resolve, reject) {
37
		if (!tileset) {
38
			reject("Tileset is undifined");
39
40
		}
		viewer.camera.viewBoundingSphere(
41
42
			tileset.boundingSphere,
			new Cesium.HeadingPitchRange(0, -0.5, 400)
43
44
45
		);
		viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
		resolve();
46
47
48
49
	});
};


50

51
	
52
53
54
55
56
57

	var load3DTiles = function () {
		tilesetLOD1 = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
			url: "https://steinbeis-3dps.eu/3DGeoVolumes/collections/Stuttgart/HFTBuildings_3DModel_noTexture/3dtiles/tileset.json" //Cesium.IonResource.fromAssetId(656401),
		}));
	
58
		
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
	
		Cesium.when(tilesetLOD1.readyPromise).then(function (tilesetLOD1) {
			viewer.flyTo(tilesetLOD1)
			tilesetLOD1.style = new Cesium.Cesium3DTileStyle({
				color: {
					conditions: [
						["${featureType} === 'Window'", "color('blue')"],
						["${featureType} === 'WallSurface'", "color('gray')"],
						["${featureType} === 'RoofSurface'", "color('red')"],
						["${featureType} === 'OuterFloorSurface'", "color('white')"],
						["true", "color('white')"],
					],
				},
				show: true
			});
			// tilesetLOD1.style = new Cesium.Cesium3DTileStyle({
			//     color: "color('BLACK', 0.3)",
			//     show: true
			// });
	
			var heightOffset = 50.0;
			var boundingSphere = tilesetLOD1.boundingSphere;
			var cartographic = Cesium.Cartographic.fromCartesian(boundingSphere.center);
			var surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 0.0);
			var offset = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, heightOffset);
			var translation = Cesium.Cartesian3.subtract(offset, surface, new Cesium.Cartesian3());
			tilesetLOD1.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
86
		})
87
88
89
	
	}
	load3DTiles()
90
91
92

	//////// important value. to find the correct value trail and error is needed for a perfect fit
	const BUILDIG_TILESET_HEIGHT_OFFSET = 54;
93
	
94
	tileset.readyPromise.then(function (tileset) {
95
96
		var height = BUILDIG_TILESET_HEIGHT_OFFSET;
		var cartographic = Cesium.Cartographic.fromCartesian(
97
			tileset.boundingSphere.center
98
99
		);
		var surface = Cesium.Cartesian3.fromRadians(
100
101
102
			cartographic.longitude,
			cartographic.latitude,
			0.0
103
104
		);
		var offset = Cesium.Cartesian3.fromRadians(
105
106
107
			cartographic.longitude,
			cartographic.latitude,
			height
108
109
		);
		var translation = Cesium.Cartesian3.subtract(
110
111
112
			offset,
			surface,
			new Cesium.Cartesian3()
113
114
115
		);
		// now shift / translate the tileset by the translation vector defined above
		tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
116

117
		return zoomAll(tileset); // zoom or rather go to the translated tileset
118
119
	});

120
	tileset.show = false;
121

122
123
124
125
126
127
128
129

////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
// HFT PointCloud Tileset.
////////////////////////////////////////////////////////////////////////////////////

const PCOFFSET = 0;

130
var hftLargePC = viewer.scene.primitives.add(
131
132
133
134
135
	new Cesium.Cesium3DTileset({
		url: Cesium.IonResource.fromAssetId(655879),
	})
);

136
hftLargePC.readyPromise.then(function (hftLargePC) {
137
138
	var height = PCOFFSET;
	var cartographic = Cesium.Cartographic.fromCartesian(
139
		hftLargePC.boundingSphere.center
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
	);
	var surface = Cesium.Cartesian3.fromRadians(
		cartographic.longitude,
		cartographic.latitude,
		0.0
	);
	var offset = Cesium.Cartesian3.fromRadians(
		cartographic.longitude,
		cartographic.latitude,
		height
	);
	var translation = Cesium.Cartesian3.subtract(
		offset,
		surface,
		new Cesium.Cartesian3()
	);
	// now shift / translate the tileset by the translation vector defined above
157
	hftLargePC.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
158

159
	return zoomAll(hftLargePC); // zoom or rather go to the translated tileset
160
161
});

162
hftLargePC.style = new Cesium.Cesium3DTileStyle({
163
164
165
166
	color: "color('blue',0.3)",
	// color: "color('red')" ,
	pointSize: 3
});
167
168
169
170




171
///////////////////////////// innenhof PC
172

173
var hftInnehofRGB_PC = viewer.scene.primitives.add(
174
	new Cesium.Cesium3DTileset({
175
		url: Cesium.IonResource.fromAssetId(656854),
176
	})
177
178
);

179
hftInnehofRGB_PC.style = new Cesium.Cesium3DTileStyle({
180
181
	// color: "color('blue',0.3)",	
	// color: "color('red')" ,
182
183
184
185
186
187
188
	pointSize: 3
});



////////////////////////// Control Pointclouds and Tileset with switches

189
190
191
192
193
194
195
var toggleLargePC = function () {
	if (hftLargePC.show === true) {
		hftLargePC.show = false
	}
	else {
		hftLargePC.show = true
	}
196
}
197
198
199
// or use tenrary operator as for the other two 
var toggleRGBPC = function () {
	hftInnehofRGB_PC.show = hftInnehofRGB_PC.show ? false : true;
200
201
}

202
var toggleBuildingTiles = function () {
203
204
205
206
207
208
209
210
211
212
	if (tileset.show === true) {
		tileset.show = false
	}
	else {
		tileset.show = true	
		if (tilesetLOD1.show === true){
			$('#prettyBuildingsCheckbox').prop('checked', false);
			tilesetLOD1.show = false
		}						
	}
213
214
}

215
var togglePrettyBuildingTiles = function () {
216
217
218
219
220
221
222
223
224
225
226
227
228
	// tilesetLOD1.show = tilesetLOD1.show ? false : true;
	if (tilesetLOD1.show === true) {
		tilesetLOD1.show = false		
	}
	else {
		tilesetLOD1.show = true				
		if (tileset.show === true){
			$('#simpleBuildingsCheckbox').prop('checked', false);
			tileset.show = false
		}
	}
	// $('#prettyBuildingsCheckbox').prop('checked', true); // Checks it
//$('#myCheckbox').prop('checked', false); // Unchecks it
229
230
}

231
232