<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />
<title>BuildingSceneLayer with Slice widget | Sample | ArcGIS API for JavaScript 4.18</title>
<style>
html,
body,
#viewDiv {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
</style>
<link href="https://js.arcgis.com/4.17/esri/themes/light/main.css" rel="stylesheet" type="text/css" />
<script src="https://js.arcgis.com/4.17/"></script>
<script>
require(["esri/Map",
"esri/WebScene",
"esri/views/SceneView",
"esri/layers/BuildingSceneLayer",
"esri/widgets/Slice",
"esri/widgets/Slice/SlicePlane",
"esri/widgets/LayerList", "esri/tasks/support/Query",
"esri/core/Collection"
], function (Map,
WebScene,
SceneView,
BuildingSceneLayer,
Slice,
SlicePlane,
LayerList, Query,
Collection
) {
// Create the BuildingSceneLayer and add it to the webscene
var buildingLayer = new BuildingSceneLayer({
//url:"https://192.168.0.70/server/rest/services/Hosted/nanshafirstdesign/SceneServer"
url: "https://tiles.arcgis.com/tiles/V6ZHFr6zdgNZuVG0/arcgis/rest/services/BSL__4326__US_Redlands__EsriAdminBldg_PublicDemo/SceneServer"
//url: "https://tiles.arcgis.com/tiles/V6ZHFr6zdgNZuVG0/arcgis/rest/services/Bldg_E_Color_UC2020_demo/SceneServer"
//url: "https://tiles.arcgis.com/tiles/V6ZHFr6zdgNZuVG0/arcgis/rest/services/Esri_Admin_Building/SceneServer"
});
var map = new Map({
layers: [buildingLayer]
});
var view = new SceneView({
container: "viewDiv",
map: map
});
view.when(function () {
view.extent = buildingLayer.fullExtent;
});
var query = new Query();
//query.where = "1=1";
console.log('buildingLayer', buildingLayer)
buildingLayer.outFields = ["*"];//!!!这里必须写,不然返回的features属性字段只有objectid
view.whenLayerView(buildingLayer).then(function (bslv) {
//注意:有的图层中sublayerViews中的items是[],无法进入后边的循环和查询,这个时候就要找你图层的问题了。
//上边引用的服务地址就是这个样子,所以无法继续查询!!!
bslv.sublayerViews.forEach(function (componentSublayerView) {
componentSublayerView.queryFeatures(query).then(function (result) {
console.log(result.features);
//有的时候会要求查询到的features,高亮显示。这个时候需要使用highlight,具体用法查询官网api
// highlight require中添加对应的引用,并自行定义一个全局变量即可
// if (highlight) {
// highlight.remove();
// }
// highlight = bslv.highlight(result.features);
});
});
});
});
</script>
</head>
<body>
<div id="viewDiv">
</div>
</body>
</html>