SlideShare a Scribd company logo
VTS: Getting Started with 3D Map Application
Development
www.melown.com
Ladislav Horký, Head of Photogrammetry, Melown Technologies SE
Melown Tech is a software-development company
in the 3D mapping business
www.melown.com
What our software does?
I) Computer-vision and deep-learning driven reality capture
www.melown.com
What our software does?
II) 3D data fusion, virtual landscape streaming and rendering
www.melown.com
Applications
• VR and AR
• interactive simulations
• gaming
• geospatial (3D mapping)
www.melown.com
What this talk is about
I. VTS – an alternative approach to 3D mapping
II. VTS components and concepts
III. Your frst JavaScript 3D map application
www.melown.com
VTS – an alternative approach to
3D mapping
www.melown.com
There is CesiumJS …
… there are Google maps, so ...
www.melown.com
… who needs another 3D map browser?
www.melown.com
virtuallandscape
Who needs another 3D map browser?
• VTS consists of the streaming servers, data management tool suite and the clients
• Tight client-server integration: repetitive and static tasks are moved to BE
integrated system
• Generic geospatial applications
• Augmented reality, virtual reality, gaming
www.melown.com
Who needs another 3D map browser?
• VTS is already the second generation of the technology
• Successor of the proprietary TS renderer, developed in 2013
• Designed to directly compete with Google Maps in Czechia
• Pioneer of 3D content streaming
mature
www.melown.com
… who needs mature integrated system for
virtual-landscape streaming and rendering?
Everyone
!!
who works with lots of 3D data
www.melown.com
VTS strong points
• Data scalability: TBs of 3D and 2.5D data can be fused together within VTS
• High performance streaming servers: bandwidth-optimized dynamic TIN
and orthophoto generation, static tiles streaming
• Lightweight and fast client: available for web, desktop and UNITY
“The more data you have, the more VTS shines.”
www.melown.com
VTS components and concepts
www.melown.com
Streaming servers
VTS Mapproxy
➔
Dynamically converts non-VTS resources to surfaces, bound layers and
free layers
➔
Powerful SRS transforming TMS server
VTSD
➔
Streams static data and fusion products (glues) from VTS storage
➔
Serves mapConfg.json(s) – translated from storage view
www.melown.com
Data management tool suite
vts tool
➔
Swiss-knife of the VTS data management
➔
Add, removes data from the VTS storage, performs the data fusion
generatevrtwo, mapproxy-calipers, mapproxy-tiling, ...
➔
Preparation and preprocessing of data for the VTS Mapproxy
www.melown.com
VTS clients
Web
➔
WebGL, JavaScript based
Desktop
➔
Available on Linux, Windows, Mac, iOS
➔
Common core is available as a rendering-engine independent library
UNITY
➔
Game engine plugin
www.melown.com
Your frst JavaScript
3D map application
www.melown.com
What you need to write your frst app
Browser
– cdn.melown.com
– Clone it from GitHub
– Add it to your project using NPM
mapConfg.json
– Grab one from live JSFiddle examples
– Grab one from Melown Tech website
– Install your instance VTS-Backend: Linux, single debian package, sample
data included
www.melown.com
Basic app: HTML
<html>
<head>
<title>Cadastre sample</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="//cdn.melown.com/libs/vtsjs/builtin/v2/browser/vts-browser.min.css"></link>
<script type="text/javascript" src="//cdn.melown.com/libs/vtsjs/builtin/v2/browser/vts-browser.min.js"></script>
<script type="text/javascript" src="./main.js"></script>
</head>
<body style = "padding: 0; margin: 0;" onload="startDemo()">
<div id="map-div" style="width:100%; height:100%;"></div>
</body>
</html>
Load the browser from CDN
www.melown.com
Basic app: HTML
<html>
<head>
<title>Cadastre sample</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="//cdn.melown.com/libs/vtsjs/builtin/v2/browser/vts-browser.min.css"></link>
<script type="text/javascript" src="//cdn.melown.com/libs/vtsjs/builtin/v2/browser/vts-browser.min.js"></script>
<script type="text/javascript" src="./main.js"></script>
</head>
<body style = "padding: 0; margin: 0;" onload="startDemo()">
<div id="map-div" style="width:100%; height:100%;"></div>
</body>
</html>
Load JavaScript of our app
Full page div that will contain the
map, startDemo() called once the
page is loaded
www.melown.com
Basic app: JavaScript
var browser = null;
function startDemo() {
browser = vts.browser('map-div', {
map: 'http://localhost:8070/store/map-config/cadastre/mapConfig.json'
});
}
MapConfg.json contains URLs of resources and basic
metadata to allow the browser render the scene.
www.melown.com
Basic app: the result
www.melown.com
Setting custom initial view: JavaScript
...
browser = vts.browser('map-div', {
map: 'http://localhost:8070/store/map-config/cadastre/mapConfig.json',
view: {
surfaces: {
gtopo30-dem-global: [ "bmng" ],
cz-dem-local: [ "mapy-cz" ],
Jenstejn-village: [],
Jenstejn-center: []
},
freeLayers: {}
}
});
...
Surfaces derived from DEMs,
dynamically generated
Static 3D surfaces
www.melown.com
Setting custom initial view: JavaScript
...
browser = vts.browser('map-div', {
map: 'http://localhost:8070/store/map-config/cadastre/mapConfig.json',
view: {
surfaces: {
gtopo30-dem-global: [ "bmng" ],
cz-dem-local: [ "mapy-cz" ],
Jenstejn-village: [],
Jenstejn-center: []
},
freeLayers: {}
}
});
...
Bound layers (imagery) draped over
DEM surfaces.
Hide vector and raster cadastre
www.melown.com
Setting custom initial view: JavaScript
...
browser = vts.browser('map-div', {
map: 'http://localhost:8070/store/map-config/cadastre/mapConfig.json',
view: {
surfaces: {
gtopo30-dem-global: [ "bmng" ],
cz-dem-local: [ "mapy-cz" ],
Jenstejn-village: [],
Jenstejn-center: []
},
freeLayers: {}
}
});
...
Symbolic names of resources
are defned in mapConfg.json
www.melown.com
Basic app: after hiding free layers
www.melown.com
Switching cadastre overlays: JavaScript
var flswitch = null;
. . .
Function startDemo () {
. . .
var panel = browser.ui.addControl('flswitch-panel',
'<form id="fl-switch-div" class="fl-switch-div">' +
'<legend>Display cadastre</legend>' +
'<input name="cadastre" type="radio" value="none" checked="checked"> None <br>' +
'<input name="cadastre" type="radio" value="vector"> Vector <br>' +
'<input name="cadastre" type="radio" value="raster"> Raster' +
'</form>'
);
flswitch = panel.getElement('fl-switch-div');
flswitch.on('change', onSwitchFreeLayer);
}
browser.ui takes care of event propagation, provides
convenience wrapper around DOM elements
HTML snippet of control element: form
with three radio buttons
www.melown.com
Switching cadastre overlays: JavaScript
var flswitch = null;
. . .
Function startDemo () {
. . .
var panel = browser.ui.addControl('flswitch-panel',
'<form id="fl-switch-div" class="fl-switch-div">' +
'<legend>Display cadastre</legend>' +
'<input name="cadastre" type="radio" value="none" checked="checked"> None <br>' +
'<input name="cadastre" type="radio" value="vector"> Vector <br>' +
'<input name="cadastre" type="radio" value="raster"> Raster' +
'</form>'
);
flswitch = panel.getElement('fl-switch-div');
flswitch.on('change', onSwitchFreeLayer);
}
Storing form handle as a global variable,
registering on-change callback
www.melown.com
Switching cadastre overlays: JavaScript
function onSwitchFreeLayer() {
var view = browser.map.getView();
switch (flswitch.getElement().elements['cadastre'].value) {
case 'none':
view.freeLayers = {};
break;
case 'vector':
view.freeLayers = { "cadastre" : { "style" : "/store/stylesheet/cuzk-cadastre-style.json" } };
break;
case 'raster':
view.freeLayers = { "samples-czdem" : { "boundLayers": ["cadastre-raster"],
"depthOffset" : [-5, 0, -40] } };
break;
}
browser.map.setView(view);
}
Query the current view
Hide all free layers Display vector free layer, set how
the lines, points and labels will look
Display transparent raster
cadastre draped over mesh
free layer
Apply modifed view
www.melown.com
Switching cadastre overlays: HTML
<html>
<head>
...
<style>
.fl-switch-div {
font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;
position: absolute;
right: 30px;
bottom: 30px;
background-color: #eee;
padding: 10px 20px;
border-radius: 5px;
border: solid 1px #000;
– }
– </style>
</head>
...
Style for the control element div
www.melown.com
Switching cadastre overlays
www.melown.com
Switching surfaces
www.melown.com
Sources of VTS information
vtsdocs.melown.com
github.com/Melown
github.com/Melown/vts-browser-js/wiki/Examples
Live Demo: http://altair.mlwn.se:8070/app/dar-es-salaam/
Getting involved in VTS development
contact: community@melown.com
or fork us on GitHub ;-)
www.melown.com

