我正在嘗試顯示用戶選擇的多邊形的面積測量值。我向 WebScene 添加了一個 AreaMeasurementLayer 實體。
我在視圖中添加了一個單擊事件偵聽器。
但是,當我在加載的地圖上單擊任何地塊時,它沒有顯示任何區域或周長資訊。
我已經在我的代碼中宣告了它們,不知道出了什么問題。
<html>
<head>
<meta charset="utf-8" />
<meta
name="viewport"
content="initial-scale=1,maximum-scale=1,user-scalable=no"
/>
<style>
html,
body,
#viewDiv {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
#info {
padding: 1em;
max-width: 300px;
}
</style>
<link
rel="stylesheet"
href="https://js.arcgis.com/4.21/esri/themes/light/main.css"
/>
<script src="https://js.arcgis.com/4.21/"></script>
<script>
require([
"esri/WebScene",
"esri/layers/AreaMeasurementLayer",
"esri/views/SceneView"
], (WebScene, AreaMeasurementLayer, SceneView) => {
const map = new WebScene({
portalItem: {
id: "340f87d4f3ef4184b04bcd76261cdf9c"
}
});
const view = new SceneView({
container: "viewDiv",
map,
qualityProfile: "high"
});
const areaMeasurementLayer = new AreaMeasurementLayer();
map.layers.add(areaMeasurementLayer);
view.when(() => {
const hitTestLayers = view.map.layers.filter();
view.on("click", async (event) => {
// remove the current measured geometry from the layer when the user clicks on the map
areaMeasurementLayer.geometry = null;
// get results only from the "Parcels" layer
const hitTestResult = await view.hitTest(event, {
include: hitTestLayers
});
if (hitTestResult.results.length > 0) {
const geometry = hitTestResult.results[0].graphic.geometry;
// pass the polygon geometry to the areaMeasurementLayer to display a new measurement
areaMeasurementLayer.geometry = geometry;
// zoom to the selected geometry
view.goTo(geometry);
}
});
});
view.ui.add("info", "top-right");
});
</script>
</head>
<body>
<div id="viewDiv"></div>
<div id="info" class="esri-widget">
Click on the parcel polygon to display its area and perimeter.
</div>
</body>
</html>
uj5u.com熱心網友回復:
您沒有宣告過濾器功能,這就是為什么它沒有selecting any parcel并顯示其區域資訊。
像這樣定義你的過濾器
const hitTestLayers = view.map.layers.filter(
(layer) => layer.title === "Parcels"
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/335679.html
