SlideShare a Scribd company logo
1 of 39
Download to read offline
Beyond Pretty Pictures:
Topographic Labels in 3D Maps of High Terrain
www.melown.com
Ondřej Procházka, CEO 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
The conceptual problem behind “3D mapping”
www.melown.com
www.melown.com
Cartography
www.melown.com
Cartography
Cartography:
A map is a diagramatic representation of an area, or a symbolic depiction
emphasizing relationship between elements of space
3D mapping:
A map is mostly orthophotos draped over DEMs, viewed from arbitrary angle
www.melown.com
Cartography:
A map works with a hierarchy of features, both intellectual and visual
3D mapping:
A map aims for data visualization, or simply for visual realism (“pretty pictures”)
www.melown.com
Cartography:
A map relies on cartographic principles which have evolved in 4300 years.
3D mapping:
A map relies on applied computer graphics, which has evolved in ~50 years.
www.melown.com
www.melown.com
Where cartography gives you this...
www.melown.com
… 3D mapping gives you this...
www.melown.com
… or this.
Our goal in this talk:
to create a FOSS-based map application
• leveraging on the benefits of 3D (realism, arbitrary angles), while
• staying true to cartographic principles
www.melown.com
A global high-terrain 3D map with VTS
www.melown.com
www.melown.com
Inspiration
www.melown.com
Inspiration
Ingredients (technology)
• Major distro Linux server
• VTS 3D Geospatial Software Stack
➔
Backend streaming servers (mapproxy and vtsd)
➔
Data-fusion command-line utility (vts)
➔
JavaScript rendering library (vts-browser-js)
www.melown.com
Ingredients (data)
• Global Sentinel2 Cloudless mosaic (by EOX IT Gmbh)
• Viefinder Panoramas 3 arc second DEM (by Johnathan de Ferranti)
• OpenStreetMap (by OSM contributors, Klokan Technologies Gmbh)
• “The Ultras” (by Peaklist.org)*)
*) Peaklist.org “Ultras” is not a public-domain dataset. See the authors’ site for licensing.
www.melown.com
Intellectual hierarchy – topographic prominence
www.melown.com
www.melown.com
Prerequisite: VTS Backend
On Ubuntu 16.04 or 18.04:
$ sudo apt install vts-backend
www.melown.com
Step 1: The Basemap
Add global Viewfinder Panoramas DEM to VTS storage:
$ vts ~/store/stage.melown2015 –add 
//cdn.melown.com/vts/melown2015/terrain/global/viewfinder3/ --top
Create a VTS storage view at ~/store/map-config/high-terrain:
www.melown.com
{
"storage": "../stage.melown2015",
"tilesets": ["terrain-viewfinder3"],
"credits": {},
"boundLayers": {
"eox-it-sentinel2-cloudless"
:"//cdn.melown.com/vts/melown2015/imagery/global/eox-it-sentinel2-cloudless/boundlayer.json"
},
"freeLayers": {},
"view": {
"surfaces": { "terrain-viewfinder3": ["eox-it-sentinel2-cloudless"] },
"freeLayers": {}
},
"position": [["obj",-101.3,47.116,"float",0,0,-90,0,9333674,45],
"version": 1
}
Step 1: The Basemap (cont’d)
At http://<your-server>:8070/vts/store/map-config/high-terrain:
www.melown.com
Step 1: The Basemap (check)
www.melown.com
Step 2: The Ultra-prominent Peaks
Download the dataset:*)
$ wget http://cdn.melown.com/pub/vts-tutorials/high-terrain/world1500.json
-O ~/mapproxy/datasets/world1500.json
*) Peaklist.org “Ultras” is not a public-domain dataset. See the authors’ site for licensing.
Define a geodata free layer in mapproxy (create /etc/vts/mapproxy/examples.d/peaklist-org-ultras.json):
www.melown.com
[{
"group": "high-terrain", "id": "peaklist-org-ultras",
"comment": "Ultra-prominent peaks on earth, compiled by peaklist.org",
"driver": "geodata-vector",
"type": "geodata",
"definition": {
"dataset": "world1500.json",
"format": "geodataJson",
"formatConfig": { "resolution": 65536 },
},
"referenceFrames": { "melown2015": { "lodRange": [1,1], "tileRange": [[0,0], [1,1]] } },
"registry": {
"credits": {
"peaklist-org": { "id": 205, "notice": "{copy} 2004-07 [http://www.peaklist.org/ultras.html peaklist.org]" }
}
},
"credits": ["peaklist-org"]
}]
Step 2: The Ultra-prominent Peaks (cont’d)
Create a stylesheet for the layer (edit ~/store/stylesheets/peaklist-org-ultras.style):
www.melown.com
{
"constants": {
"@name-solver": {"if":[["has","$name"],"$name","$Name"]},
"@ele": {"if":[["has","$elevation"],"$elevation","$Elevation"]},
"@feet": {"round":{"mul":[3.2808399,{"str2num":"@ele"}]}},
"@ele-solver": {"if":[["==","#metric",true],"{{'round': {'str2num':'@ele'}}} m","{@feet} ft"]},
"@id-solver": "{@ele-solver} {@name-solver}"
},
"layers": {
"peak-labels": {
"label": true,
"label-source": {"uppercase":"{@name-solver}n{@ele-solver}"},
"label-no-overlap": false,
"label-size": 19,
"label-stick": [70,5,2,255,255,255,128],
"culling": 92,
"hysteresis": [1500,1500,"@id-solver",true]
}
}
}
Step 2: The Ultra-prominent Peaks (cont’d)
Add the layer to the storage view, at ~/store/map-config/high-terrain:
www.melown.com
{
"storage": "../ht-stage.melown2015",
"tilesets": ["terrain-viewfinder3"],
"credits": {},
"boundLayers": {
"eox-it-sentinel2-cloudless":
"//cdn.melown.com/vts/melown2015/imagery/global/eox-it-sentinel2-cloudless/boundlayer.json"
},
"freeLayers": {
"peaklist-org-ultras": "/mapproxy/melown2015/geodata/high-terrain/peaklist-org-ultras/freelayer.json"
},
"view": {
"surfaces": { "terrain-viewfinder3": ["eox-it-sentinel2-cloudless"] },
"freeLayers": {
"peaklist-org-ultras": { "style": "/store/stylesheet/peaklist-org-ultras.style?4" }
}
},
"position": ["obj",-101.3,47.116,"float",0,0,-90,0,9800000,45],
"version": 1
}
Step 2: The Ultra-prominent Peaks (cont’d)
At http://<your-server>:8070/vts/store/map-config/high-terrain:
www.melown.com
Step 2: The Ultra-prominent Peaks (check)
Solve occlusions by the rule of higher prominence (edit ~/store/stylesheets/peaklist-org-ultras.style)
www.melown.com
{
"constants": {
...
"@prom-solver": {"mul":[-1,{"str2num":{"if":[["has","$prom"],"$prom","$Prom"]}}]}
},
"layers": {
"peak-labels": {
...
"label-no-overlap": true,
"label-no-overlap-factor": ["div-by-dist","@prom-solver"],
...
}
}
}
Step 2: The Ultra-prominent Peaks (cont’d)
At http://<your-server>:8070/vts/store/map-config/high-terrain:
www.melown.com
Step 2: The Ultra-prominent Peaks (check)
Add the public OSM-based geodata layer to the storage view (edit ~/store/map-config/high-terrain):
www.melown.com
{
"storage": "../ht-stage.melown2015",
...
"freeLayers": {
"peaklist-org-ultras":
"/mapproxy/melown2015/geodata/high-terrain/peaklist-org-ultras/freelayer.json",
"osm-maptiler": "//cdn.melown.com/vts/melown2015/features/global/osm-maptiler/freelayer.json"
},
"view": {
"surfaces": { "terrain-viewfinder3": ["eox-it-sentinel2-cloudless"] },
"freeLayers": {
"peaklist-org-ultras": { "style": "/store/stylesheet/peaklist-org-ultras.style" },
"osm-maptiler": { "style": "//<your-server>/store/stylesheet/osm-maptiler.style" }
}
},
...
}
Step 3: Mountain peaks from OSM
Create a stylesheet for the layer (create ~/store/stylesheets/osm-maptiler.style):
www.melown.com
{
"constants": {
"@feet": {"round":{"mul":[3.2808399,{"str2num":"$ele"}]}},
"@name-solver": {"if":[["has","$name"],{"if":[["any",["!has","$name:en"],["==",{"has-latin":"$name"},true]],"{$name}","{$name}n{$name:en}"]},""]},
"@ele-solver": {"if":[["==","#metric",true],"{{'round': {'str2num':'$ele'}}} m","{@feet} ft"]},
"@peak-name": {"if":[["has","$ele"],"{@name-solver}n({@ele-solver})","({@name-solver})"]},
"@prominence": {"add":[{"if":[["has","$ele"],{"mul":[-0.0001,{"str2num":"$ele"}]},0]},{"if":[["has","$prominence"],{"mul":[-0.3048,{"str2num":"$prominence"}]},0]}]},
"@osmid": {"if":[["has","$osm_id"],"$osm_id",""]},
"@id-solver":"{@osmid} {@ele-solver} {@name-solver}"
},
"layers": {
"peaks": {
"filter": ["all",["==","#group","mountain_peak"]],
"visible": { "if": [["!=","@name-solver",""], true, false ] },
"dynamic-reduce": ["scr-count2",1,50],
"label": true,
"label-color":[255,255,255,255],
"label-stick": [70,5,2,255,255,255,128],
"label-size": 19,
"label-source": "@peak-name",
"label-font": "@main-font",
"label-no-overlap": true,
"label-no-overlap-factor": ["div-by-dist","@prominence"],
"zbuffer-offset": [-0.25,0,0],
"culling": 94,
"hysteresis": [1500,1500,"@id-solver",true]
}
}
}
Step 3: Mountain peaks from OSM (cont’d)
At http://<your-server>:8070/vts/store/map-config/high-terrain:
www.melown.com
Step 3: Mountain peaks from OSM (check)
Change style for ultra-prominent peaks (edit ~/store/stylesheets/peaklist-org-ultras.style):
www.melown.com
{
"constants": {
"@name-solver": {"if":[["has","$name"],"$name","$Name"]},
"@ele": {"if":[["has","$elevation"],"$elevation","$Elevation"]},
"@feet": {"round":{"mul":[3.2808399,{"str2num":"@ele"}]}},
"@ele-solver": {"if":[["==","#metric",true],"{{'round': {'str2num':'@ele'}}} m","{@feet} ft"]},
"@id-solver": "{@ele-solver} {@name-solver}"
},
"layers": {
"peak-labels": {
"label": true,
"label-source": {"uppercase":"{@name-solver}n({@ele-solver})"},
"label-stick": [70,5,2,255,233,0,128],
"label-color": [255,233,0,255],
"label-no-overlap": false,
"label-size": 19,
"label-stick": [70,5,2,255,255,255,128],
"culling": 92,
"hysteresis": [1500,1500,"@id-solver",true]
}
}
}
Step 4: The visual hierarchy
Add visual hierarchy rules to OSM data (edit ~/store/stylesheets/osm-maptiler.style):
www.melown.com
{
"constants": {
...
"@peak-rank": {"discrete2":["@prominence",
[[-1501,0],[-1499,1],[-751,1],[-749,2],[-326,2],[-324,3],[-164,3],[-162,4],[-2,4],[-1,5]]]},
"@peak-name2": {"if":[["==","@peak-rank",0],{"uppercase":"@peak-name"},"@peak-name"]}
},
"layers": {
"peaks": {
"filter": ["all",["==","#group","mountain_peak"]],
...
"label-color": {"linear2":["@peak-rank",[[1,[255,233,0,255]],[5,[230,230,230,255]]]]},
"label-stick": {"linear2":["@peak-rank",[[1,[70,5,2,255,233,0,128]],[5,[70,5,2,230,230,230,128]]]]},
"label-size": {"discrete2":["@peak-rank",[[0,19],[1,18],[2,17],[3,16],[4,15],[5,14]]]},
"label-source": "@peak-name2",
...
}
}
}
Step 4: Visual hierarchy (cont’d)
At http://<your-server>:8070/vts/store/map-config/high-terrain:
www.melown.com
Step 4: Visual hierarchy (check)
Live demo of the map
http://rigel.mlwn.se/high-terrain
Sources of VTS information
vtsdocs.melown.com
github.com/Melown
www.melown.comwww.melown.com

