Arno Fiva, Esri R&D Center Zürich
@arnofiva
Sébastien Szollosi, Esri France
@SzollosiSbasti1
https://www.codethemap.fr/
ESRI EUROPEAN DEVELOPER SUMMIT
Browser requirements
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Create a 3D map</title>
<link rel="stylesheet" href="//js.arcgis.com/4.13/esri/css/main.css">
<script src="//js.arcgis.com/4.13/"></script>
</head>
<body>
<script>
require([
"esri/Map",
"esri/views/SceneView",
"dojo/domReady!"
], function(Map, SceneView) {
var map = new Map({
basemap: "satellite"
});
var view = new SceneView({
container: "viewDiv",
map: map
});
});
</script>
<div id="viewDiv"></div>
</body>
</html>
https://developers.arcgis.com/javascript/
https://developers.arcgis.com/javascript/latest/sample-code/
// Add layer showing housing density in NYC
var housingDensityLayer = new TileLayer({
url: "//tiles.arcgis.com/.../NY_Housing..."
});
map.layers.add(housingDensityLayer);
// Add layer using as portal item
var housingDensityLayer = new TileLayer({
portalItem: {
id: "2d6f6624424a410a994bd9432befb907"
}
});
map.layers.add(housingDensityLayer);
http://www.arcgis.com/home/item.html?id=2d6f6624424a410a994bd9432befb907
// Add points containing information of
// popular buildings in Manhattan
var buildingInfo = new FeatureLayer({
portalItem: {
id: "28cfd79f7c974597aa687417bf5169ca"
}
popupEnabled: true,
outFields: ["NAME", "CNSTRCT_YR", "HEIGHT"],
});
map.layers.add(buildingInfo);
// Add layer showing housing density in NYC
var buildingsLayer = new SceneLayer({
portalItem: {
id: "2e0761b9a4274b8db52c4bf34356911e"
}
});
map.layers.add(buildingsLayer);
TileLayer
, VectorTileLayer
, ImageryLayer
, WMSLayer
, ...GraphicsLayer
, FeatureLayer
, GeoJSONLayer
, ...KMLLayer
, MapNotesLayer
, GeoRSSLayer
Global scene:
|
![]() |
Local scene:
|
![]() |
// Visualize points with 3D icons
buildingInfoLayer.renderer = {
type: "simple",
symbol: new PointSymbol3D({
symbolLayers: [new IconSymbol3DLayer({
size: 18,
resource: {
href: "../images/info.png"
}
})],
verticalOffset: {
screenLength: 100,
maxWorldLength: 100
},
callout: new LineCallout3D()
}};
// Improve perspective
buildingInfoLayer
.screenSizePerspectiveEnabled = false;
// Visualize buildings
buildingLayer.renderer = new SimpleRenderer({
symbol: new MeshSymbol3D({
symbolLayers: [new FillSymbol3DLayer({
material: {
color: [153, 204, 203]
}
})]
})
});
// Add solid edges
material: { ... },
edges: new SolidEdges3D({
color: [50, 50, 50, 0.5]
})
view.environment.lighting
.directShadowsEnabled = true;
// Add buildings scene layer
buildingLayer.visible = true;
// Draw point symbols on top of buildings
buildingInfoLayer.elevationInfo = {
mode: "relative-to-scene"
};
PointSymbol3D | LineSymbol3D | PolygonSymbol3D |
---|---|---|
IconSymbol3DLayer
![]() |
LineSymbol3DLayer
![]() |
FillSymbol3DLayer
![]() |
ObjectSymbol3DLayer
![]() |
PathSymbol3DLayer
![]() |
ExtrudeSymbol3DLayer
![]() |
![]() |
![]() |
![]() |
WebStyleSymbol | Import glTF | New 3D Line Symbols |
Animated WaterSymbol3DLayer
var waterSymbol = {
type: "polygon-3d",
symbolLayers: [{
type: "water",
waveDirection: 180,
color: "#5975a3",
waveStrength: "moderate",
waterbodySize: "medium"
}]
};
https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html
class SceneView {
// Camera specifies the view
camera: Camera;
// Animations, framing
goTo(viewpoint);
// Finding graphics at screen locations
hitTest(screenPoint);
// User events
on(event, callback);
}
Simple, smooth navigation using SceneView.goTo(target, options)
Camera
, Geometry
, Geometry[]
, Graphic
, Graphic[]
Specifying desired scale
, position
, heading
and tilt
Specify animation options: animate
, speedFactor
, duration
, easing
Returns a Promise
which resolves when the animation has finished
SceneView.goTo()
to create smooth camera animations// compute new heading: // current heading + 30 degrees var heading = view.camera.heading + 30;
// go to with heading only preserves view.center view.goTo({ heading: heading });
// Listen to click events
view.on("click",function(event) {
// Check if user clicked on graphic
view.hitTest(event).then(function(response) {
var graphic = response.results[0].graphic;
// Zoom into
view.goTo({
target: graphic,
scale: view.scale
}, {
duration: 3000
});
});
});
const buildingLayer = new BuildingSceneLayer({
portalItem: {
id: "fca0557a79c645e6843b00a7b55ce511"
}
});
view.map.layers.add(buildingLayer);
// Create slice widget
var sliceWidget = new Slice({
view: view
});
// Add widget to the UI
view.ui.add(sliceWidget, "top-right");
// Create measurement widget
var msmtWidget = new DirectLineMeasurement3D({
view: view
});
// Add widget to the UI
view.ui.add(msmtWidget, "top-right");
https://developers.arcgis.com/javascript/latest/sample-code/sandbox/index.html?sample=webscene-basic
require([ "esri/WebScene", "esri/views/SceneView", "dojo/domReady!" ], function(WebScene, SceneView) { var scene = new WebScene({ portalItem: { id: "19dcff93eeb64f208d09d328656dd492" } });
var view = new SceneView({ container: "viewDiv", map: scene }); });
Please Take Our Survey on the App