This is an automated email from the ASF dual-hosted git repository.

bchapuis pushed a commit to branch colorfull-extrusions
in repository https://gitbox.apache.org/repos/asf/incubator-baremaps.git

commit 310c19da73da35e37d37e51825c0b9b21100304b
Author: Bertil Chapuis <[email protected]>
AuthorDate: Thu Oct 5 21:49:01 2023 +0200

    Add colorfull building extrusions
---
 .run/basemap-dev.run.xml             |  5 +++
 basemap/layers/building/extrusion.js | 64 ++++++++++++++++++++++++++++++++++++
 basemap/layers/building/tileset.js   | 42 ++++++++++++++++++++---
 basemap/style.js                     |  2 ++
 4 files changed, 109 insertions(+), 4 deletions(-)

diff --git a/.run/basemap-dev.run.xml b/.run/basemap-dev.run.xml
index 9b68be2a..3287415e 100644
--- a/.run/basemap-dev.run.xml
+++ b/.run/basemap-dev.run.xml
@@ -10,6 +10,11 @@
         <option name="ENABLED" value="true" />
       </pattern>
     </extension>
+    <extension 
name="software.aws.toolkits.jetbrains.core.execution.JavaAwsConnectionExtension">
+      <option name="credential" />
+      <option name="region" />
+      <option name="useCurrentConnection" value="false" />
+    </extension>
     <method v="2">
       <option name="Make" enabled="true" />
     </method>
diff --git a/basemap/layers/building/extrusion.js 
b/basemap/layers/building/extrusion.js
new file mode 100644
index 00000000..2c28e5ed
--- /dev/null
+++ b/basemap/layers/building/extrusion.js
@@ -0,0 +1,64 @@
+/**
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to you under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ **/
+import theme from "../../theme.js";
+
+export default {
+    id: 'building-extrusion',
+    type: 'fill-extrusion',
+    source: 'baremaps',
+    'source-layer': 'building',
+    filter: ['!=', ['get', 'building'], 'no'],
+    layout: {
+        visibility: 'visible',
+    },
+    minzoom: 16,
+    paint: {
+        "fill-extrusion-color": [
+            "case",
+            ["has", "building:colour"],
+            ["get", "building:colour"],
+            theme.buildingShapeFillColor,
+        ],
+        "fill-extrusion-base": [
+            'interpolate',
+            ['linear'],
+            ['zoom'],
+            16,
+            0,
+            17,
+            ['get', "extrusion:base"]
+        ],
+        "fill-extrusion-height": [
+            'interpolate',
+            ['linear'],
+            ['zoom'],
+            16,
+            0,
+            17,
+            ['get', "extrusion:height"]
+        ],
+        "fill-extrusion-opacity": [
+            'interpolate',
+            ['linear'],
+            ['zoom'],
+            16,
+            0,
+            17,
+            0.8
+        ]
+    },
+}
diff --git a/basemap/layers/building/tileset.js 
b/basemap/layers/building/tileset.js
index 66c9bf1f..47c962e1 100644
--- a/basemap/layers/building/tileset.js
+++ b/basemap/layers/building/tileset.js
@@ -21,14 +21,48 @@ export default {
         {
             minzoom: 13,
             maxzoom: 20,
-            sql:
-                "SELECT id, tags, geom FROM osm_ways WHERE tags ? 'building'",
+            sql: `
+                SELECT 
+                    id, 
+                    tags
+                        || jsonb_build_object('extrusion:base', (CASE
+                                                                     WHEN tags 
? 'building:min_height'
+                                                                         THEN 
tags ->> 'building:min_height'
+                                                                     WHEN tags 
->> 'building:min_level' ~ '^[0-9\\\\\\\\.]+$'
+                                                                         THEN 
tags ->> 'building:min_level'
+                                                                     ELSE '0' 
END)::real * 3)
+                        || jsonb_build_object('extrusion:height', (CASE
+                                                                   WHEN tags ? 
'building:height'
+                                                                       THEN 
tags ->> 'building:height'
+                                                                   WHEN tags 
->> 'building:levels' ~ '^[0-9\\\\\\\\.]+$'
+                                                                       THEN 
tags ->> 'building:levels'
+                                                                   ELSE '2' 
END)::real * 3),
+                    geom 
+                FROM osm_ways 
+                WHERE tags ? 'building'`,
         },
         {
             minzoom: 13,
             maxzoom: 20,
-            sql:
-                "SELECT id, tags, geom FROM osm_relations WHERE tags ? 
'building'",
+            sql: `
+                SELECT 
+                    id, 
+                    tags 
+                        || jsonb_build_object('extrusion:base', (CASE
+                                                                      WHEN 
tags ? 'building:min_height'
+                                                                          THEN 
tags ->> 'building:min_height'
+                                                                      WHEN 
tags ->> 'building:min_level' ~ '^[0-9\\\\\\\\.]+$'
+                                                                          THEN 
tags ->> 'building:min_level'
+                                                                      ELSE '0' 
END)::real * 3)
+                        || jsonb_build_object('extrusion:height', (CASE
+                                                                   WHEN tags ? 
'building:height'
+                                                                       THEN 
tags ->> 'building:height'
+                                                                   WHEN tags 
->> 'building:levels' ~ '^[0-9\\\\\\\\.]+$'
+                                                                       THEN 
tags ->> 'building:levels'
+                                                                   ELSE '2' 
END)::real * 3),
+                    geom 
+                FROM osm_relations 
+                WHERE tags ? 'building'`,
         },
     ],
 }
diff --git a/basemap/style.js b/basemap/style.js
index 48ff2fc0..8baf8d28 100644
--- a/basemap/style.js
+++ b/basemap/style.js
@@ -53,6 +53,7 @@ import highway_label from './layers/highway/highway_label.js';
 import ocean_overlay from './layers/ocean/overlay.js';
 import route_line from "./layers/route/style.js"
 import building_shape from "./layers/building/shape.js";
+import building_extrusion from "./layers/building/extrusion.js";
 import building_number from "./layers/building/number.js";
 import man_made_bridge from "./layers/man_made/bridge.js";
 import man_made_pier_line from "./layers/man_made/pier_line.js";
@@ -121,6 +122,7 @@ export default {
         natural_trunk,
         boundary_line,
         waterway_label,
+        building_extrusion,
         icon,
         point_label,
         country_label,

Reply via email to