More Related Content

Similar to Beyond Pretty Pictures: Topographic Labels in 3D Maps of High Terrain

Drupal and the GeoSpatial Web
Drupal and the GeoSpatial WebDrupal and the GeoSpatial Web
Drupal and the GeoSpatial WebAndrew Turner
 
Better Mapping II - Sourcing good data
Better Mapping II - Sourcing good dataBetter Mapping II - Sourcing good data
Better Mapping II - Sourcing good dataSteve Chilton
 
VizDyn and spatial utility Dec 2014
VizDyn and spatial utility Dec 2014VizDyn and spatial utility Dec 2014
VizDyn and spatial utility Dec 2014Jim Head
 
Developing Spatial Applications with Google Maps and CARTO
Developing Spatial Applications with Google Maps and CARTODeveloping Spatial Applications with Google Maps and CARTO
Developing Spatial Applications with Google Maps and CARTOCARTO
 
Ics2311 l02 Graphics fundamentals
Ics2311 l02 Graphics fundamentalsIcs2311 l02 Graphics fundamentals
Ics2311 l02 Graphics fundamentalsbridgekloud
 
MongoDB World 2019: Get the Best of Geo Data with MongoDB Atlas and MongoDB C...
MongoDB World 2019: Get the Best of Geo Data with MongoDB Atlas and MongoDB C...MongoDB World 2019: Get the Best of Geo Data with MongoDB Atlas and MongoDB C...
MongoDB World 2019: Get the Best of Geo Data with MongoDB Atlas and MongoDB C...MongoDB
 