More Related Content

PDF
The Web map stack on Django
PDF
3D-Geospatial app-development-with-no-internet-access
PDF
server-side-fusion-vts
PDF
Beyond Pretty Pictures: Topographic Labels in 3D Maps of High Terrain
PDF
VTS 3D Map Streaming and Rendering Stack
PPTX
Supporting an Advanced User Experience Using FIWARE
PPT
Cloud Computing and HTML5, 2010
PDF
State of the Art Web Mapping with Open Source
The Web map stack on Django
3D-Geospatial app-development-with-no-internet-access
server-side-fusion-vts
Beyond Pretty Pictures: Topographic Labels in 3D Maps of High Terrain
VTS 3D Map Streaming and Rendering Stack
Supporting an Advanced User Experience Using FIWARE
Cloud Computing and HTML5, 2010
State of the Art Web Mapping with Open Source

Similar to vts-getting-started (20)

PDF
Dynamic Graph Plotting with WPF
PDF
THE OGC STANDARDS AND GEO-PLATFORM BASED WEB APPLICATION FOR SEISMIC EVENTS M...
PDF
MongoDB World 2019: Get the Best of Geo Data with MongoDB Atlas and MongoDB C...
PDF
2018 08-29-foss4g-beyond-pretty-pictures-topographic-labels-in-3d-maps-of-hig...
PPTX
Shape12 6
PDF
GI2013 ppt buono_seismic_geo_sdi
PDF
Developing Spatial Applications with Google Maps and CARTO
PPTX
Building mobile apps with the ArcGIS api for Javascript, Esri, Andy Gup and A...
PPTX
3 Approaches to Mobile - An A to Z Primer.
PDF
Analyzing the Performance of Mobile Web
PDF
Cloud Computing in Mobile
PDF
A Method for Template-based Architecture Modeling and its Application to Digi...
PPTX
Criando jogos para o windows 8
PPTX
OutSystems: A more efficient way to build apps!
PPTX
C++ and UIs: an unorthodox approach
PDF
Mobile Interfaces to Mainframe Applications - Architecture Considerations
PPT
Location Based Services Without the Cocoa
PPT
Web enabling your survey business ppt version
PDF
Act 00085 i towns, nouveau framework pour la visualisation 3d web
PDF
Act 00085 i towns, nouveau framework pour la visualisation 3d web
Dynamic Graph Plotting with WPF
THE OGC STANDARDS AND GEO-PLATFORM BASED WEB APPLICATION FOR SEISMIC EVENTS M...
MongoDB World 2019: Get the Best of Geo Data with MongoDB Atlas and MongoDB C...
2018 08-29-foss4g-beyond-pretty-pictures-topographic-labels-in-3d-maps-of-hig...
Shape12 6
GI2013 ppt buono_seismic_geo_sdi
Developing Spatial Applications with Google Maps and CARTO
Building mobile apps with the ArcGIS api for Javascript, Esri, Andy Gup and A...
3 Approaches to Mobile - An A to Z Primer.
Analyzing the Performance of Mobile Web
Cloud Computing in Mobile
A Method for Template-based Architecture Modeling and its Application to Digi...
Criando jogos para o windows 8
OutSystems: A more efficient way to build apps!
C++ and UIs: an unorthodox approach
Mobile Interfaces to Mainframe Applications - Architecture Considerations
Location Based Services Without the Cocoa
Web enabling your survey business ppt version
Act 00085 i towns, nouveau framework pour la visualisation 3d web
Act 00085 i towns, nouveau framework pour la visualisation 3d web
Ad

