While scrolling through Twitter a couple weeks ago I saw this map of building ages in the Netherlands. I
really like this map and I had a lot of fun poking around it. My first thought after I closed it was, “Why
can’t we have nice things like that?”. It turns out that we can.
Buildings by Year
Built in Kitsap County is an interactive web map similar in concept to the map of the
Netherlands that I mentioned above but tighter in its focus on the core value proposition as a data
Simplify the Message
Rather than categorizing buildings into groups using 12 different colors I’ve opted for a simpler 2 color
gradient that starts with a dark blue to represent the oldest buildings and a lighter red to represent
buildings built in 2019. The spectrum of hues in-between indicates a building’s position in the time scale
between the late 1800’s and today.
Using this visualization method makes it really easy to pick out what buildings have been redeveloped in the
Bremerton core and identify how new most of the suburban development is in East Bremerton, Silverdale, and
For the basemap I’ve opted to go with Mapbox’s Outdoor style. Initially I was really enamored with the Dark
theme used in the Netherlands map but I found it difficult to settle on the right two-color gradient to use
for the buildings on a dark background. Additionally, one of the initial bits of feedback on the prototypes
was a request for more context or even a 3D terrain model for the base map.
To that end I explored 2 options which I ended up rejecting. Using a 3D terrain model was rejected because it
was too slow to load and didn’t actually add much texture to the map. Applying a hillshade based on the
terrain model was also rejected because I found it distracting especially at high zoom levels where the
limits of its resolution became clear. In the end I settled on just using the Outdoor style with its mild
contour lines and place markers.
To help users understand exactly what the differences in building colors represent I did two things. First, I
added a legend. This was a tough call because in general I don’t care for the sort of UI clutter that
permanent panels add to a map. But I received a number of questions in early testing about what exactly the
building colors represented so I decided that it was important to be as specific as possible. To mitigate
some of the blow to useable screen space and contextualize the legend I made the background of the panel
The second technique was adding labels to the buildings at high zoom levels. This is helpful because it
allows you to quickly graze for information on the specific ages of the buildings without directly
inspecting them by clicking on them. Picking the right zoom level to limit a layer or set of labels too is
always tough; but I opted to make these year-built labels visible only when you’re zoomed into or below the
point at which a whole neighborhood is visible.
As I mentioned earlier you can see specific information about a building by clicking on it. Doing so rewards
you with a small pop up that lists the height of the building and the year it was built. I added this to
limit the potential for confusion. If you’re interested in or surprised by the visible properties of a
building just click on to see its exact values.
Dealing with Data Quality
Finally let’s discuss how I extrapolated the building heights and the data quality issues present in this
visualization. The buildings are extruded from 2D building footprints that were digitized by Kitsap County
and recently updated using 6-inch imagery captured in 2018.
This means that only buildings that were visible from aerial imagery are present in this map. For dense areas
like cities this is fine, where it becomes a problem is in the far reaches of Kitsap County which are
heavily forested and thus this data set is likely to under-represent buildings in those areas.
There is also the problem of multiple buildings on a single parcel of land. Currently the assessment of
buildings is not tied to the building footprints data maintained by Kitsap County. Rather the building’s
data is tied to the tax account number of a parcel polygon. The relationship between the year a structure
was built and how many stories tall it is, has to be inferred from the data for the parcel polygon that it
This is a lossy and error prone process that will for example give a set of five buildings on the same parcel
the same height and year-built attributes. It’s perfectly fine when you only have a single building on a
parcel but it handles scenarios like the condo complexes in downtown Bremerton poorly. Representing them
with the values of only a single tax account rather than the sum of all tax accounts in the building.
Ideally a building footprint would have its tax account and building extension id as attributes so it could
be related directly to the assessment data but that’s not something that exists right now.
The other issue with building heights is that Kitsap County hasn’t made a wide-scale effort to collect this
data. Instead we have to infer the heights of these buildings based on the number of stories these buildings
are assessed to have. For the purposes of this map I make the assumption that a single story is worth about
3 meters of height and I assume that buildings that don’t have any data are at least a single-story tall.