Cloud Computing and HTML5, 2010
Cloud Computing and HTML5, 2010Cloud Computing and HTML5, 2010
Cloud Computing and HTML5, 2010Moullet
 
EU SatCen Workflow Automation for Data
EU SatCen Workflow Automation for DataEU SatCen Workflow Automation for Data
EU SatCen Workflow Automation for DataSafe Software
 
State of the Art Web Mapping with Open Source
State of the Art Web Mapping with Open SourceState of the Art Web Mapping with Open Source
State of the Art Web Mapping with Open SourceOSCON Byrum
 
OL4JSF - Latinoware 2010
OL4JSF - Latinoware 2010OL4JSF - Latinoware 2010
OL4JSF - Latinoware 2010Robert Anderson
 
Seeing your place in a new way - NodeconfEU 2018
Seeing your place in a new way -  NodeconfEU 2018Seeing your place in a new way -  NodeconfEU 2018
Seeing your place in a new way - NodeconfEU 2018Melissa Auclaire
 
THE OGC STANDARDS AND GEO-PLATFORM BASED WEB APPLICATION FOR SEISMIC EVENTS M...
THE OGC STANDARDS AND GEO-PLATFORM BASED WEB APPLICATION FOR SEISMIC EVENTS M...THE OGC STANDARDS AND GEO-PLATFORM BASED WEB APPLICATION FOR SEISMIC EVENTS M...
THE OGC STANDARDS AND GEO-PLATFORM BASED WEB APPLICATION FOR SEISMIC EVENTS M...Lorenzo Amato
 