Recently uploaded (20)

PDF
Navsoft: AI-Powered Business Solutions & Custom Software Development
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 41
PDF
top salesforce developer skills in 2025.pdf
PPTX
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
PDF
Nekopoi APK 2025 free lastest update
PDF
Upgrade and Innovation Strategies for SAP ERP Customers
PPTX
Computer Software and OS of computer science of grade 11.pptx
PDF
Which alternative to Crystal Reports is best for small or large businesses.pdf
PDF
PTS Company Brochure 2025 (1).pdf.......
PDF
How to Migrate SBCGlobal Email to Yahoo Easily
PPTX
Reimagine Home Health with the Power of Agentic AI​
PPTX
Operating system designcfffgfgggggggvggggggggg
PPTX
VVF-Customer-Presentation2025-Ver1.9.pptx
PPTX
L1 - Introduction to python Backend.pptx
PDF
Wondershare Filmora 15 Crack With Activation Key [2025
PPTX
Introduction to Artificial Intelligence
PDF
Designing Intelligence for the Shop Floor.pdf
PDF
Softaken Excel to vCard Converter Software.pdf
PDF
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
PDF
Design an Analysis of Algorithms II-SECS-1021-03
Navsoft: AI-Powered Business Solutions & Custom Software Development
Internet Downloader Manager (IDM) Crack 6.42 Build 41
top salesforce developer skills in 2025.pdf
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
Nekopoi APK 2025 free lastest update
Upgrade and Innovation Strategies for SAP ERP Customers
Computer Software and OS of computer science of grade 11.pptx
Which alternative to Crystal Reports is best for small or large businesses.pdf
PTS Company Brochure 2025 (1).pdf.......
How to Migrate SBCGlobal Email to Yahoo Easily
Reimagine Home Health with the Power of Agentic AI​
Operating system designcfffgfgggggggvggggggggg
VVF-Customer-Presentation2025-Ver1.9.pptx
L1 - Introduction to python Backend.pptx
Wondershare Filmora 15 Crack With Activation Key [2025
Introduction to Artificial Intelligence
Designing Intelligence for the Shop Floor.pdf
Softaken Excel to vCard Converter Software.pdf
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
Design an Analysis of Algorithms II-SECS-1021-03
Ad

vts-getting-started

  • 1. VTS: Getting Started with 3D Map Application Development www.melown.com Ladislav Horký, Head of Photogrammetry, Melown Technologies SE
  • 2. Melown Tech is a software-development company in the 3D mapping business www.melown.com
  • 3. What our software does? I) Computer-vision and deep-learning driven reality capture www.melown.com
  • 4. What our software does? II) 3D data fusion, virtual landscape streaming and rendering www.melown.com
  • 5. Applications • VR and AR • interactive simulations • gaming • geospatial (3D mapping) www.melown.com
  • 6. What this talk is about I. VTS – an alternative approach to 3D mapping II. VTS components and concepts III. Your frst JavaScript 3D map application www.melown.com
  • 7. VTS – an alternative approach to 3D mapping www.melown.com
  • 8. There is CesiumJS … … there are Google maps, so ... www.melown.com
  • 9. … who needs another 3D map browser? www.melown.com
  • 10. virtuallandscape Who needs another 3D map browser? • VTS consists of the streaming servers, data management tool suite and the clients • Tight client-server integration: repetitive and static tasks are moved to BE integrated system • Generic geospatial applications • Augmented reality, virtual reality, gaming www.melown.com
  • 11. Who needs another 3D map browser? • VTS is already the second generation of the technology • Successor of the proprietary TS renderer, developed in 2013 • Designed to directly compete with Google Maps in Czechia • Pioneer of 3D content streaming mature www.melown.com
  • 12. … who needs mature integrated system for virtual-landscape streaming and rendering? Everyone !! who works with lots of 3D data www.melown.com
  • 13. VTS strong points • Data scalability: TBs of 3D and 2.5D data can be fused together within VTS • High performance streaming servers: bandwidth-optimized dynamic TIN and orthophoto generation, static tiles streaming • Lightweight and fast client: available for web, desktop and UNITY “The more data you have, the more VTS shines.” www.melown.com
  • 14. VTS components and concepts www.melown.com
  • 15. Streaming servers VTS Mapproxy ➔ Dynamically converts non-VTS resources to surfaces, bound layers and free layers ➔ Powerful SRS transforming TMS server VTSD ➔ Streams static data and fusion products (glues) from VTS storage ➔ Serves mapConfg.json(s) – translated from storage view www.melown.com
  • 16. Data management tool suite vts tool ➔ Swiss-knife of the VTS data management ➔ Add, removes data from the VTS storage, performs the data fusion generatevrtwo, mapproxy-calipers, mapproxy-tiling, ... ➔ Preparation and preprocessing of data for the VTS Mapproxy www.melown.com
  • 17. VTS clients Web ➔ WebGL, JavaScript based Desktop ➔ Available on Linux, Windows, Mac, iOS ➔ Common core is available as a rendering-engine independent library UNITY ➔ Game engine plugin www.melown.com
  • 18. Your frst JavaScript 3D map application www.melown.com
  • 19. What you need to write your frst app Browser – cdn.melown.com – Clone it from GitHub – Add it to your project using NPM mapConfg.json – Grab one from live JSFiddle examples – Grab one from Melown Tech website – Install your instance VTS-Backend: Linux, single debian package, sample data included www.melown.com
  • 20. Basic app: HTML <html> <head> <title>Cadastre sample</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="//cdn.melown.com/libs/vtsjs/builtin/v2/browser/vts-browser.min.css"></link> <script type="text/javascript" src="//cdn.melown.com/libs/vtsjs/builtin/v2/browser/vts-browser.min.js"></script> <script type="text/javascript" src="./main.js"></script> </head> <body style = "padding: 0; margin: 0;" onload="startDemo()"> <div id="map-div" style="width:100%; height:100%;"></div> </body> </html> Load the browser from CDN www.melown.com
  • 21. Basic app: HTML <html> <head> <title>Cadastre sample</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="//cdn.melown.com/libs/vtsjs/builtin/v2/browser/vts-browser.min.css"></link> <script type="text/javascript" src="//cdn.melown.com/libs/vtsjs/builtin/v2/browser/vts-browser.min.js"></script> <script type="text/javascript" src="./main.js"></script> </head> <body style = "padding: 0; margin: 0;" onload="startDemo()"> <div id="map-div" style="width:100%; height:100%;"></div> </body> </html> Load JavaScript of our app Full page div that will contain the map, startDemo() called once the page is loaded www.melown.com
  • 22. Basic app: JavaScript var browser = null; function startDemo() { browser = vts.browser('map-div', { map: 'http://localhost:8070/store/map-config/cadastre/mapConfig.json' }); } MapConfg.json contains URLs of resources and basic metadata to allow the browser render the scene. www.melown.com
  • 23. Basic app: the result www.melown.com
  • 24. Setting custom initial view: JavaScript ... browser = vts.browser('map-div', { map: 'http://localhost:8070/store/map-config/cadastre/mapConfig.json', view: { surfaces: { gtopo30-dem-global: [ "bmng" ], cz-dem-local: [ "mapy-cz" ], Jenstejn-village: [], Jenstejn-center: [] }, freeLayers: {} } }); ... Surfaces derived from DEMs, dynamically generated Static 3D surfaces www.melown.com
  • 25. Setting custom initial view: JavaScript ... browser = vts.browser('map-div', { map: 'http://localhost:8070/store/map-config/cadastre/mapConfig.json', view: { surfaces: { gtopo30-dem-global: [ "bmng" ], cz-dem-local: [ "mapy-cz" ], Jenstejn-village: [], Jenstejn-center: [] }, freeLayers: {} } }); ... Bound layers (imagery) draped over DEM surfaces. Hide vector and raster cadastre www.melown.com
  • 26. Setting custom initial view: JavaScript ... browser = vts.browser('map-div', { map: 'http://localhost:8070/store/map-config/cadastre/mapConfig.json', view: { surfaces: { gtopo30-dem-global: [ "bmng" ], cz-dem-local: [ "mapy-cz" ], Jenstejn-village: [], Jenstejn-center: [] }, freeLayers: {} } }); ... Symbolic names of resources are defned in mapConfg.json www.melown.com
  • 27. Basic app: after hiding free layers www.melown.com
  • 28. Switching cadastre overlays: JavaScript var flswitch = null; . . . Function startDemo () { . . . var panel = browser.ui.addControl('flswitch-panel', '<form id="fl-switch-div" class="fl-switch-div">' + '<legend>Display cadastre</legend>' + '<input name="cadastre" type="radio" value="none" checked="checked"> None <br>' + '<input name="cadastre" type="radio" value="vector"> Vector <br>' + '<input name="cadastre" type="radio" value="raster"> Raster' + '</form>' ); flswitch = panel.getElement('fl-switch-div'); flswitch.on('change', onSwitchFreeLayer); } browser.ui takes care of event propagation, provides convenience wrapper around DOM elements HTML snippet of control element: form with three radio buttons www.melown.com
  • 29. Switching cadastre overlays: JavaScript var flswitch = null; . . . Function startDemo () { . . . var panel = browser.ui.addControl('flswitch-panel', '<form id="fl-switch-div" class="fl-switch-div">' + '<legend>Display cadastre</legend>' + '<input name="cadastre" type="radio" value="none" checked="checked"> None <br>' + '<input name="cadastre" type="radio" value="vector"> Vector <br>' + '<input name="cadastre" type="radio" value="raster"> Raster' + '</form>' ); flswitch = panel.getElement('fl-switch-div'); flswitch.on('change', onSwitchFreeLayer); } Storing form handle as a global variable, registering on-change callback www.melown.com
  • 30. Switching cadastre overlays: JavaScript function onSwitchFreeLayer() { var view = browser.map.getView(); switch (flswitch.getElement().elements['cadastre'].value) { case 'none': view.freeLayers = {}; break; case 'vector': view.freeLayers = { "cadastre" : { "style" : "/store/stylesheet/cuzk-cadastre-style.json" } }; break; case 'raster': view.freeLayers = { "samples-czdem" : { "boundLayers": ["cadastre-raster"], "depthOffset" : [-5, 0, -40] } }; break; } browser.map.setView(view); } Query the current view Hide all free layers Display vector free layer, set how the lines, points and labels will look Display transparent raster cadastre draped over mesh free layer Apply modifed view www.melown.com
  • 31. Switching cadastre overlays: HTML <html> <head> ... <style> .fl-switch-div { font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; position: absolute; right: 30px; bottom: 30px; background-color: #eee; padding: 10px 20px; border-radius: 5px; border: solid 1px #000; – } – </style> </head> ... Style for the control element div www.melown.com
  • 34. Sources of VTS information vtsdocs.melown.com github.com/Melown github.com/Melown/vts-browser-js/wiki/Examples Live Demo: http://altair.mlwn.se:8070/app/dar-es-salaam/ Getting involved in VTS development contact: community@melown.com or fork us on GitHub ;-) www.melown.com