Hi everyone!
Below is the sample code provided by ESRI from this link Switch view from 2D to 3D | ArcGIS API for JavaScript 4.10. Using the sample code I added two widgets (search and directions widgets) but search widget is not working with directions widget and If I remove the directions widget the search widget is working fine. Is there anyone encountered this kind of issue? How to fix this issue?
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
<title>Switch view from 2D to 3D - 4.10</title>
<style>
html,
body,
#viewDiv {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
#infoDiv{
position: absolute;
top: 15px;
left: 60px;
}
#infoDiv input {
border: none;
box-shadow: rgba(0, 0, 0, 0.3) 0px 1px 2px;
}
</style>
<link rel="stylesheet" href="https://js.arcgis.com/4.10/esri/css/main.css">
<script src="https://js.arcgis.com/4.10/"></script>
<script>
require([
"esri/views/MapView",
"esri/views/SceneView",
"esri/WebMap",
"esri/WebScene",
"esri/widgets/Search",
"esri/widgets/Directions"
], function (MapView, SceneView, WebMap, WebScene, Search, Directions) {
var switchButton = document.getElementById("switch-btn");
var appConfig = {
mapView: null,
sceneView: null,
activeView: null,
searchWidget: null,
directionsWidget: null,
container: "viewDiv"
};
var initialViewParams = {
zoom: 12,
center: [-122.43759993450347, 37.772798684981126],
container: appConfig.container
};
var webmap = new WebMap({
portalItem: {
id: "7ee3c8a93f254753a83ac0195757f137"
}
});
var scene = new WebScene({
portalItem: {
id: "4f081bc26af2452b91f36fa66ae586c1"
}
});
appConfig.mapView = createView(initialViewParams, "2d");
appConfig.mapView.map = webmap;
appConfig.activeView = appConfig.mapView;
initialViewParams.container = null;
initialViewParams.map = scene;
appConfig.sceneView = createView(initialViewParams, "3d");
switchButton.addEventListener("click", function(){
switchView();
});
function switchView(){
var is3D = appConfig.activeView.type === "3d";
var activeViewpoint = appConfig.activeView.viewpoint.clone();
appConfig.activeView.container = null;
if (is3D){
appConfig.mapView.viewpoint = activeViewpoint;
appConfig.mapView.container = appConfig.container;
appConfig.activeView = appConfig.mapView;
switchButton.value = "3D";
} else {
appConfig.sceneView.viewpoint = activeViewpoint;
appConfig.sceneView.container = appConfig.container;
appConfig.activeView = appConfig.sceneView;
switchButton.value = "2D";
}
}
function createView(params, type){
var view;
var is2D = type === "2d";
if(is2D){
view = new MapView(params);
view.when(function(){
appConfig.searchWidget = new Search({
view: view
});
view.ui.add(appConfig.searchWidget, "top-right");
appConfig.directionsWidget = new Directions({
view: view
});
view.ui.add(appConfig.directionsWidget, "top-right");
});
return view;
} else {
view = new SceneView(params);
view.when(function(){
appConfig.searchWidget = new Search({
view: view
});
view.ui.add(appConfig.searchWidget, "top-right");
appConfig.directionsWidget = new Directions({
view: view
});
view.ui.add(appConfig.directionsWidget, "top-right");
});
}
return view;
}
});
</script>
</head>
<body>
<div id="viewDiv"></div>
<div id="infoDiv">
<input class="esri-component esri-widget--button esri-widget esri-interactive"
type="button" id="switch-btn" value="3D">
</div>
</body>
</html>