Cloud Computing in Mobile
Cloud Computing in MobileCloud Computing in Mobile
Cloud Computing in MobileSVWB
 
Google's HTML5 Work: what's next?
Google's HTML5 Work: what's next?Google's HTML5 Work: what's next?
Google's HTML5 Work: what's next?Patrick Chanezon
 
BEV Semantic Segmentation
BEV Semantic SegmentationBEV Semantic Segmentation
BEV Semantic SegmentationYu Huang
 
World wind java sdk in progess
World wind java sdk in progessWorld wind java sdk in progess
World wind java sdk in progessRaffaele de Amicis
 
Event Visualization with OpenStreetMap Data, Interdisciplinary Project
Event Visualization with OpenStreetMap Data, Interdisciplinary ProjectEvent Visualization with OpenStreetMap Data, Interdisciplinary Project
Event Visualization with OpenStreetMap Data, Interdisciplinary ProjectBibek Shrestha
 

Similar to Beyond Pretty Pictures: Topographic Labels in 3D Maps of High Terrain (20)

Drupal and the GeoSpatial Web
Drupal and the GeoSpatial WebDrupal and the GeoSpatial Web
Drupal and the GeoSpatial Web
 
Maperitive
MaperitiveMaperitive
Maperitive
 
Better Mapping II - Sourcing good data
Better Mapping II - Sourcing good dataBetter Mapping II - Sourcing good data
Better Mapping II - Sourcing good data
 
VizDyn and spatial utility Dec 2014
VizDyn and spatial utility Dec 2014VizDyn and spatial utility Dec 2014
VizDyn and spatial utility Dec 2014
 
Developing Spatial Applications with Google Maps and CARTO
Developing Spatial Applications with Google Maps and CARTODeveloping Spatial Applications with Google Maps and CARTO
Developing Spatial Applications with Google Maps and CARTO
 
Ics2311 l02 Graphics fundamentals
Ics2311 l02 Graphics fundamentalsIcs2311 l02 Graphics fundamentals
Ics2311 l02 Graphics fundamentals
 
MongoDB World 2019: Get the Best of Geo Data with MongoDB Atlas and MongoDB C...
MongoDB World 2019: Get the Best of Geo Data with MongoDB Atlas and MongoDB C...MongoDB World 2019: Get the Best of Geo Data with MongoDB Atlas and MongoDB C...
MongoDB World 2019: Get the Best of Geo Data with MongoDB Atlas and MongoDB C...
 
Cloud Computing and HTML5, 2010
Cloud Computing and HTML5, 2010Cloud Computing and HTML5, 2010
Cloud Computing and HTML5, 2010
 
EU SatCen Workflow Automation for Data
EU SatCen Workflow Automation for DataEU SatCen Workflow Automation for Data
EU SatCen Workflow Automation for Data
 
State of the Art Web Mapping with Open Source
State of the Art Web Mapping with Open SourceState of the Art Web Mapping with Open Source
State of the Art Web Mapping with Open Source
 
OL4JSF - Latinoware 2010
OL4JSF - Latinoware 2010OL4JSF - Latinoware 2010
OL4JSF - Latinoware 2010
 
Open@EDINA
Open@EDINAOpen@EDINA
Open@EDINA
 
Seeing your place in a new way - NodeconfEU 2018
Seeing your place in a new way -  NodeconfEU 2018Seeing your place in a new way -  NodeconfEU 2018
Seeing your place in a new way - NodeconfEU 2018
 
Global mapperhelp
Global mapperhelpGlobal mapperhelp
Global mapperhelp
 
THE OGC STANDARDS AND GEO-PLATFORM BASED WEB APPLICATION FOR SEISMIC EVENTS M...
THE OGC STANDARDS AND GEO-PLATFORM BASED WEB APPLICATION FOR SEISMIC EVENTS M...THE OGC STANDARDS AND GEO-PLATFORM BASED WEB APPLICATION FOR SEISMIC EVENTS M...
THE OGC STANDARDS AND GEO-PLATFORM BASED WEB APPLICATION FOR SEISMIC EVENTS M...
 
Cloud Computing in Mobile
Cloud Computing in MobileCloud Computing in Mobile
Cloud Computing in Mobile
 
Google's HTML5 Work: what's next?
Google's HTML5 Work: what's next?Google's HTML5 Work: what's next?
Google's HTML5 Work: what's next?
 
BEV Semantic Segmentation
BEV Semantic SegmentationBEV Semantic Segmentation
BEV Semantic Segmentation
 
World wind java sdk in progess
World wind java sdk in progessWorld wind java sdk in progess
World wind java sdk in progess
 
Event Visualization with OpenStreetMap Data, Interdisciplinary Project
Event Visualization with OpenStreetMap Data, Interdisciplinary ProjectEvent Visualization with OpenStreetMap Data, Interdisciplinary Project
Event Visualization with OpenStreetMap Data, Interdisciplinary Project
 

Recently uploaded

Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptkotipi9215
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWave PLM
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...aditisharan08
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
 
What are the features of Vehicle Tracking System?
What are the features of Vehicle Tracking System?What are the features of Vehicle Tracking System?
What are the features of Vehicle Tracking System?Watsoo Telematics
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
 
cybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningcybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningVitsRangannavar
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyFrank van der Linden
 

Recently uploaded (20)

Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.ppt
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need It
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
 
What are the features of Vehicle Tracking System?
What are the features of Vehicle Tracking System?What are the features of Vehicle Tracking System?
What are the features of Vehicle Tracking System?
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
 
cybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningcybersecurity notes for mca students for learning
cybersecurity notes for mca students for learning
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The Ugly
 

Beyond Pretty Pictures: Topographic Labels in 3D Maps of High Terrain

  • 1. Beyond Pretty Pictures: Topographic Labels in 3D Maps of High Terrain www.melown.com Ondřej Procházka, CEO 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. The conceptual problem behind “3D mapping” www.melown.com
  • 9. Cartography: A map is a diagramatic representation of an area, or a symbolic depiction emphasizing relationship between elements of space 3D mapping: A map is mostly orthophotos draped over DEMs, viewed from arbitrary angle www.melown.com
  • 10. Cartography: A map works with a hierarchy of features, both intellectual and visual 3D mapping: A map aims for data visualization, or simply for visual realism (“pretty pictures”) www.melown.com
  • 11. Cartography: A map relies on cartographic principles which have evolved in 4300 years. 3D mapping: A map relies on applied computer graphics, which has evolved in ~50 years. www.melown.com
  • 13. www.melown.com … 3D mapping gives you this...
  • 15. Our goal in this talk: to create a FOSS-based map application • leveraging on the benefits of 3D (realism, arbitrary angles), while • staying true to cartographic principles www.melown.com
  • 16. A global high-terrain 3D map with VTS www.melown.com
  • 19. Ingredients (technology) • Major distro Linux server • VTS 3D Geospatial Software Stack ➔ Backend streaming servers (mapproxy and vtsd) ➔ Data-fusion command-line utility (vts) ➔ JavaScript rendering library (vts-browser-js) www.melown.com
  • 20. Ingredients (data) • Global Sentinel2 Cloudless mosaic (by EOX IT Gmbh) • Viefinder Panoramas 3 arc second DEM (by Johnathan de Ferranti) • OpenStreetMap (by OSM contributors, Klokan Technologies Gmbh) • “The Ultras” (by Peaklist.org)*) *) Peaklist.org “Ultras” is not a public-domain dataset. See the authors’ site for licensing. www.melown.com
  • 21. Intellectual hierarchy – topographic prominence www.melown.com
  • 22. www.melown.com Prerequisite: VTS Backend On Ubuntu 16.04 or 18.04: $ sudo apt install vts-backend
  • 23. www.melown.com Step 1: The Basemap Add global Viewfinder Panoramas DEM to VTS storage: $ vts ~/store/stage.melown2015 –add //cdn.melown.com/vts/melown2015/terrain/global/viewfinder3/ --top
  • 24. Create a VTS storage view at ~/store/map-config/high-terrain: www.melown.com { "storage": "../stage.melown2015", "tilesets": ["terrain-viewfinder3"], "credits": {}, "boundLayers": { "eox-it-sentinel2-cloudless" :"//cdn.melown.com/vts/melown2015/imagery/global/eox-it-sentinel2-cloudless/boundlayer.json" }, "freeLayers": {}, "view": { "surfaces": { "terrain-viewfinder3": ["eox-it-sentinel2-cloudless"] }, "freeLayers": {} }, "position": [["obj",-101.3,47.116,"float",0,0,-90,0,9333674,45], "version": 1 } Step 1: The Basemap (cont’d)
  • 26. www.melown.com Step 2: The Ultra-prominent Peaks Download the dataset:*) $ wget http://cdn.melown.com/pub/vts-tutorials/high-terrain/world1500.json -O ~/mapproxy/datasets/world1500.json *) Peaklist.org “Ultras” is not a public-domain dataset. See the authors’ site for licensing.
  • 27. Define a geodata free layer in mapproxy (create /etc/vts/mapproxy/examples.d/peaklist-org-ultras.json): www.melown.com [{ "group": "high-terrain", "id": "peaklist-org-ultras", "comment": "Ultra-prominent peaks on earth, compiled by peaklist.org", "driver": "geodata-vector", "type": "geodata", "definition": { "dataset": "world1500.json", "format": "geodataJson", "formatConfig": { "resolution": 65536 }, }, "referenceFrames": { "melown2015": { "lodRange": [1,1], "tileRange": [[0,0], [1,1]] } }, "registry": { "credits": { "peaklist-org": { "id": 205, "notice": "{copy} 2004-07 [http://www.peaklist.org/ultras.html peaklist.org]" } } }, "credits": ["peaklist-org"] }] Step 2: The Ultra-prominent Peaks (cont’d)
  • 28. Create a stylesheet for the layer (edit ~/store/stylesheets/peaklist-org-ultras.style): www.melown.com { "constants": { "@name-solver": {"if":[["has","$name"],"$name","$Name"]}, "@ele": {"if":[["has","$elevation"],"$elevation","$Elevation"]}, "@feet": {"round":{"mul":[3.2808399,{"str2num":"@ele"}]}}, "@ele-solver": {"if":[["==","#metric",true],"{{'round': {'str2num':'@ele'}}} m","{@feet} ft"]}, "@id-solver": "{@ele-solver} {@name-solver}" }, "layers": { "peak-labels": { "label": true, "label-source": {"uppercase":"{@name-solver}n{@ele-solver}"}, "label-no-overlap": false, "label-size": 19, "label-stick": [70,5,2,255,255,255,128], "culling": 92, "hysteresis": [1500,1500,"@id-solver",true] } } } Step 2: The Ultra-prominent Peaks (cont’d)
  • 29. Add the layer to the storage view, at ~/store/map-config/high-terrain: www.melown.com { "storage": "../ht-stage.melown2015", "tilesets": ["terrain-viewfinder3"], "credits": {}, "boundLayers": { "eox-it-sentinel2-cloudless": "//cdn.melown.com/vts/melown2015/imagery/global/eox-it-sentinel2-cloudless/boundlayer.json" }, "freeLayers": { "peaklist-org-ultras": "/mapproxy/melown2015/geodata/high-terrain/peaklist-org-ultras/freelayer.json" }, "view": { "surfaces": { "terrain-viewfinder3": ["eox-it-sentinel2-cloudless"] }, "freeLayers": { "peaklist-org-ultras": { "style": "/store/stylesheet/peaklist-org-ultras.style?4" } } }, "position": ["obj",-101.3,47.116,"float",0,0,-90,0,9800000,45], "version": 1 } Step 2: The Ultra-prominent Peaks (cont’d)
  • 31. Solve occlusions by the rule of higher prominence (edit ~/store/stylesheets/peaklist-org-ultras.style) www.melown.com { "constants": { ... "@prom-solver": {"mul":[-1,{"str2num":{"if":[["has","$prom"],"$prom","$Prom"]}}]} }, "layers": { "peak-labels": { ... "label-no-overlap": true, "label-no-overlap-factor": ["div-by-dist","@prom-solver"], ... } } } Step 2: The Ultra-prominent Peaks (cont’d)
  • 33. Add the public OSM-based geodata layer to the storage view (edit ~/store/map-config/high-terrain): www.melown.com { "storage": "../ht-stage.melown2015", ... "freeLayers": { "peaklist-org-ultras": "/mapproxy/melown2015/geodata/high-terrain/peaklist-org-ultras/freelayer.json", "osm-maptiler": "//cdn.melown.com/vts/melown2015/features/global/osm-maptiler/freelayer.json" }, "view": { "surfaces": { "terrain-viewfinder3": ["eox-it-sentinel2-cloudless"] }, "freeLayers": { "peaklist-org-ultras": { "style": "/store/stylesheet/peaklist-org-ultras.style" }, "osm-maptiler": { "style": "//<your-server>/store/stylesheet/osm-maptiler.style" } } }, ... } Step 3: Mountain peaks from OSM
  • 34. Create a stylesheet for the layer (create ~/store/stylesheets/osm-maptiler.style): www.melown.com { "constants": { "@feet": {"round":{"mul":[3.2808399,{"str2num":"$ele"}]}}, "@name-solver": {"if":[["has","$name"],{"if":[["any",["!has","$name:en"],["==",{"has-latin":"$name"},true]],"{$name}","{$name}n{$name:en}"]},""]}, "@ele-solver": {"if":[["==","#metric",true],"{{'round': {'str2num':'$ele'}}} m","{@feet} ft"]}, "@peak-name": {"if":[["has","$ele"],"{@name-solver}n({@ele-solver})","({@name-solver})"]}, "@prominence": {"add":[{"if":[["has","$ele"],{"mul":[-0.0001,{"str2num":"$ele"}]},0]},{"if":[["has","$prominence"],{"mul":[-0.3048,{"str2num":"$prominence"}]},0]}]}, "@osmid": {"if":[["has","$osm_id"],"$osm_id",""]}, "@id-solver":"{@osmid} {@ele-solver} {@name-solver}" }, "layers": { "peaks": { "filter": ["all",["==","#group","mountain_peak"]], "visible": { "if": [["!=","@name-solver",""], true, false ] }, "dynamic-reduce": ["scr-count2",1,50], "label": true, "label-color":[255,255,255,255], "label-stick": [70,5,2,255,255,255,128], "label-size": 19, "label-source": "@peak-name", "label-font": "@main-font", "label-no-overlap": true, "label-no-overlap-factor": ["div-by-dist","@prominence"], "zbuffer-offset": [-0.25,0,0], "culling": 94, "hysteresis": [1500,1500,"@id-solver",true] } } } Step 3: Mountain peaks from OSM (cont’d)
  • 36. Change style for ultra-prominent peaks (edit ~/store/stylesheets/peaklist-org-ultras.style): www.melown.com { "constants": { "@name-solver": {"if":[["has","$name"],"$name","$Name"]}, "@ele": {"if":[["has","$elevation"],"$elevation","$Elevation"]}, "@feet": {"round":{"mul":[3.2808399,{"str2num":"@ele"}]}}, "@ele-solver": {"if":[["==","#metric",true],"{{'round': {'str2num':'@ele'}}} m","{@feet} ft"]}, "@id-solver": "{@ele-solver} {@name-solver}" }, "layers": { "peak-labels": { "label": true, "label-source": {"uppercase":"{@name-solver}n({@ele-solver})"}, "label-stick": [70,5,2,255,233,0,128], "label-color": [255,233,0,255], "label-no-overlap": false, "label-size": 19, "label-stick": [70,5,2,255,255,255,128], "culling": 92, "hysteresis": [1500,1500,"@id-solver",true] } } } Step 4: The visual hierarchy
  • 37. Add visual hierarchy rules to OSM data (edit ~/store/stylesheets/osm-maptiler.style): www.melown.com { "constants": { ... "@peak-rank": {"discrete2":["@prominence", [[-1501,0],[-1499,1],[-751,1],[-749,2],[-326,2],[-324,3],[-164,3],[-162,4],[-2,4],[-1,5]]]}, "@peak-name2": {"if":[["==","@peak-rank",0],{"uppercase":"@peak-name"},"@peak-name"]} }, "layers": { "peaks": { "filter": ["all",["==","#group","mountain_peak"]], ... "label-color": {"linear2":["@peak-rank",[[1,[255,233,0,255]],[5,[230,230,230,255]]]]}, "label-stick": {"linear2":["@peak-rank",[[1,[70,5,2,255,233,0,128]],[5,[70,5,2,230,230,230,128]]]]}, "label-size": {"discrete2":["@peak-rank",[[0,19],[1,18],[2,17],[3,16],[4,15],[5,14]]]}, "label-source": "@peak-name2", ... } } } Step 4: Visual hierarchy (cont’d)
  • 39. Live demo of the map http://rigel.mlwn.se/high-terrain Sources of VTS information vtsdocs.melown.com github.com/Melown www.melown.comwww.melown.com