Professional Documents
Culture Documents
Exploring The Potential of 3D Web Mapping and Analysis To Support Informed Decision Making in Planning
Exploring The Potential of 3D Web Mapping and Analysis To Support Informed Decision Making in Planning
Exploring The Potential of 3D Web Mapping and Analysis To Support Informed Decision Making in Planning
Department of Civil,
Environmental and Geomatic
Engineering
Dissertation Title:
_Exploring the potential of 3D web mapping and analysis to support informed decision____
_making in planning.__________________________________________________________
• I confirm that I have read and understood the guidelines on plagiarism, that I understand
the meaning of plagiarism and that I may be penalised for submitting work that has been
plagiarised.
• I declare that all material presented in the accompanying work is entirely my own work
except where explicitly and individually indicated and that all sources used in its
preparation and all quotations are clearly cited.
• I have submitted an electronic copy of the project report through Moodle/turnitin.
Should this statement prove to be untrue, I recognise the right of the Board of Examiners to
recommend what action should be taken in line with UCL’s regulations.
Signature:
Date:
i Abstract
Urban planning supports growth of the built environment in the UK, geospatial data and
software is often required for the process that underpins this modern workflow. While open
web visualisation of 2D data is becoming increasingly common in planning, the use of GIS
tools for 3D data is still in the realms of trained desktop based users. In line with the
development of GeoXphere’s new cloud GIS (XMAP V2), this project examines the gap in
current web GIS for 3D data visualisation and analysis tools, using Mapbox GL JS and Turf.js
libraries.
A successful application was developed to visualise 3D LOD 1.2 buildings and analyse their
component 3D data, notable tools developed include buildings of equal height highlighting
and counting, q building height profiler and ‘On-Click’ 3D information. User feedback for the
application was promising, 100% of users agreed this application could aid the planning
process with further development and bug fixing. Mapbox basic functionality is able to
support the development of a useable application, which can create an open platform for
inspecting 3D spatial data. It can also be extended to perform GIS analysis with integration of
other JavaScript libraries, further benefiting the urban planning process.
This project was completed in collaboration with the industry partner GeoXphere Ltd. The
application is live at the date of submission via https://dissertation-gx.herokuapp.com, with
the code base visible in appendices C and via GitHub at https://github.com/RJHCarto/project.
ii Acknowledgements
I would firstly like to thank Dr Claire Ellul for the support and guidance she has provided since
joining the university. The advice you have given me since being one of your tutees has been
invaluable to both my personal skillset and the project. The team at GeoXphere have played
a crucial role in this project. I’d particularly like to thank Tom for taking the time on multiple
occasions to provide technical insight and for providing a wealth of JavaScript knowledge.
Furthermore, the support of Chris was invaluable, helping to widely distribute the user
feedback survey and allowing me to feel part of the team. I was grateful to get an insight into
the goings on at GeoXphere and get to know you all.
It is safe to say without the support of my friends and family, my accomplishments up to this
point would have been impossible. Emotionally they have been integral, offering a helping
hand and listening ear whenever they could. In particular Heidi and Rob, you listened to both
my spatial and non-spatial ramblings whether you wanted to or not and provided company
with laughter and more trips to get coffee than I’d like to admit.
Contents
Introduction ............................................................................................................................... 1
Motivation........................................................................................................................... 1
Emerging need within UK planning ..................................................................................... 1
Industry partner .................................................................................................................. 4
1.3.1 Web services ............................................................................................................... 4
Shared aim .......................................................................................................................... 5
Literature Review ....................................................................................................................... 6
GIS and the future of data and visualisation....................................................................... 6
2.1.1 Three-dimensional GIS ................................................................................................ 6
2.1.2 Desktop and Web GIS ................................................................................................. 7
UK planning ......................................................................................................................... 9
2.2.1 GIS and planning ....................................................................................................... 10
GIS and public engagement in planning ........................................................................... 13
2.3.1 Public Participatory GIS ............................................................................................. 13
2.3.2 Recent developments of public engagement in planning ........................................ 15
Gap analysis ............................................................................................................................. 16
Research Questions........................................................................................................... 17
Objectives.......................................................................................................................... 17
Resources ................................................................................................................................. 18
Data classification ............................................................................................................. 18
3D building datasets.......................................................................................................... 19
Dataset conversion ........................................................................................................... 19
Prototype requirements ................................................................................................... 21
4.4.1 Core mapping and data handling .............................................................................. 22
4.4.5 Analysis, tool creation and results presentation ...................................................... 23
Iterative development process ................................................................................................ 24
Stage 1 – Visualising the data ........................................................................................... 25
5.1.1 Data loading .............................................................................................................. 25
5.1.2 Map initialisation ...................................................................................................... 25
5.1.3 Map tracking ............................................................................................................. 26
5.1.4 Adding data sources and layers ................................................................................ 27
5.1.5 Layer selection .......................................................................................................... 31
Stage 2 – Building height profile ....................................................................................... 27
5.2.1 Drawing the profile segments ................................................................................... 27
5.2.2 Points of Intersection ................................................................................................ 27
5.2.3 Midpoints of intersection points............................................................................... 28
5.2.4 Midpoints in polygon test ......................................................................................... 29
5.2.5 Visualising the intersected buildings ........................................................................ 29
Stage 3 – Graphing capability............................................................................................ 34
5.3.1 Plotly.js plot outline and core components .............................................................. 34
5.3.2 X Variable .................................................................................................................. 34
5.3.3 Y Variable .................................................................................................................. 34
5.3.4 Width Variable .......................................................................................................... 35
Stage 4 – Tools for further data inspection ...................................................................... 36
5.4.1 Querying buildings of equal heights ......................................................................... 36
5.4.2 Switching ‘on & off’ the equal layer .......................................................................... 37
5.4.3 ‘On Click’ 3D building information ............................................................................ 37
Results ...................................................................................................................................... 39
Final development product ............................................................................................... 39
Application performance .................................................................................................. 43
6.2.1 Initial app interface ................................................................................................... 43
6.2.2 Individual layer .......................................................................................................... 43
6.2.3 Building height profile result..................................................................................... 43
Individual user feedback ................................................................................................... 45
6.3.1 Navigation ................................................................................................................. 45
6.3.2 Tool functionality ...................................................................................................... 45
6.3.3 Performance.............................................................................................................. 46
6.3.4 Useful comments ...................................................................................................... 47
Discussion ................................................................................................................................ 48
Developing upon functionality of previous web GIS......................................................... 48
Application performance .................................................................................................. 49
Use within UK planning ..................................................................................................... 50
Reviewing the research question...................................................................................... 50
Critical reflection ............................................................................................................... 51
7.5.1 GeoXphere viability ................................................................................................... 51
7.5.2 Bugs founds ............................................................................................................... 52
Further Development........................................................................................................ 53
7.6.1 Data ........................................................................................................................... 53
7.6.2 Interface .................................................................................................................... 53
Concluding Remarks ................................................................................................................ 54
Appendices............................................................................................................................... 55
References ............................................................................................................................... 76
Figures
Figure 1: Development of planning application maps from 2006 (right) to 2017 (left). ........................................ 2
Figure 2: Parish Online platform, showing relevant layers for planning. ............................................................... 4
Figure 3: Spatial analysis and its role within the planning process. ..................................................................... 10
Figure 4: Example of maps used within current planning reports. ....................................................................... 11
Figure 5: Examples of web mapping applications for the planning process at local government level. .............. 12
Figure 6: Examples of new and old PPGIS............................................................................................................. 14
Figure 7: Diagram of gap within the current provision for planning GIS. ............................................................. 16
Figure 8: Current LOD categories for a residential building. ................................................................................ 18
Figure 9: Diagram of height attributes given within the datasets.. ...................................................................... 19
Figure 10: Conversion of data in FME using the Wavendon dataset as an example. ........................................... 19
Figure 11: Map of dataset location showing overall extent of features at each location. ................................... 20
Figure 12: Mock-up diagram of prototype web application. ................................................................................ 21
Figure 13: Exemplar diagram for the iterative development process. ................................................................. 24
Figure 14: The four stages of development. ......................................................................................................... 24
Figure 15: Resulting development from stage 1, showing 2D and 3D layer visualisation and navigation. .......... 33
Figure 16: Visual example of how the midpoint of two intersects. ...................................................................... 28
Figure 17: Intersect to midpoint for loop process. ............................................................................................... 28
Figure 18: A bar plot allowing variable widths depending on per feature intersection widths ........................... 35
Figure 19: Working example of 'On-Click' 3D building information tool. ............................................................. 38
Figure 20: Working example of the 'Buildings of equal height tool'. ................................................................... 38
Figure 21: Initial in browser view of the application when first loaded by the user.. .......................................... 40
Figure 22: In browser working example of prototype with the buildings profile tool in use. .............................. 41
Figure 23: In browser working example of prototype with the buildings of equal height and 'On Click' 3D pane
information tools in use........................................................................................................................................ 42
Figure 24: Chart representing user percentage against ease of use questions .................................................... 45
Figure 25: Chart representing user percentage against performance questions ................................................. 46
Figure 26: Inconsistent layer loading between the 2D and 3D panes. ................................................................. 52
Figure 27: Building height profile multi line profiling bug .................................................................................... 52
Figure 28: Building height polyline profiling bug . ................................................................................................ 52
Figure 29: Kepler.gl user data upload interface. .................................................................................................. 53
Tables
Table 1: The comparison of Web and Desktop GIS. ............................................................................................... 8
Table 2: Table adapted from the Plain English guide to the Planning System. ...................................................... 9
Table 3: Outline of notable V1 application components. ..................................................................................... 39
Table 4: Performance testing for loading components ........................................................................................ 44
Table 5: Navigation user feedback ....................................................................................................................... 45
Table 6: Checklist of web GIS functionality .......................................................................................................... 48
Introduction
The planning industry are a user group that greatly benefit from spatial data of all type
because in essence all planning happens somewhere and therefore is locational. With the
current growth in both GIS data and platform options, a period of revision for how the
planning system integrates spatial data into its processes is necessary. User groups such as
the future cities catapult are looking at the digital potential for urban planning (Future Cities
Catapult, 2016), which is addressing platform and data separately. However, the proposal of
both a flexible and current GIS system which is opensource, web based and 3D centric is
lacking. This report will provide a well-informed comparison of current provision and propose
a newly developed tool to meet user needs observed in feedback sessions.
Motivation
With the emergence of 3D spatial data, the need for an application to read, visualise and
analyse is ever present. Advance desktop GIS is becoming better equipped to handle 3D data,
however with expensive licencing and often high hardware requirements this technology can
be considered inaccessible to the majority (Davis and Haklay, 2004). Following the
development of cloud technologies the value of the internet for business workflow and
service has increased, within the geospatial industry web GIS is fast becoming a viable
platform. Therefore, the ability to visualise data as well as analyse data within a web
environment is an appealing one. Thus, providing a better mechanism for data to be
understood by the community (Hu et al, 2015).
1
Figure 1: Development of planning application maps from 2006 (right) to 2017 (left). Applications used are from the City of
London (2006; 2017)
GIS has been a key tool for planners since its first conception as a viable product, it has seen
growing use in the US within local government from as early as 1984 (Warnecke et al, 1998).
Furthermore, GIS is now considered a standard among a planners toolset (Drummond &
FAICP, 2008), with planners being expected to know how to carry out analysis including; urban
modelling, multi-criteria decision analysis and public participation to name a few. However,
often these tools are reserved for the right of the professionals or planning companies, and
access to the public is limited by proxy due to the amount of training necessary for
engagement.
More recently, the growth of open data, open software and the web – which is now providing
an internet connection in 90% of households (ONS, 2018) – means public capability is
changing. An increasing amount of spatial data is also being provided under the recent
governmental plans through the new Geospatial Commission (‘Unlocking of government’s
mapping and location data to boost economy by £130m a year’, 2018) which stipulates free
provision of a UK wide GIS.
2
The Ordinance Survey are providing their MasterMap data, this includes ‘Building Height
Attributes’ an extensive 3D dataset (Ordinance Survey, 2014) which offers great potential for
this report. Recognition of this change within the opensource community is fuelling
developments towards more stable web mapping libraries that realise the need to provide
3D support. Mapbox’s JavaScript library recently added development of extruded layer styling
in 2016 (Budorick, 2016).
Growth in new and open data support and increased internet coverage gives the planning
industry new avenues to consider for both 3D data use and web GIS use. In reality the use of
such platforms within the planning industry are rare, in 2009 research into web platforms was
described as ‘favourable’ when used for public participatory planning and the internet
considered a ‘primary mechanism’ for access to both planners and stakeholders (Simão,
Densham, & Haklay, 2009). Furthermore, Drummond & FAICP (2008) described such
developments mentioned above as long term future problems that planners will face. The
potential for both current and future needs of the planning industry to be met by such
frameworks is clear, and this report will aim to contribute to this effort.
3
Industry partner
This project is linked with GeoXphere an industry partner who specialise in providing cloud
based GIS solutions, surveying hardware and airborne and ground survey capture.
The current development focus of GeoXphere is XMAP, which will form a product in itself and
add to Parish Online functionality.
4
Shared aim
The overarching project aim is,
“… to give Local Councils access to a system that helps them find answers. The move to XMAP will mean the
interface is easier to use (and therefore users will be able to find things easier), and as a by-product, XMAP is
more technically capable so we'll be able to add more components more easily. A 3D component is one of
those. In the end, the more insightful visualisation we can put in front of the user, the more they'll be able to
find the answers they need.”
The technical aim involves producing a fully functioning web application, with a core map
component. Which will enable analysis, visualisation and distribution of both 2D and 3D
spatial data with focus on planning incentives. The application will sit within GeoXphere’s
XMAP cloud GIS as a module, for users to access and use with their custom data, therefore it
will aim to complement the Cloud GIS both visually and practically.
5
Literature Review
GIS and the future of data and visualisation
When examining, arranging or analysing all varieties of spatial data a Geographical
Information System (GIS) is commonly considered the digital tool for the task. (Heywood et
al, 2011). It has long been agreed that information regarding the earth surface should be
stored and processed through such computer systems (Rhind, 1989). Spatial data has
primarily been recorded in 2D consisting of an x and y coordinate or longitude and latitude
(Haining & Haining, 2003), such data has been integral to the invention and development of
GIS since the 1960s in Canada with CGIS and throughout the rapid development in the 1980s
with ARC/INFO (Waters, 2017), bringing GIS to the point it is at today where “geodesign” is of
utmost importance for the effect this tool is having upon decision making via processes such
as visualisation (Dangermond, 2014).
Examples of the use of GIS with 2D data can range from physical assessment of landscape
such as work by Dai and Lee (2002) for landslide modelling in Lantau Island, Hong Kong, to
visualisation of human migration flows using web mapping principles by Zambotti et al (2015).
However, over recent years the emergence of 3D data representation within the GIS industry
has been growing.
6
A particular 3D data focus is that of city models, the Open Geospatial Consortium standards
have been refined from CityGML 2.0. This classification method can be considered format-
agnostic, with LOD 1.2 being most common in practice for models of LOD1 classification
(Biljecki et al, 2016). Proprietary developers have been working in this study area, with
toolboxes such as the ‘3D Analyst’ from ArcMap 10.6 (ESRI, 2018a), which apart from
visualisation now currently enables line of sight functionality and 3D data querying alongside
height measurement for 3D city model datasets. With 3D urban mapping and landscape
planning being named as an area that needs 3D GIS (Abdul-Rahman & Pilouk, 2008), it’s
development with regards to city models is an important one.
Current examples of 3D GIS development can be split between proprietary and open source.
Proprietary refers to a paid for service/program/licence which often supplies software
versions with capabilities controlled and developed by the closed source company (Singh et
al, 2015) and open source is the collaborative open development of software for free,
meaning it can be used and developed as each user sees fit (Steiniger & Bocher, 2009). The
platform for 3D GIS development is also an area of research. While with traditional 2D GIS,
access and viability of the web at the time of initial development was unfeasible, this is not
the case with 3D GIS in contrast it is evolving in parallel with web GIS (Milner et al, 2016).
7
Advantages Disadvantages
machine hardware.
Table 1: The comparison of Web and Desktop GIS. Information adapted from multiple sources. (Fu & Sun, 2010; Baptista &
Paiva, 2009; Peng & Tsou, 2003)
8
UK planning
Planning within the UK is the system where building developments are proposed, mediated
and brought to fruition. It is the way in which government can centralise decision making and
processing of proposals. The overarching aim is to ensure correct development with a positive
outcome for both the community and the economy. The process is also supposed to be able
to judge the suitability of a project. (Plain English guide, 2015)
To understand where spatial analysis through GIS sits within the UK planning process, key
interest groups and decision makers must first be outlined, as in table 2.
Local planning authorities This encompasses the three tiers of UK local government:
County, district, town and parish councils.
Table 2: Table adapted from the Plain English guide to the Planning System, showing key decision takers in the process. (Plain
English guide, 2015).
9
2.2.1 GIS and planning
In 2008 a review by Anthony Gar-On Yeh (2008) discussed the use of GIS for planning support
at the time, he found how GIS from its inception in the 1970s (Chrisman, 2006) has spread
throughout the planning process and is currently at use in some form through all levels of
planning. Multiple sources corroborate this, stating that as GIS advances it is becoming ever
more important for the support of the planning process (Geertman & Stillwell, 2003; Jackson,
2008; Klosterman & Brail, 2001), figure 3 below does well in outlining the overall use of GIS
from initial data handling, through to plan proposal and processing with the end goal of
evaluation and public feedback.
Figure 3: Spatial analysis and its role within the planning process. (Yeh, 2008)
When viewing local planning applications in the UK, it is often the case that the extent of GIS
analysis is static, meaning to say often the production of maps is as images within lengthy
reports. These static maps are often basic boundary plans denoting the extent of
development or can be more elaborate annotated map. An example of such planning maps
are shown in figure 4.
10
A. B.
Figure 4: Example of maps used within current planning reports. A (The Neighbourhood Plan Steering Group, 2018), B ("Details
of Planning Application - CB/18/02523/FULL", 2018).
Yeh (2008) states technical capability of GIS is no longer a constraint, but rather the training
necessary, data availability and top tier change. While local level submission is still grounded
within static maps, the city, district and county level are beginning to make use of web
mapping services to centralise planning information.
Both Canterbury and Leicester city council have web mapping portals which allow all types of
users to browse planning applications spatially. Canterbury planning constraints map
(Canterbury City Council, 2018) is platform which currently holds all planning boundaries as
layers for viewing, the platform does not aid in linking specific planning projects to a unified
map much like Leicester city maps (Leicester City Council, 2018) does. Leicester city maps uses
a pin to display planning history for land parcels on the map, the map goes further to link to
the traditional planning portals where information about proposals and status can be found.
These two examples in Figure 5 are a good representation of the extent of Web GIS in UK
planning currently.
11
Figure 5: Examples of web mapping applications for the planning process at local government level. Both systems have
been created by city councils, the left is Leicester city MAP (Leicester City Council, 2018), while right is Canterbury City
Council Planning Constraints Map (Canterbury City Council, 2018).
Traditional GIS analysis within the planning industry is often confined to the desktop of
planning officers examples include rule based systems such as ‘CommuntiyVis’ and ‘What if?’
aiding the process in terms of decision based analysis which function to offer land use
recommendations among other classification methods (Klosterman & Pettit, 2005). While
such tools are beneficial to the planner, Livengood & Kunte (2012) warn that traditional GIS
use in planning often lacks both transparency and participation, complicity undermining the
decision making opportunities for the public. GIS is beginning to be displayed publicly for
information dissemination such as the examples from Canterbury and Leicester and
fortunately the process of public engagement in planning is also realising the relevance GIS
can have, with the development of public participation GIS (PPGIS).
12
GIS and public engagement in planning
It has long been agreed that public participation in planning is underserved and the public
should have “more say in shaping local areas” according to Wilson et al (2017). The need for
stakeholder inclusion which encompasses the public can be first found in literature as early
as the 1960s, where a review of the 1969 Skeffington committee first found concerns for the
inclusion of residents in decision making (The Skeffington Committee, 2013). The current
rhetoric from UK planning is to allow engagement opportunities at all stages of the planning
process, outlined in the flowchart in appendix A, however engagement is often increasingly
limited the further through the process an application goes (Baker et al, 2007).
Virtual Slaithwaite is considered the earliest instance of web-based PPGIS for planning, while
the tool in Figure 6 is a product of its time, it attempted to involve citizens in the decision
process though an organisation called Planning for Real ® (‘What is PFR?’, n.d.) the aim was
to allow users to comment upon local land features in Slaithwaite which aided in compiling
opinion for the planning consultation of new developments (Kingston, 2011). The outcome of
such a tool was a village wide plan for the local area. Its arguable without such a system,
widespread opinion and commentary by citizens on the future of Slaithwaite could not have
been achieved by traditional methods.
13
Figure 6: Examples of new and old PPGIS. Left: Virtual Slaithwaite (‘Slaithwaite Public Participation GIS’, 2003), right:
Ushahidi (‘OpenCiclismo: San Antonio’s Crowdsourced Bike Map’, 2018).
Recently public participation within the modern web mapping realm has been demonstrated
by various applications. Ushahidi (‘Ushahidi’, 2018), an application both web (Figure 6) and
mobile based is used by change makers to poll opinion or as they put it “Read the crowd”.
This application allows survey responses to be geolocated and presented on a web map, with
the styling based upon response attributes. These responses are publicly submitted via a form
interface. The modern approach begins to tackle the professional decision taker and public
engagement link, while the example shown is not planning specific, adaption or inspiration
from such a system may be beneficial.
14
The approach of PPGIS within planning has been a cause for concern for some academics. The
opportunity for the tool to be exclusive rather than inclusive of the public due to use of
internet and digital technology would create bias in participation (Craig et al, 2002).
Furthermore to enable participation prior knowledge or training could be expected (Pickles,
1995). Often these systems encourage responses at a single citizen scale which arguably may
aid the loss of community behind such decisions (Baker et al., 2007).
These issues are important to consider when developing such systems, with both good design
and public education, it may be that PPGIS systems offer a well developed starting point for
public facing GIS within the planning process.
15
Gap analysis
This analysis is a prequal to application planning and development to best inform the process.
As previously mentioned in section 1.3.1 . Parish Online, is a widely used platform distributed
and maintained by GeoXphere. The current version does not integrate 3D data, and mainly
enables premade data loading and viewing as well as vector layer creation. The extent of map
tools are limited to distance measuring and data export.
From Figure 7 and examples, it is evident that the development of a tool with the ability to
bridge the difference between functionality of desktop and web GIS while maintaining the
simplicity of web GIS is necessary. XMAP is aiming for this goal, while the proposed application
is vital to enabling 3D capability.
16
Research Questions
The proposed application development will attempt to address the gap in current products
outlined previously and also address the following research question:
Can off-the-shelf web mapping tools be extended to enable the use of 3D within the planning
process?
Objectives
The following objectives will enable the aims from section 1.4 and the research question to
be addressed and investigated.
1. Investigate the use of opensource and proprietary JavaScript libraries for 3D web mapping
visualisation.
2. Select a chosen library to develop a method of data upload and visualisation, using
JavaScript, HTML5, CSS for front end development.
3. Use a node server to allow the application to be hosted locally and easily ported to
production.
4. The creation of two analysis tools that use or manipulate height from the 3D data.
5. Explore further development of the dashboard for graphing alongside the analysis tools,
using packages based upon D3.
6. Undertake user feedback sessions for application interface, operability and performance
assessment.
17
Resources
This chapter will address the data used in this project and the development libraries that are
required for the first version of the application. Firstly a description of datasets, their
attributes and the relevant conversion necessary, followed by a detail description of which
libraries were chosen for each component of the application and the reasons behind this.
Data classification
The primary data visualised in this application is 3D building data which is in the form of
extruded polygons. The classification of this data can be considered as LOD 1.2 from Figure 8.
Figure 8: Current LOD categories for a residential building. (Biljecki et al, 2016)
18
3D building datasets
The three datasets visualised within the application are sourced from the ‘OS MasterMap
Topography Layer – Building Height Attribute’ (Ordinance Survey, 2014) from the following
5km national grid tiles:
• SP9520 for Eaton Bray • SP9035 for Wavendon • TQ2580 for UCL
4722 features 10104 features 63371 features
The ‘OS_TOPO_TOID’ is the primary ID attribute for each polygon feature in a dataset, with a
range of height attributes accompanying each feature in a dataset. The differing height values
attributed to each feature is displayed in Figure 9. For the purposes of this project ‘RelH2’ the
building height to the eaves
before the roof will be used
to extrude to. Visually a 3D
building of LOD 1.2 is similar
to a building without a roof
and therefore similar to the
height of most buildings at
‘RelH2’.
Figure 9: Diagram of height attributes given within the datasets. Adapted from
Ordinance Survey (2014).
Dataset conversion
Each national grid tile used required conversion from geodatabase (.gdb) format to GeoJSON
format (.geojson/.json). Geodatabase file format is an ESRI format often used for storing
spatial objects and information, they are commonly read by GIS systems (ESRI, 2018b).
GeoJSON file format is geospatial information based on JavaScript Object Notation (JSON)
(Butler et al., 2016) which is a standard format used within JavaScript frameworks.
Geodatabase Reader GeoJSON Writer
Figure 10: Conversion of data in FME using the Wavendon dataset as an example.
The datasets following the conversion process in Figure 10 are feature collections, these have
been converted in FME using simple data readers and writers. These collections are JSON files
in the form of an array containing each building as a separate feature in the array, an example
can be found in appendix B.
19
Figure 11: Map of dataset location showing overall extent of features at each location. Basemap provided by CartoDB (CARTO, 2018), data provided by the Ordinance Survey (2014)
20
Prototype requirements
The prototype of the web application will draw on both web mapping components and
dashboard components, presenting a platform which will visualise 3D building data and allow
interaction with the data. It will also expand upon the mapped datasets, by presenting
analytical information on a graph and within overlay features. Figure 12 outlines the
envisaged layout of the prototype, where the contents of each pane represents the type of
data that can be expected to be displayed in the working prototype.
21
4.4.1 Core mapping and data handling
The core JavaScript libraries for data handling, web mapping and visualisation.
4.4.2 Mapbox GL JS
Unlike the JavaScript mapping libraries of Leaflet and OpenLayers, Mapbox GL JS is able to
extrude polygon data to a height attribute as core feature. Thus enabling 3D visualisation that
is integral to this application. The library uses WebGL which renders an interactive map where
data can be presented as a layer or multiple layers, alongside this process Mapbox renders
styles for basemaps, which can be independently controlled using Mapbox studio. (Mapbox,
2018a)
To create layers Mapbox uses sources to supply the map layers with data, GeoJSON is an
accepted format for a Mapbox source which also is complementary to the data format of the
processed OS national grid tiles (Mapbox, 2018b). Furthermore Mapbox uses tiled sources in
both vector and raster format, this tiled source is able to allow better map performance for
larger datasets (‘Vector tiles: the next generation of tiled maps’, 2016) which may be useful
for this project.
Another 3D enabled JavaScript library is Cesium JS, this library is primarily for serving 3D globe
environments and can be enable to present GeoJSON in 3D similarly to Mapbox. However its
adoption within the community is significantly less at just 7% of npm downloads in the last 6
months compared to Mapbox GL JS (npm trends, 2018). Furthermore Mapbox GL JS is well
documented with a developed support portal providing both working examples and API
definitions. It is for these reasons that the Mapbox GL JS library was chosen as a core
development library for this application.
4.4.3 jQuery
The use of jQuery for HTML element extraction and manipulation (JS Foundation, 2018) will
prove crucial in reading data fed into the application for use in both custom tools and
interactions. This library enables fast use of predefined jQuery functions within any JavaScript
framework, giving this application flexibility during development. It has become widely
accepted across the web, with over 90% of the top 10,000 websites using it today (built with,
2018).
22
4.4.4 Lodash
Lodash uses modular methods for working with multiple types of variable including objects
and arrays, streamlining development to simpler one line functions. (Lodash, 2018)
4.4.6 Turf.js
This library will be used alongside basic JavaScript functionality to be the core component for
geospatial analysis performed within the application. Turf.js will be used client side for spatial
operations performed upon the GeoJSON datasets (Turfjs, 2018). This library is described as
GIS for web mapping and is recommended by Mapbox for use with their products (Mapbox,
2018c).
4.4.7 Math.js
Math.js is a library written for JavaScript and specifically Node.js to give a solution to working
with number variables, providing added functionality for mathematical problems and
processes. It supports numbers, arrays and more. (mathjs, 2018)
4.4.8 Plotly.js
Providing solutions for data visualisation, Plotly is a package which spans most major
development languages including JavaScript. Plotly.js is currently used by companies such as
Facebook and Walmart, it is a library built from d3.js and stack.gl which enables static and
animated charting. Functionality includes many types of visualisation from scatter plots to
scientific charts. (plotly, 2018)
23
Iterative development process
The term development in this context encompasses the process of web development using
three main development frameworks HTML5, CSS3 and JavaScript. The method used to
approach workflow toward the prototype application was an iterative one (Spence & Bittner,
2005), whereby the application was developed in stages and each stage followed a design-
build-test lifecycle outlined in figure 13. Each stage was focused for a particular goal and time
period, until all prototype goals were met through the requisite number of development
stages. This workflow is similar to an agile development process.
The full code for each section can be found in appendix C, each code snippet caption will
reference the heading in appendix C.
The four stages of development are outlined in the figure 14, where the core components of
development are listed. These stages are explained in greater detail throughout sections 5.1
to 5.4.
24
Stage 1 – Visualising the data
Code Snippet 1: Global variables for GeoJSON 3D Building datasets. Appendix C3.
The map pane must first be initialised using the code snippet 2, here the parameters of the
function mapboxgl.Map() are specified in JSON format.
Code Snippet 2: Defining the variable for the 3D map pane, using Mapbox GL JS functionality. Appendix C3.
Where style: is the map pane basemap directory in Mapbox studio accessed using an access
token, center: defines the map centre, zoom: is the level of zoom on load, pitch: is the
angle of incidence, bearing: is the map bearing on load and container: is the id for the
HTML div or section and the styling in the CSS file. The 2D map was also created similarly.
25
5.1.3 Map tracking
The application contains two map panes, map3D and map2D which will present the dataset
information in the respective dimensions. Having these two panes track with each other so
they are able to always present the 3D and 2D view of the same location will aid with usability.
disable = true;
map2D.setCenter(center);
map2D.setZoom(zoom);
map2D.setBearing(bearing);
disable = false;
}
});
map2D.on("move", function () {
if (!disable) {
var center = map2D.getCenter();
var zoom = map2D.getZoom();
var bearing = map2D.getBearing();
disable = true;
map3D.setCenter(center);
map3D.setZoom(zoom);
map3D.setBearing(bearing);
disable = false;
}
});
Code Snippet 3 outlines the 25 lines used to ensure the two map panes consistently match,
each mapXX.on("move") function re-defines the center, zoom and bearing variables
whenever either pane moves. This works when moving either pane due to both function
setting the variables of the other. This code was adapted to fit the needs of the application
from Bo Ericsson’s work (2016), the pitch tracking for both maps has been removed as users
may want to interrogate the data further through pitch change within the 3D pane, which
would be unnecessary in the 2D pane.
26
Stage 2 – Building height profile
This development stage will aim to design, develop and deploy a height profile tool, which
will use the datasets present in the map, to give a height profile for a user defined line
segment.
The following sections 5.2.2 to 5.2.5, are all notable snippets which contribute to the
getProfile() function.
Code Snippet 4: The first part of getProfile() function, which functions to give the coordinates of the points of intersection
between the line segment and the building layer. Appendix C5.
The intersectingFeatures are then iterated through using a for loop to push each features
coordinates to the array variable interArray, which is then sorted using the JavaScript
function sort(). This array will prove useful for multiple loops within this function.
27
5.2.3 Midpoints of intersection points
The next step towards compiling the buildings intersected by the user segment was to find if
the intersect points are within any features in the currently active layer.
Initially, turf.js point in polygon functionality was used upon the SELECTED_LAYER_JSON and
intersectingFeatures. However due to intersect points always positioned at the building
polygon boundary, this method was an edge case for the turf function and inconsistently
selected some features of the SELECTED_LAYER_JSON as containing the point and some as
not, therefore a more robust method was required.
Figure 16 represents how taking the midpoint of two consecutive intersect points would
always create a point full inside or outside a polygon.
midpointArray.forEach(item => {
point = turf.point(item);
midpointArrayPoints.push(point);
});
Code Snippet 5: getProfile() functionality used to create a midpoint array, visual example in figure 13. Appendix C5.
Snippet 8 shows a for loop process which takes the first and second point coordinates as a
pair, then the third and fourth and so on. For each consecutive pair the average was calculated
for the x coordinates and the y coordinates, giving a
midpoint between each pair, illustrated in figure 17.
28
5.2.4 Midpoints in polygon test
The following nested for loops now tests each feature in midpointArrayPoints and each
SELECTED_LAYER_JSON.features using the turf function turf.booleanPointInPolygon. If
the function finds a true relationship it will add that feature to the buildingFeatures array,
and also add the height of that feature to a separate array for use in separate tools.
Code Snippet 6: Nested for loop, creating feature array intersected by the user segment, from getProfile(). Appendix C5.
uniqueBuildings = _.uniq(buildingFeatures);
selectedBuildings = turf.featureCollection(uniqueBuildings);
Code Snippet 7: Lodash and turf functions for creating the final array of buildings from the getProfile() function. Appendix
C5.
This finalises stage two of development and the initial version of the getProfile() tool.
29
5.2.6 Adding data sources and layers
Layers are added to the map pane through first defining sources, these are set using the
addSource() function which requires the type of source and path to the data to be defined,
data were set to the variables used in Code Snippet 1. Following the source addition from the
local JSON variable in section 5.1.1 , the layer can now be created using addLayer().
Map3D.on(‘load’, function () {
hasLoaded = true;
Code snippet 4 defines both
map3D.addSource(‘UCL’, {
the layer id and which source
type: ‘geojson’,
data: UCL to create the layer from. The
});
type sets the polygon layer to
map3D.addLayer({
id: ‘UCL’, 3D using ‘fill-extrusion’,
source: ‘UCL’, while layout has been used to
type: ‘fill-extrusion’,
layout: {‘visibility’: ‘none’}, set visibility to none, which is
paint: {
‘fill-extrusion-color’: ‘#008080’, controlled in the layer menu in
‘fill-extrusion-height’: {
section 5.1.5. Finally, the
‘type’: ‘identity’,
‘property’: ‘relh2’ paint variable defines colour,
},
‘fill-extrusion-base’: 0, opacity and which feature
‘fill-extrusion-opacity’: 0.6
}
property from the JSON to
}); extrude to.
});
Code Snippet 8: Mapbox functionality used to add a layer source from the local
UCL variable, and to create 3D layer from for the 3D map pane. Appendix C3.
This Mapbox functionality is used multiple times for both 2D and 3D panes, to add a source
and layer for all datasets. Wrapped within the MapXX.on(‘load’) function, this ensures the
sources and layers are added upon loading of the map pane. The hasLoaded variable controls
the loading order and time of this asynchronous code.
For the 2D map pane the addLayer() defines slightly differently, setting the type to 2D using
‘fill’ and using paint to define just colour and opacity.
30
5.2.7 Layer selection
Three global variables are initially created in mapStart.js (Appendix C3) these are:
• SELECTED_LAYER_ID • SELECTED_LAYER_JSON • SELECTED_LAYER_BBOX
These variables are defined using the layer menu, they are both used to enable this function
and functions required for other tools stated later. The ID is a string of the current ID shown
in the map panes, the JSON is the full GeoJSON for the current map panes and the BBOX is
the bounding box of the GeoJSON.
function switchLayer(layer) {
SELECTED_LAYER_ID = layer;
if (layer == 'UCL' && hasLoaded) {
map3D.setLayoutProperty('EatonBray', 'visibility', 'none');
map3D.setLayoutProperty('Wavendon', 'visibility', 'none');
map3D.setLayoutProperty('UCL', 'visibility', 'visible');
map2D.setLayoutProperty('EatonBray', 'visibility', 'none');
map2D.setLayoutProperty('Wavendon', 'visibility', 'none');
map2D.setLayoutProperty('UCL', 'visibility', 'visible');
}
------------------------------------------------------------------------
getLayerGeoJSON(layer).then((json) => {
SELECTED_LAYER_JSON = json;
bboxFromJSON(json).then((bbox) => {
SELECTED_LAYER_BBOX = bbox;
fit(bbox)
});
});
}
Code Snippet 9: The first section of the switchLayer function used by the layer menu, the if statement also repeats until the
grey break line for the layer ids Eaton Bray and Wavendon before continuing to the functionality after the grey break line.
Appendix C4.
Snippet 5 outlines the components of the switchLayer() function, the global ID variable is
set in the first line of the function followed by an if statement. The if statement relies on
the layer variable, this is set by the radio button selected in the HTML code. For the UCL
example above, if layer equals 'UCL' and the hasLoaded variable is true then it will
proceed through the if statement.
31
The contents of the statement controls the visibility of the layers setting UCL as the only
visible layer on both map panes, using mapXX.setLayoutProperty(). This Mapbox function
sets layer visibility using either 'visible' or 'none', for the layer ID. The if statement is
repeated for each scenario of the layer variable which can be either 'UCL', 'EatonBray' or
'Wavendon', before moving on to the functionality after the grey break line in snippet 5.
The latter section of the switchLayer() function in snippet 5 runs through a series of
functions which are defined outside of switchLayer(). Snippet 6 outlines these functions
which use JavaScript promises to consistently carry out the next function after the last has
finished and yielded the necessary result.
function getLayerGeoJSON(layer) {
return new Promise((resolve, reject) => {
$.getJSON((window[layer]), function (data) {
resolve(data)
});
});
}
function bboxFromJSON(json) {
return new Promise((resolve, reject) => {
resolve(turf.bbox(json));
});
}
function fit(bbox) {
let bboxToUse = bbox || SELECTED_LAYER_BBOX;
map3D.fitBounds(bboxToUse, {padding: 20});
map2D.fitBounds(bboxToUse, {padding: 20});
}
Code Snippet 10: Precursor functions necessary to ensure the correct layer JSON is in use for the layer menu and any
further tools. Appendix C4.
This first function getLayerGeoJSON(), is using the jQuery function $.getJSON() on the
currently selected layer. Secondly in bboxFromJSON() the turf.bbox() function from turf.js
is creating a bounding box from the JSON. Lastly, the fit() function processes the bounding
box and uses mapXX.fitBounds() to fit the map panes to the chosen layer with a predefined
padding. For this process three different JavaScript libraries are in use.
The outcome of this initial stage of development is shown in Figure 17, which includes all
the aforementioned progress.
32
Figure 17: Resulting development from stage 1, showing 2D and 3D layer visualisation and navigation.
33
Stage 3 – Graphing capability
Following the stage 2 development in section 5.2, it was necessary to incorporate a graphing
ability into the height profile tool function getProfile(). The following sections outline an
iterative development upon the previous stage to integrate the prerequisite variables for use
with Plotly.js.
5.3.2 X Variable
The for loop in snippet 12 uses math.js functionality to find the value of X for each bar plot.
This is halfDist, the value of i in widthArray. Plus cumulativeDist, each value in
widthArray that came prior to i. Giving xArray, where each value corresponds to the centre
point of each bar.
xArray.push((widthArray[0]/2));
for (var i = 1; i < widthArray.length; i++) {
cumulativeDist = math.sum(widthArray.slice(0,i));
halfDist = (widthArray[i]/2);
xArray.push(cumulativeDist+halfDist);
}
Code Snippet 12: for loop initiated within getProfile() for creating the x variable. Appendix C5.
5.3.3 Y Variable
yArray was created previously in section 5.2.4 .
34
5.3.4 Width Variable
Created from iterating through the interArray from section 5.2.2 , width is the array of the
distance between each consecutive intersect coordinate pair similarly to the midpoint
method in section 5.2.3 , using turf.distance().
Code Snippet 13: for loop initiated within getProfile() for creating the width variable. Appendix C5.
The result of stage 3 of development, is shown in figure 18 with the initialised plotly.plot
in HTML.
Figure 18: A bar plot allowing variable widths depending on per feature intersection widths has be manipulated to present a
representation of building profile alone a user defined line segment, all happening within the getProfile() function.
35
Stage 4 – Tools for further data inspection
The following development stage was used to develop two separate tools, one of which
shows buildings of equal heights giving both the height and the number of buildings in a map
overlay. The value of e in this tool is the feature under the mouse which is controlled from a
mapXX.on() function in equalOn() in snippet 15, allowing 'mousemove' interaction.
The second tool gives ‘on click’ building information within the 3D map pane.
relatedFeatures = map2D.querySourceFeatures(SELECTED_LAYER_ID, {
filter: ['in', 'relh2', feature.properties.relh2]
});
Code Snippet 14: From showing() function the following code sets the information for the overlay and the equalBuildings
layer. Appendix C6.
The hiding() function operates by removing all components of the similar buildings and
returning the map to its state prior to using the tool. This is controlled within equalOn() by
the mouse leaving the 2D map pane.
36
5.4.2 Switching ‘on & off’ the equal layer
The following code snippet shows both mapXX.on() and mapXX.off() functions where the
first pair of functions are turned on by the equalOn() function after the equalBuildings
layer is created, and the latter pair turned off using equalOff(). This on and off functionality
is controlled by a radio buttons in HTML.
Code Snippet 15: On and off event listeners for the equalOn() and equalOff() functions. Appendix C6.
function clicking(e) {
new mapboxgl.Popup()
.setLngLat(e.lngLat)
.setHTML(
"Building ID: " + e.features[0].properties.os_topo_toid + "</br> Building
Height: " + (e.features[0].properties.relh2).toFixed(1) + 'm')
.addTo(map3D);
}
function clickingOn () {
map3D.on('click', SELECTED_LAYER_ID, clicking)
}
function clickingoff () {
map3D.off('click', SELECTED_LAYER_ID, clicking)
}
Code Snippet 16: Three functions required to create 'On Click' pop-up information and turn the function on and off.
Appendix C7.
When on, the clicking() function initialises creating a new Mapbox pop-up and setting its
position to the position of click and its contents to the TOID and building height of the feature
at the position of click, the pop-up will only appear if this is found.
37
This concludes the final stage of development by creating two tools useful for further
examining the dataset 3D information within the web map application. The result for this
iteration stage is displayed in figures 19 and 20.
Figure 19: Working example of 'On-Click' 3D building information tool, which presents a pop-up containing TOID and height
for the feature. This function is active only for the 3D pane.
Figure 20: Working example of the 'Buildings of equal height tool', upon mouse over both the 2D and 3D map panes will
highlight buildings of equal height to the feature under the users mouse. The overlay gives a height and a feature count.
38
Results
This section will present the final, version one prototype of the application. The platform
will undergo performance testing locally, and publicly when deployed via Heroku at
https://dissertation-gx.herokuapp.com.
Layer menu The ability to view different layers is enabled within this tool,
it effectively controls which layers are active and also
ensures the viewport of both map panes displays the chosen
A
layer on initial selection.
Fitting layer to viewport The ‘fit’ function from snippet 6 is also isolated outside of the
layer menu to give users the flexibility to reset the viewport B
if they get lost after layer inspection.
Building height profile Integrating Mapbox GL Draw functionality, this profiling tool
extracts a user defined line segment, that when plotted
across buildings, will create a newly selected building layer in
2D and 3D and present the line segments vertical height
C
profile with respect to the building heights in the graphing
pane. See figure 13 for a working example.
Buildings of equal height Using the input of mouseover, this tool takes the feature
under the users cursor and visualises all other buildings
within the 2D and 3D viewport render level. It also presents D
there common height and the overall feature count in a map
overlay. See figure 14 for a working example.
‘On Click’ pop-up information From the click of the users mouse the 3D pane buildings can
be further integrated, presenting a pop-up with both TOID E
and height information. See figure 14 for a working example.
39
Figure 21: Initial in browser view of the application when first loaded by the user. Annotated in relation to table 3.
40
Figure 22: In browser working example of prototype with the buildings profile tool in use.
41
Figure 23: In browser working example of prototype with the buildings of equal height and 'On Click' 3D pane information tools in use.
42
Application performance
Table 4 shows a series of loading time tests upon both the locally hosted and the deployed
application. All performance tests are repeated over 10 consecutive trials for each component
and averaged.
Eaton Bray took less than half the time to load in comparison to Wavendon, however the file
size for this layer is 2.6 times larger than that of Eaton Bray. File size is a controlling factor on
load time for the application functionality. This is further demonstrated by the lengthy loading
time for UCL, which has a file size of 66.3 MB.
43
Component tested Loading times (ms) Average time (ms)
Initial interface 13569 12726 11999 11312 10622 10353 12987 12374 12753 10820 11952
Eaton Bray layer 2620 2353 1980 1950 1250 1310 1450 1890 1730 2130 1866
Wavendon layer 3640 8870 4740 5990 3740 2640 3830 3800 4930 4500 4668
UCL layer 27740 26600 25410 33220 30360 24630 27250 23850 29980 26330 27537
Table 4: Performance testing for loading components, test carried out in Chrome version 68.0.3440.106 at an average download speed of 11.60 Mbps and upload speed of 78.15 Mbps sampled
from 10 consecutive tests at The M-Lab NDT Data Set (2018).
44
Individual user feedback
The user feedback was carried out remotely through deployment of the web application on
Heroku with an accompanying google form. The form differentiated 21 users by browser
preference and whether they considered themselves a professional or student within the GIS
community. The composition of the group was 57.1% students and 42.9% professionals, with
81% Chrome users, 9.5% Safari and 9.5% Firefox.
6.3.1 Navigation
The majority of users were able to navigate the map, with the percentage of successful use
shown in table 5. 95.2% of users tended to prefer the 2D and 3D panes to track together as
Navigation type Success rate (%) described in section 5.1.3, with 57.1% of users using
Zoom 95.2 the 3D pane to navigate with. This last percentage
Pan 100
may be due to the 3D pane being double the size of
Pitch 85.7
the 2D.
Table 5: Navigation user feedback
Figure 24: Chart representing user percentage against ease of use questions, the legend represents user rating.
Figure 24 presents that while user found drawing the profile line easiest, they also found it
hardest to understand how to find the tool for both ‘On Click’ information and building height
profile. With 43% of users rating these tools a score of 3 or lower.
45
However 57% of users did go on to make use of the pop up guidance for the latter building
height profile tool, which could contribute to the ease of use for profile line drawing and also
how 76% of users understood the tools result. The clarity of the profile chart was successful
with 57% of users scoring the tool 4 to 5, however the inbuilt plot.ly library tools themselves
received mixed scores.
6.3.3 Performance
Upon initial loading users were asked to choose a layer, those who chose UCL (TQ2580) found
on most feedback results that their layer did not load, this is a known limitation of the
deployment platform and is treated as a bug in section 7.5.2. After this initial instruction,
users were directed to use either Eaton Bray or Wavendon layer.
The performance was tested for four scenarios, asking the users both loading times and speed
of use, the results are displayed in figure 25.
Figure 25: Chart representing user percentage against performance questions, the legend represents speed.
The chart is able to illustrate that 79% of users found overall the application was moderately
fast to fast, with in map navigation and tool results performing the best. Initial loading speed
performed the worst with a third of users rating speed at average or lower.
46
6.3.4 Useful comments
When users were asked to comment on areas of improvement, the following useful areas of
development were highlighted.
“Change the cursor tip from a pan hand to a mouse pointer or similar to indicate how you can use it.”
Student, Chrome
“I think that this tool does not have to be turned off or on. It should always be on.”
Student, Chrome
“Perhaps have the maps pan so all the similar height buildings can be seen in the view.”
Student, Chrome
“Link bar chart mouse over to on-map popups to help the user see which buildings are which.”
Student, Chrome
“Specific instructions on the building height tool in the area before a chart is generated.”
Student, Chrome
47
Discussion
Developing upon functionality of previous web GIS
Table 6 outlines toolset functionality of the application in comparison to Parish Online and
modern examples of web GIS for planning described in section 2.2.1
Prototype
Functionality Parish Online Leicester Canterbury
Application
Pan
Navigation
Zoom
Pitch
Rotate
2D
3D
Data Handling
Data upload
Data create and edit
Layer selection
Map printing
Location search
‘On-Click’ info
Toolsets
First and foremost the aim for a web GIS must be to empower people to source, visualise and
inspect through analysis the spatial components of data (Haklay et al, 2011). The applications
navigation tools are advanced in comparison to the other example in table 6, with the added
ability to pitch and rotate however these functions are intrinsic to navigating 3D data.
Therefore the additional data handling functionality of 3D information is what sets the
application apart from other ‘web GIS for planning’ platforms.
48
Each platform has a variety of data handling capabilities, however the need for data upload,
creation and export, in this case printing, is considered an important metric of evaluation in
literature (Kong et al., 2014). Development of these functions was not possible within the
time frame for this application, while some of the other applications are able to edit and
export data, the ability for data upload was lacking in all examples.
Every comparison example provided a form of location search for the user and some included
measurement tools, while this is not included in the test application both are possible through
Mapbox GL JS functionality and Turf.js. The two tools building height profile and equal height
highlighting are unique in the comparison. These are made possible due to custom
development implementing parts of Mapbox GL JS (Mapbox, 2018e) and Turf.js (Mapbox,
2018f) functionality.
Application performance
It was as early as 1997 when the top complaint from internet users was page loading speeds
(Rauniar et al, 2009), literature has suggested that often a pages quality is determined by this
very factor (Cheung & Lee, 2005; Hernández et al, 2009) and even more recently it is still
important in website success (Meenan, 2013). With the unwavering importance of this metric
such performance examination in section 6.2 was essential when assessing the application.
Neil Patel, founder of Kissmetric a platform for assessing website performance, recently
stated that “47% of consumers expect a web page to load in 2 seconds or less” (Patel, 2011)
with this in mind the results for initial loading of the application must be improved. While
users rated such loading speeds as fast and moderately fast overall, this rating may well have
been different if this was surveyed as a professional application.
Furthermore, reaction times are important, with human response perception being within 0.1
seconds, this is the bench mark for function reaction to reassure users the website is working
(Henty, 2015). While this is not achieved in the tool results in table 4, some users stated they
needed more reassurance during layer menu selection loading. However due to the client
side nature of the application rendering, response times are more optimised than that of
server based functions (Grigoryan, 2017). Performance can be and must be improved to
create a widely accepted pubic tool, techniques for improvement are discussed in section 7.6.
49
Use within UK planning
The examples in table 6 are all live web mapping application which are in use within local
government, Parish Online has the most wide spread use with over 2000 users. These
examples are currently aiding the planning process through 2D data visualisation, basic
analysis and, in the case of Leicester and Canterbury, a level of public access for participation.
Therefore by presenting data in 3D to aid the planning process through the convenient
medium of web GIS, the developed application should augment the capabilities of the current
planners toolset. Better informing the public through a visualisation which is closer to reality.
The analysis of building heights for the planning process is especially important with regards
to the impact of tall buildings, as discussed in the CABE and English Heritage guidance
document. This guidance describes the benefits and pitfalls of tall buildings. Ideally tall
buildings demarcate important places by both their increased size and mass however they
can lead to negative impacts such as overlooking and over shadowing other structures. They
may also negatively effecting living condition, skyline, historic areas and conservation areas if
poorly designed. (CABE & English Heritage, 2007)
As a result it is ever necessary to provide planners and the public with tools for building height
inspection such as the profiling tool and the equal heights highlighter from the developed
application. A professional user during the feedback testing, summarised the application as
“Useful for planners to be able to visualise and interrogate building heights and the relative
heights of buildings around them.” The development from this project could directly benefit
building height analysis during the planning process, with many local councils already looking
for answers to height related problems (Newham London, 2017; Urban Initiatives, 2010).
It was the core functionality of Mapbox GL JS that enabled the presentation of the 3D dataset
through the layer styling option ‘fill-extrusion’, this visualisation technique was
effective at displaying buildings through their appropriate height attribute. Currently the level
of 3D visualisation is limited to LOD 1.2 city models, however the base mapping library is ever
developing and further 3D detail support may be available in the future (GitHub, 2018a).
50
Furthermore the reliance on this package alone for the creation of a 3D data driven toolset
was not possible, extension of current capabilities was necessary. The flexibility of JavaScript
(Chugh et al, 2009; Richards et al, 2010) allowed the addition of Turf.js to the map stack, with
this recommended GIS library (Mapbox, 2018c), custom toolset development was enabled.
This extension of Mapbox has enabled the analysis of 3D data, evidence is clear in section 6.1
with tools such as the building height profiler.
Critical reflection
The feedback was useful for further development and favourable for the applications role
within planning. All users agreed that the tool would aid the planning process. Often
commentary touched upon the use for measuring current development and visualising line
of sight through height profiling. It was also suggested that the tool was beneficial for “non-
experts to visualise preloaded data”.
However the majority agreed further development must include faster loading speeds for
data and the ability to add custom user data such as proposed or planned development.
However while Mapbox GL JS is not able to be a base mapping library to serve all of the
industry partners data requirements, it is able to effectively visualise 3D building height data
and with the aid libraries such as Turf.js, this application has developed custom tools such as
the building height profiler. Such an application would be viable for working with datasets
such as those described in section 4.2
51
7.5.2 Bugs founds
The following bugs were found when critically assessing the prototype, they are shown in
the following figure 26, 27 and 28. An explanation is provided in the captions.
Figure 26: Inconsistent layer loading between the 2D and 3D panes, only present for the UCL layer when
deployed.
Figure 27: Building height profile multi line profiling. Traces will be added for each button press but each
trace is a culmination of every line drawn before not each profile line. The feature selection is also
inconsistent.
Figure 28: Building height polyline profiling, when trying to profile it is possible to use the line tool to
draw polylines rather than single segments, feature selection from this is inconsistent.
52
Further Development
Upon reflection and user feedback results, there are area of further development for the
application both to aid usability and performance. Suggestions of specific development areas
outlined below.
7.6.1 Data
Mapbox’s vector tile data type enable faster map performance while allowing for the full
flexibility of the original data source. Tiling has be specifically developed for use in web
mapping. (Mapbox, 2018g) Use of vector tiles for this application would be possible using
Mapbox GL JS uploads API (Mapbox, 2018h). Such a development could mitigate problems
with larger data sets such as UCL (TQ2580) as highlighted in section 6.3.3 .
Further development could be focused towards allowing users to upload their own data
similarly to Kepler.gl in figure 29, where multiple data types can be process and loaded
directly as a layer in the map panes. The merits of this are outlined by Kong et al (2014).
7.6.2 Interface
The application interface could be further developed to improve both user guidance and
experience. Further guidance could be provided in the chart place holder which is present
upon initial load, such information may provide better context and initial direction to improve
user knowledge. This has been user suggested within section 6.3.7 .
53
Concluding Remarks
The research project has addressed the current state of 3D GIS in UK planning, both examining
the platform type and reason for usage. Findings highlighted the importance of web GIS for
enabling both planners during project development and the public in subsequent planning
project engagement. Through the use of the Mapbox GL JS library, successfully visualisation
of 3D LOD 1.2 data was achieved. The investigative study expanded upon basic functionality
using primarily Turf.js to develop a spatial analysis toolset for both 2D and 3D data. The focus
on manipulating building height data from the ordinance survey, resulted in a unique building
height profile tool which can better inform users upon planning proposal impact. User
feedback while modest was positive, 100% of users agreed the application would aid the
planning process. Web GIS has the most potential to equip and engage professionals and the
public with 3D data, allowing them to make better informed contributions to the planning
process. Furthermore, due to the nature of opensource development, the future of 3D web
GIS is boundless.
54
Appendices
Appendix A – Flowchart diagram of the application process. (Barrett, 2018)
55
Appendix B – Example of GeoJSON format for SP9035 (Wavendon)
{
"name" : "buildings_SP9035",
"type" : "FeatureCollection",
"features" : [
{
"type" : "Feature",
"geometry" : {
"type" : "Polygon",
"coordinates" : [
[
[ -0.6517608548742424, 52.01681052651805 ],
[ -0.6518550604988363, 52.01686168685198 ],
[ -0.6519034396492944, 52.01682780333546 ],
[ -0.6518658717606279, 52.01680741246731 ],
[ -0.6518092340393539, 52.01677664303577 ],
[ -0.6517608548742424, 52.01681052651805 ]
]
]
},
"properties" : {
"OBJECTID" : 1,
"os_topo_toid" : "osgb1000002311788712",
"os_topo_version" : 5,
"bha_processdate" : "20170930000000",
"tileref" : "SP9035",
"abshmin" : 85.69999694824219,
"absh2" : 95.0999984741211,
"abshmax" : 96.5,
"relh2" : 9.399999618530273,
"relhmax" : 10.800000190734863,
"bha_conf" : 99
}
}, 10103 more features ]
}
56
Appendix C1 – Index.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/html">
<head>
<meta charset='utf-8' />
<title>Display buildings in 3D</title>
<meta name='viewport' content='initial-scale=1,maximum-scale=1,user-
scalable=no' />
<link rel="stylesheet" href="css/mdl/material.min.css">
<script src="css/mdl/material.min.js"></script>
<link rel="stylesheet"
href="https://fonts.googleapis.com/icon?family=Material+Icons">
<script src="https://cdnjs.cloudflare.com/ajax/libs/please-
wait/0.0.5/please-wait.min.js"></script>
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/please-wait/0.0.5/please-
wait.css" />
<script
src="https://cdn.jsdelivr.net/npm/sweetalert2@7.26.11/dist/sweetalert2.a
ll.min.js"></script>
<script
src='https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js'></script
>
<script src='https://api.tiles.mapbox.com/mapbox-gl-
js/v0.45.0/mapbox-gl.js'></script>
<link href='https://api.tiles.mapbox.com/mapbox-gl-
js/v0.45.0/mapbox-gl.css' rel='stylesheet' />
<script src='https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-
draw/v1.0.4/mapbox-gl-draw.js'></script>
<link rel='stylesheet' href='css/draw.css' type='text/css' />
<script
src="https://cdn.jsdelivr.net/npm/@turf/turf@5/turf.min.js"></script>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"><
/script>
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/5.0.4/math.min.js"></
script>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<div id='menu'>
<legend>Layers:</legend>
<input id='EatonBray' type='radio' name='rtoggle'
checked='EatonBray' >
<label for='EatonBray'>Eaton Bray</label>
<input id='Wavendon' type='radio' name='rtoggle' value='Wavendon' >
<label for='Wavendon'>Wavendon</label>
<input id='UCL' type='radio' name='rtoggle' value='UCL' >
<label for='UCL'>UCL</label>
</div>
57
<div id='map3D'></div>
<div id="map2D"></div>
<div id='map-overlay' class='map-overlay'></div>
<div id="chartHolder">
<div id="holderText">Building height profile chart will load
here.</div>
</div>
<div id="chart" class='chart'></div>
<div id='fitBounds' onclick='fit()'>Fit</div>
<div id='buildingProfile' onclick='getProfile()'>Height Profile</div>
<div id='equal'>
<legend>Equal Buildings:</legend>
<input id='on' type='radio' name='rtoggler' onclick='equalOn()'>
<label for='on'>on</label>
<input id='off' type='radio' name='rtoggler' checked='off'
onclick='equalOff()'>
<label for='off'>off</label>
</div>
<div id='click'>
<legend>Click 3D Info:</legend>
<input id='on2' type='radio' name='rtoggler2'
onclick='clickingOn()'>
<label for='on2'>on</label>
<input id='off2' type='radio' name='rtoggler2' checked='off2'
onclick='clickingOff()'>
<label for='off2'>off</label>
</div>
<script src="js/mapStart.js"></script>
<script src="js/loadingScreen.js"></script>
<script src="js/buildingProfile.js"></script>
<script src="js/equalBuildings.js"></script>
<script src="js/clickInfo.js"></script>
<script src="js/layerMenu.js"></script>
</body>
</html>
58
Appendix C2 – Style.css
/*body { margin:0; padding:0; }*/
.spinner {
margin: 25px auto;
width: 50px;
height: 40px;
text-align: center;
font-size: 10px;
}
.spinner .rect2 {
-webkit-animation-delay: -1.1s;
animation-delay: -1.1s;
}
.spinner .rect3 {
-webkit-animation-delay: -1.0s;
animation-delay: -1.0s;
}
.spinner .rect4 {
-webkit-animation-delay: -0.9s;
animation-delay: -0.9s;
}
.spinner .rect5 {
-webkit-animation-delay: -0.8s;
animation-delay: -0.8s;
}
59
@-webkit-keyframes sk-stretchdelay {
0%, 40%, 100% { -webkit-transform: scaleY(0.4) }
20% { -webkit-transform: scaleY(1.0) }
}
@keyframes sk-stretchdelay {
0%, 40%, 100% {
transform: scaleY(0.4);
-webkit-transform: scaleY(0.4);
} 20% {
transform: scaleY(1.0);
-webkit-transform: scaleY(1.0);
}
}
:root {
--GXBlue: #263746;
--GXTeal: #94CCC6;
--GXGrey: #D8D1CA;
}
#chartHolder {
background-color: var(--GXTeal);
position:absolute;
border: 1px dashed var(--GXBlue);
bottom:0;
left:0;
margin: 10px;
height: 46.5%;
width: 48.5%;
}
#holderText {
colour: var(--GXBlue);
text-align: center;
font-family: Helvetica, Arial, Sans-Serif;
height: 250px;
line-height: 250px;
}
60
.map-overlay {
font-family: Helvetica Neue, Arial, Helvetica, sans-serif;
font-size: 16px/12px;
color: var(--GXblue);
background-color: var(--GXGrey);
box-shadow: 0 1px 2px rgba(0,0,0,0.10);
border-radius: 3px;
position: absolute;
width: 15%;
top: 10px;
left: 200px;
padding: 10px;
display: none;
}
#menu {
background-color: var(--GXBlue);
position: absolute;
z-index: 1;
top: 1em;
right: 1em;
border-radius: 0.2em;
padding: 0.7em;
width: 100px;
font-family: Helvetica, Arial, Sans-Serif;
color: var(--GXGrey);
cursor: pointer;
}
#click {
background-color: var(--GXBlue);
position: absolute;
z-index: 1;
top: 9.5em;
right: 1em;
border-radius: 0.2em;
padding: 0.7em;
width: 100px;
font-family: Helvetica, Arial, Sans-Serif;
color: var(--GXGrey);
cursor: pointer;
}
#fitBounds {
background-color: var(--GXBlue);
font-family: Helvetica, Arial, Sans-Serif;
color: var(--GXGrey);
position: absolute;
61
top: 1em;
left: 1em;
padding: 0.7em;
border-radius: 0.2em;
cursor: pointer;
}
#buildingProfile {
background-color: var(--GXBlue);
font-family: Helvetica, Arial, Sans-Serif;
color: var(--GXGrey);
position: absolute;
top: 5em;
left: 1em;
padding: 0.7em;
border-radius: 0.2em;
cursor: pointer;
}
#equal {
background-color: var(--GXBlue);
font-family: Helvetica, Arial, Sans-Serif;
color: var(--GXGrey);
position: absolute;
top: 9em;
left: 1em;
padding: 0.7em;
width:115px;
height: 40px;
border-radius: 0.2em;
cursor: pointer;
}
62
Appendix C3 – mapStart.js
var map3D = new mapboxgl.Map({
style: 'mapbox://styles/rjhargreaves/cjiok8itx27nf2so7p2492eba',
center: [-0.5850058794021606, 51.87403356997926],
zoom: 16,
pitch: 70,
bearing: 0,
container: 'map3D'
});
var SELECTED_LAYER_BBOX;
var SELECTED_LAYER_JSON;
var SELECTED_LAYER_ID;
// Draw Tools
var draw = new MapboxDraw({
displayControlsDefault: false,
controls: {
line_string: true
}
});
map3D.addControl(new mapboxgl.ScaleControl({
maxWidth: 100,
unit: 'metric'
}));
map2D.addControl(draw, 'top-right');
63
// Tracking
//http://bl.ocks.org/boeric/f6ddea14600dc5093506
var disable = false;
map3D.on("move", function () {
if (!disable) {
var center = map3D.getCenter();
var zoom = map3D.getZoom();
var bearing = map3D.getBearing();
disable = true;
map2D.setCenter(center);
map2D.setZoom(zoom);
map2D.setBearing(bearing);
disable = false;
}
});
map2D.on("move", function () {
if (!disable) {
var center = map2D.getCenter();
var zoom = map2D.getZoom();
var bearing = map2D.getBearing();
disable = true;
map3D.setCenter(center);
map3D.setZoom(zoom);
map3D.setBearing(bearing);
disable = false;
}
});
map3D.on('load', function () {
hasLoaded = true;
map3D.addSource('EatonBray', {
type: 'geojson',
data: EatonBray
});
map3D.addSource('Wavendon', {
type: 'geojson',
data: Wavendon
});
map3D.addSource('UCL', {
type: 'geojson',
data: UCL
});
64
//Adding layers
map3D.addLayer({
id: 'EatonBray',
source: 'EatonBray',
type: 'fill-extrusion',
layout: {'visibility': 'none'},
paint: {
'fill-extrusion-color': '#008080',
'fill-extrusion-height': {
'type': 'identity',
'property': 'relh2'
},
'fill-extrusion-base': 0,
'fill-extrusion-opacity': 0.6
}
});
map3D.addLayer({
id: 'Wavendon',
source: 'Wavendon',
type: 'fill-extrusion',
layout: {'visibility': 'none'},
paint: {
'fill-extrusion-color': '#008080',
'fill-extrusion-height': {
'type': 'identity',
'property': 'relh2'
},
'fill-extrusion-base': 0,
'fill-extrusion-opacity': 0.6
}
});
map3D.addLayer({
id: 'UCL',
source: 'UCL',
type: 'fill-extrusion',
layout: {'visibility': 'none'},
paint: {
'fill-extrusion-color': '#008080',
'fill-extrusion-height': {
'type': 'identity',
'property': 'relh2'
},
'fill-extrusion-base': 0,
'fill-extrusion-opacity': 0.6
}
});
});
65
map2D.on('load', function () {
map2D.addSource('EatonBray', {
type: 'geojson',
data: EatonBray
});
map2D.addSource('Wavendon', {
type: 'geojson',
data: Wavendon
});
map2D.addSource('UCL', {
type: 'geojson',
data: UCL
});
map2D.addLayer({
id: 'EatonBray',
source: 'EatonBray',
type: 'fill',
layout: {'visibility': 'none'},
paint: {
'fill-color': '#008080',
'fill-opacity': 0.6
}
});
map2D.addLayer({
id: 'Wavendon',
source: 'Wavendon',
type: 'fill',
layout: {'visibility': 'none'},
paint: {
'fill-color': '#008080',
'fill-opacity': 0.6
}
});
map2D.addLayer({
id: 'UCL',
source: 'UCL',
type: 'fill',
layout: {'visibility': 'none'},
paint: {
'fill-color': '#008080',
'fill-opacity': 0.6
}
});
switchLayer('EatonBray');
});
66
Appendix C4 – layerMenu.js
function getLayerGeoJSON(layer) {
console.log(" -- getLayerGeoJSON --");
return new Promise((resolve, reject) => {
$.getJSON((window[layer]), function (data) {
resolve(data)
});
});
}
function bboxFromJSON(json) {
return new Promise((resolve, reject) => {
resolve(turf.bbox(json));
});
}
function fit(bbox) {
let bboxToUse = bbox || SELECTED_LAYER_BBOX;
map3D.fitBounds(bboxToUse, {padding: 20});
map2D.fitBounds(bboxToUse, {padding: 20});
}
function switchLayer(layer) {
console.log("--Map Loading--");
console.log(hasLoaded);
console.dir(layer);
SELECTED_LAYER_ID = layer;
if (layer == 'UCL' && hasLoaded) {
swal({
title: '<strong>Large layer Loading</strong>',
type: 'info',
showCloseButton: true,
});
map3D.setLayoutProperty('EatonBray', 'visibility', 'none');
map3D.setLayoutProperty('Wavendon', 'visibility', 'none');
map3D.setLayoutProperty('UCL', 'visibility', 'visible');
map2D.setLayoutProperty('EatonBray', 'visibility', 'none');
map2D.setLayoutProperty('Wavendon', 'visibility', 'none');
map2D.setLayoutProperty('UCL', 'visibility', 'visible');
}
if (layer == 'Wavendon' && hasLoaded) {
map3D.setLayoutProperty('EatonBray', 'visibility', 'none');
map3D.setLayoutProperty('Wavendon', 'visibility', 'visible');
map3D.setLayoutProperty('UCL', 'visibility', 'none');
map2D.setLayoutProperty('EatonBray', 'visibility', 'none');
map2D.setLayoutProperty('Wavendon', 'visibility', 'visible');
map2D.setLayoutProperty('UCL', 'visibility', 'none');
}
67
if (layer == 'EatonBray' && hasLoaded) {
map3D.setLayoutProperty('EatonBray', 'visibility', 'visible');
map3D.setLayoutProperty('Wavendon', 'visibility', 'none');
map3D.setLayoutProperty('UCL', 'visibility', 'none');
map2D.setLayoutProperty('EatonBray', 'visibility', 'visible');
map2D.setLayoutProperty('Wavendon', 'visibility', 'none');
map2D.setLayoutProperty('UCL', 'visibility', 'none');
}
getLayerGeoJSON(layer).then((json) => {
console.dir(json);
SELECTED_LAYER_JSON = json;
console.log("SELECTED LAYER COORDS CHANGED");
bboxFromJSON(json).then((bbox) => {
SELECTED_LAYER_BBOX = bbox;
fit(bbox)
});
});
loading_screen.finish();
}
68
Appendix C5 – buildingProfile.js
function getProfile() {
var interArray = [];
var widthArray = [];
var xArray = [];
var midpointArray = [];
var midpointArrayPoints = [];
var buildingPoints = [];
var buildingFeatures = [];
var selectedPoints;
var uniqueBuildings;
var yArray = [];
var selectedBuildings;
var heightGraph;
if (draw.getAll().features.length == 0) {
swal({
title: '<strong>Building Height Profile</strong>',
type: 'info',
html:
'You must first draw a segment through buildings to get a
height profile',
showCloseButton: true,
});
return;
}
69
console.log("--Making point distance array--");
for (var i = 0; i < interArray.length-1; i++) {
pt1 = turf.point(interArray[i]);
pt2 = turf.point(interArray[i+1]);
widthArray.push((turf.distance(pt1, pt2, {unit:
'kilometers'})));
}
console.dir(widthArray);
70
uniqueBuildings = _.uniq(buildingFeatures);
selectedBuildings = turf.featureCollection(uniqueBuildings);
heightWord = [];
chart = document.getElementById('chart');
var heightGraph = {
type: 'bar',
x: xArray,
y: yArray,
width: widthArray,
text: heightWord,
marker: {
color: '#5CA8A6',
opacity: 0.6,
line: {
color: '#263746',
width: 1
}
}
};
var layout = {
title: 'Building Heights',
xaxis: {title: 'Segment Distance'},
yaxis:{title:'Height (relh2)'},
bargap:0
};
holder.style.display = "none";
console.log("--Highlighting Buildings--")
map2D.addSource('HighlightedBuildings', {
type: 'geojson',
data: selectedBuildings
});
71
map2D.addLayer({
id: 'HighlightedBuildings',
source: 'HighlightedBuildings',
type: 'fill',
paint: {
'fill-color': '#263746',
'fill-opacity': 0.6
},
});
map3D.addSource('HighlightedBuildings', {
type: 'geojson',
data: selectedBuildings
});
map3D.addLayer({
id: 'HighlightedBuildings',
source: 'HighlightedBuildings',
type: 'fill-extrusion',
paint: {
'fill-extrusion-color': '#263746',
'fill-extrusion-height': {
'type': 'identity',
'property': 'relh2'
},
'fill-extrusion-base': 0,
'fill-extrusion-opacity': 0.6
}
});
function removeProfile() {
draw.deleteAll(draw.getAll());
for (var i = 0; i < map2D.getStyle().layers.length; i++) {
if (map2D.getStyle().layers[i].id == 'HighlightedBuildings') {
map2D.removeLayer('HighlightedBuildings');
map3D.removeLayer('HighlightedBuildings');
map2D.removeSource('HighlightedBuildings');
map3D.removeSource('HighlightedBuildings');
break
}
}
holder.style.display = "block";
Plotly.purge(chart);
}
72
Appendix C6 – equalBuildings.js
var overlay = document.getElementById('map-overlay');
var relatedFeatures;
function showing(e) {
map2D.getCanvas().style.cursor = 'pointer';
relatedFeatures = map2D.querySourceFeatures(SELECTED_LAYER_ID, {
filter: ['in', 'relh2', feature.properties.relh2]
});
overlay.innerHTML = '';
overlay.appendChild(title);
overlay.appendChild(height);
overlay.style.display = 'block';
function hiding() {
map2D.getCanvas().style.cursor = '';
map2D.setFilter('equalBuildings', ['in', 'relh2', '']);
map3D.setFilter('equalBuildings', ['in', 'relh2', '']);
overlay.style.display = 'none';
}
73
function equalOn() {
map2D.addLayer({
id: 'equalBuildings',
source: SELECTED_LAYER_ID,
type: 'fill',
paint: {
'fill-color': '#000000',
'fill-opacity': 0.6
},
filter: ['in', 'relh2', '']
});
map3D.addLayer({
id: 'equalBuildings',
source: SELECTED_LAYER_ID,
type: 'fill-extrusion',
paint: {
'fill-extrusion-color': '#000000',
'fill-extrusion-height': {
'type': 'identity',
'property': 'relh2'
},
'fill-extrusion-base': 0,
'fill-extrusion-opacity': 0.6
},
filter: ['in', 'relh2', '']
});
function equalOff() {
74
Appendix C7 – clickInfo.js
function clicking(e) {
new mapboxgl.Popup()
.setLngLat(e.lngLat)
.setHTML("Building ID: " + e.features[0].properties.os_topo_toid
+ "</br> Building Height: " +
(e.features[0].properties.relh2).toFixed(1) + 'm')
.addTo(map3D);
}
function clickingOn () {
map3D.on('click', SELECTED_LAYER_ID, clicking)
}
function clickingOff () {
map3D.off('click', SELECTED_LAYER_ID, clicking)
}
75
References
Abdul-Rahman, A., & Pilouk, M. (2008). Spatial data modelling for 3D GIS. Berlin ; New York:
Springer.
Akagi, M. (2018). Qgis2threejs plugin Documentation, Release 1.4. Retrieved from
https://media.readthedocs.org/pdf/qgis2threejs/latest/qgis2threejs.pdf
Baker, M., Coaffee, J., & Sherriff, G. (2007). Achieving successful participation in the new UK
spatial planning system. Planning Practice & Research, 22(1), 79–93.
https://doi.org/10.1080/02697450601173371
Baptista, C & de Paiva, A. (2009) Web-based GIS. Environmental Informatics. p. 4053-4057.
Barrett, C. (2018). The decision-making process. Retrieved 20 August 2018, from
https://www.planningportal.co.uk/info/200126/applications/58/the_decision-
making_process
Biljecki, F., Ledoux, H., & Stoter, J. (2016). An improved LOD specification for 3D building
models. Computers, Environment and Urban Systems, 59, 25–37.
https://doi.org/10.1016/j.compenvurbsys.2016.04.005
Brown, G. (2012). Public Participation GIS (PPGIS) for Regional and Environmental Planning:
Reflections on a Decade of Empirical Research, 12.
Brown, G., & Kyttä, M. (2014). Key issues and research priorities for public participation GIS
(PPGIS): A synthesis based on empirical research. Applied Geography, 46, 122–136.
https://doi.org/10.1016/j.apgeog.2013.11.004
Brown, G., & Raymond, C. M. (2014). Methods for identifying land use conflict potential
using participatory mapping. Landscape and Urban Planning, 122, 196–208.
https://doi.org/10.1016/j.landurbplan.2013.11.007
Budorick, L. (2016). Add fill-extrude-height and fill-extrude-base properties. by lbud · Pull
Request #3223. Retrieved 5 September 2018, from
https://github.com/mapbox/mapbox-gl-js/pull/3223
built with. (2018). jQuery Usage Statistics. Retrieved 28 August 2018, from
https://trends.builtwith.com/javascript/jQuery
Butler, H., Daly, M., Doyle, A., Gillies, S., Hagen, S., & Schaub, T. (2016). The GeoJSON
Format. Retrieved from https://www.rfc-editor.org/info/rfc7946
CABE, & English Heritage. (2007). Guidance on tall buildings: July 2007, 8.
Canterbury City Council. (2018). Planning Constraints Map. Retrieved 19 August 2018, from
https://mapping.canterbury.gov.uk/webapps/Planning_information/
CARTO. (2018). Attribution — CARTO. Retrieved 11 September 2018, from
https://carto.com/attribution/
76
Cheung, C. M. K., & Lee, M. K. O. (2005). The Asymmetric Effect of Website Attribute
Performance on Satisfaction: An Empirical Study. In Proceedings of the 38th Annual
Hawaii International Conference on System Sciences (pp. 175c-175c). Big Island, HI,
USA: IEEE. https://doi.org/10.1109/HICSS.2005.585
Chrisman, N. R. (2006). Charting the unknown : how computer mapping at Harvard became
GIS (1st ed). Redlands, Calif. : ESRI Press : Independent Publishers Group (IPG)
[distributor]. Retrieved from https://trove.nla.gov.au/version/44911306
Chugh, R., Meister, J. A., Jhala, R., & Lerner, S. (2009). Staged Information Flow for
JavaScript. ACM Sigplan Notices, 44(6), 50–62.
Craig, W., Harris, T., & Weiner, D. (2002). Community participation and geographic
information systems. In Community Participation and Geographical Information
Systems. CRC Press. https://doi.org/10.1201/9780203469484.pt1
Dai, F., & Lee, C. (2002). Landslide characteristics and slope instability modeling using GIS,
Lantau Island, Hong Kong. Geomorphology, 42(3-4), 213-228. doi: 10.1016/s0169-
555x(01)00087-3
Dangermond, J. (2014). Creating Our Future [Blog]. Retrieved from
http://www.esri.com/esri-news/arcnews/fall14articles/creating-our-future
Davis, M., Haklay, M. (2004). 3D GIS: Adding Value to the Environmental Impact Assessment.
GEO:connexionUK
Delgado, A. (2016). Top 5 companies using NodeJS in production. Retrieved 28 August 2018,
from https://www.linkedin.com/pulse/top-5-companies-using-nodejs-production-
anthony-delgado/
Department for Communities and Local Government. (2011). A plain English guide to the
Localism Act.
Details of Planning Application - CB/18/02523/FULL. (2018). Retrieved from
http://www.centralbedfordshire.gov.uk/PLANTECH/DCWebPages/acolnetcgi.gov?ACTI
ON=UNWRAP&RIPNAME=Root.PgeResultDetail&TheSystemkey=610012
Drummond, W. J., & FAICP, S. P. F. (2008). The Future of GIS in Planning: Converging
Technologies and Diverging Interests. Journal of the American Planning Association,
74(2), 161–174. https://doi.org/10.1080/01944360801982146
Ellul, C., Wong, K. (2015). Advances in 3D GIS. In: Kemp, A (ed.) AGI Foresight Report
Elwannas, R. (2011). 3D GIS: It's a Brave new World. FIG Working Week, Marrakech, 9p.
Ericsson, B. (2016). Mapbox GL Synced Dual Maps. Retrieved 29 August 2018, from
http://bl.ocks.org/boeric/f6ddea14600dc5093506
ESRI. (2018a). What is the ArcGIS 3D Analyst extension? Retrieved 7 September 2018, from
http://desktop.arcgis.com/en/arcmap/latest/extensions/3d-analyst/what-is-the-3d-
analyst-extension-.htm#GUID-76D00A32-03EB-4B2F-8DA2-66807E89BDE5
77
ESRI. (2018b). What is a geodatabase? Retrieved 27 August 2018, from
http://desktop.arcgis.com/en/arcmap/10.3/manage-data/geodatabases/what-is-a-
geodatabase.htm
Evans-Cowley, J., & Hollander, J. (2010). The New Generation of Public Participation:
Internet-based Participation Tools. Planning Practice & Research, 25(3), 397–408.
https://doi.org/10.1080/02697459.2010.503432
Fu, P., & Sun, J. (2010). Web GIS: principles and applications. Esri Press.
Future Cities Catapult. (2016). Future of planning: state of the art innovations in digital
planning. Retrieved from https://futurecities.catapult.org.uk/wp-
content/uploads/2016/12/FCC-FoP-State-of-the-art-innovations-December-2016.pdf
Geertman, S., & Stillwell, J. (Eds.). (2003). Planning Support Systems in Practice. Berlin
Heidelberg: Springer-Verlag. Retrieved from
//www.springer.com/gb/book/9783540437192
GitHub. (2018a). Add support for rendering 3d models · Issue #3996 · mapbox/mapbox-gl-js.
Retrieved 10 September 2018, from https://github.com/mapbox/mapbox-gl-
js/issues/3996
GitHub. (2018b). Support 3D terrain meshes · Issue #1489 · mapbox/mapbox-gl-js. Retrieved
7 September 2018, from https://github.com/mapbox/mapbox-gl-js/issues/1489
GitHub. (2018c). implement custom style layers by ansis · Pull Request #7039 ·
mapbox/mapbox-gl-js. Retrieved 7 September 2018, from
https://github.com/mapbox/mapbox-gl-js/pull/7039
GOV.UK. (2018). Live tables on planning application statistics. Retrieved 5 September 2018,
from https://www.gov.uk/government/statistical-data-sets/live-tables-on-planning-
application-statistics
Grigoryan, A. (2017). The Benefits of Server Side Rendering Over Client Side Rendering.
Retrieved 10 September 2018, from https://medium.com/walmartlabs/the-benefits-
of-server-side-rendering-over-client-side-rendering-5d07ff2cefe8
Haining, R., & Haining, R. P. (2003). Spatial data analysis: theory and practice. Cambridge
university press.
Haklay, M., Singleton, A., & Parker, C. (2011). Web Mapping 2.0: The Neogeography of the
GeoWeb. Geography Compass. https://doi.org/10.1111/j.1749-8198.2008.00167.x
Henty, S. (2015). UI Response Times. Retrieved 10 September 2018, from
https://medium.com/@slhenty/ui-response-times-acec744f3157
Hernández, B., Jiménez, J., & Martín, M. J. (2009). Key website factors in e-business strategy.
International Journal of Information Management, 29(5), 362–371.
https://doi.org/10.1016/j.ijinfomgt.2008.12.006
Heywood, I. D., Cornelius, S., & Carver, S. (2011). An introduction to geographical
information systems (4th ed.). Harlow, England: Prentice Hall.
78
Hu, Y., Lv, Z., Wu, J., Janowicz, K., Zhao, X., & Yu, B. (2015). A multistage collaborative 3D GIS
to support public participation. International Journal of Digital Earth, 8(3), 212-234.
Jackson, S. (2008). The City from Thirty Thousand Feet: Embodiment, Creativity, and the Use
of Geographic Information Systems as Urban Planning Tools. Technology and Culture,
49(2), 325–346. https://doi.org/10.1353/tech.0.0039
Jain, R., Parmar, P., & Patel, D. P. (2017). “3D CITY MODEL” through QGIS–A Case Study of
GIFT City, Gujarat, India.
JS Foundation. (2018). jQuery. Retrieved 28 August 2018, from https://jquery.com/
Jurgiel, B., Verchere, P., Tourigny, E., Becerra, J. (2018). Profile tool QGIS. Retrieved 04
September 2018, from https://github.com/PANOimagen/profiletool
Kahila-Tani, M., Broberg, A., Kyttä, M., & Tyger, T. (2015). Let the Citizens Map—Public
Participation GIS as a Planning Support System in the Helsinki Master Plan Process.
Planning Practice & Research. Retrieved from
https://rsa.tandfonline.com/doi/abs/10.1080/02697459.2015.1104203
Kingston, R. (2002). Web-based PPGIS in the United Kingdom. In T. Harris, W. Craig, & D.
Weiner (Eds.), Community Participation and Geographical Information Systems. CRC
Press. https://doi.org/10.1201/9780203469484.ch8
Kingston, R. (2011). Online Public Participation GIS for Spatial Planning. In T. L. Nyerges, H.
Couclelis, & R. McMaster, The SAGE Handbook of GIS and Society (pp. 361–380). 1
Oliver’s Yard, 55 City Road London EC1Y 1SP: SAGE Publications, Inc.
https://doi.org/10.4135/9781446201046.n19
Kirk, A., Timms, S., Rininsland, A., & Teller, S. (2016). Data Visualization: Representing
Information on Modern Web (1st ed.). Birmingham: Packt Publishing Ltd.
Klosterman, R. E., & Brail, R. K. (Eds.). (2001). Planning Support Systems: Integrating
Geographic Information Systems, Models, and Visualization Tools (1st edition).
Redlands, Calif: Esri Press.
Klosterman, R. E., & Pettit, C. J. (2005). An Update on Planning Support Systems.
Environment and Planning B: Planning and Design, 32(4), 477–484.
https://doi.org/10.1068/b3204ed
Kluijver, H., & Stoter, J. (2003). Noise mapping and GIS: optimising quality and efficiency of
noise effect studies. Computers, Environment And Urban Systems, 27(1), 85-102. doi:
10.1016/s0198-9715(01)00038-2
Kong, N., Zhang, T., & Stonebraker, I. (2014). Common metrics for web-based mapping
applications in academic libraries. Online Information Review, 38(7), 918–935.
https://doi.org/10.1108/OIR-06-2014-0140
79
Le Dantec, C. A., Asad, M., Misra, A., & Watkins, K. E. (2015). Planning with Crowdsourced
Data: Rhetoric and Representation in Transportation Planning. In Proceedings of the
18th ACM Conference on Computer Supported Cooperative Work & Social Computing
- CSCW ’15 (pp. 1717–1727). Vancouver, BC, Canada: ACM Press.
https://doi.org/10.1145/2675133.2675212
Leicester City Council. (2018). Leicester City MAPS. Retrieved 19 August 2018, from
https://maps.leicester.gov.uk/map/Aurora.svc/run?script=%5CAurora%5Cw3%5CPLA
NNING%5Cw3PlanApp.AuroraScript%24&nocache=faf652c2-13af-c203-5242-
ac093e1e3686&resize=always
Livengood, A., & Kunte, K. (2012). Enabling participatory planning with GIS: a case study of
settlement mapping in Cuttack, India. Environment and Urbanization, 24(1), 77–97.
https://doi.org/10.1177/0956247811434360
Living Atlas of the World. (2018). Retrieved from https://livingatlas.arcgis.com/en/
Lodash. (2018). Lodash. Retrieved 28 August 2018, from https://lodash.com/
Mapbox. (2018a). Mapbox GL JS API. Retrieved 27 August 2018, from
https://www.mapbox.com/api
Mapbox. (2018b). Mapbox Style Specification. Retrieved 27 August 2018, from
https://www.mapbox.com/style-spec
Mapbox. (2018c). Analysis. Retrieved 28 August 2018, from
https://www.mapbox.com/analysis/
Mapbox. (2018d). Draw tools for mapbox-gl-js. Retrieved 30 August 2018, from
https://github.com/mapbox/mapbox-gl-draw
Mapbox. (2018e). Add a geocoder. Retrieved 9 September 2018, from
https://www.mapbox.com/mapbox-gl-js/example/mapbox-gl-geocoder/
Mapbox. (2018f). Measure distances. Retrieved 9 September 2018, from
https://www.mapbox.com/mapbox-gl-js/example/measure/
Mapbox. (2018g). Vector Tiles. Retrieved 10 September 2018, from
https://www.mapbox.com/vector-tiles/
Mapbox. (2018h). Mapbox API Documentation. Retrieved 10 September 2018, from
https://www.mapbox.com/api-documentation/#datasets
mathjs. (2018). math.js | an extensive math library for JavaScript and Node.js. Retrieved 28
August 2018, from http://mathjs.org/
Meenan, P. (2013). How fast is your website? Communications of the ACM, 56(4), 49.
https://doi.org/10.1145/2436256.2436270
Mewse, C. (2018). Project Motivation
Milner, J., Wong, K., Ellul, C. (2014). Beyond Visualization in 3D GIS. Proceedings of the GIS
80
Newham London. (2017). Local Plan Evidence Base: Tall Buildings. Retrieved from
https://www.newham.gov.uk/Documents/Environment%20and%20planning/TallBuild
ingsEvidenceBase.pdf
Node.js Foundation. (2018). About Node.js. Retrieved 28 August 2018, from
https://nodejs.org/en/about/
npm trends. (2018). cesium vs mapbox gl. Retrieved 28 August 2018, from
https://www.npmtrends.com/cesium-vs-mapbox-gl
ONS. (2018). Internet access – households and individuals, Great Britain - Office for National
Statistics. Retrieved 5 September 2018, from
Ordinance Survey. (2014). OS MASTERMAP TOPOGRAPHY LAYER User Guide. Ordinance
Survey. Retrieved from https://www.ordnancesurvey.co.uk/docs/user-guides/os-
mastermap-topography-layer-user-guide.pdf
Parker, G., Lynn, T., & Wargent, M. (2014). User Experience of Neighbourhood Plans in
England Research. Locality. https://doi.org/10.13140/rg.2.1.4574.5129
Patel, N. (2011, April 28). How Loading Time Affects Your Bottom Line. Retrieved 10
September 2018, from https://neilpatel.com/blog/loading-time/
Peng, Z. R., & Tsou, M. H. (2003). Internet GIS: distributed geographic information services
for the internet and wireless networks. John Wiley & Sons.
Pickles, J. (Ed.). (1995). Ground truth: The social implications of geographic information
systems. Guilford Press.
Plain English guide: to the Planning System. (2015). Retrieved from
https://nls.ldls.org.uk/welcome.html?ark:/81055/vdc_100048069015.0x000001
plotly. (2018). plotly.js. Retrieved 28 August 2018, from https://plot.ly/javascript/
QGIS Development Team. (2018). QGIS Geographic Information System. Open Source
Geospatial Foundation Project. http://qgis.osgeo.org”
Rauniar, R., Rawski, G., Crumbly, J., & Simms, J. (2009). C2C online auction website
performance: Buyer’s perspective. Ournal of Electronic Commerce Research, 10(2), 20.
Research UK Conference.
Rhind, D. W., (1989). Why GIS? ARC News. (Summer), 28-29.
Richards, G., Lebresne, S., Burg, B., & Vitek, J. (2010). An Analysis of the Dynamic Behavior of
JavaScript Programs. ACM Sigplan Notices, 45(6), 1–12.
Rigolon, F. (2012). Using QGIS for urban planning in the municipality of Montecchio
Maggiore, Vicenza, Italy. Retrieved 4 September 2018, from
https://www.qgis.org/en/site/about/case_studies/italy_vicenza.html
81
Simão, A., Densham, P. J., & Haklay, M. (2009). Web-based GIS for collaborative planning
and public participation: An application to the strategic planning of wind farm sites.
Journal of Environmental Management, 90(6), 2027–2040.
https://doi.org/10.1016/j.jenvman.2007.08.032
Singh, A., Bansal, R., & Jha, N. (2015). Open Source Software vs Proprietary Software.
International Journal Of Computer Applications, 114(18), 26-31. doi: 10.5120/20080-
2132
Spence, I., & Bittner, K. (2005, March 15). What is iterative development? -- Part 1: The
developer perspective. Retrieved 28 August 2018, from
http://www.ibm.com/developerworks/rational/library/mar05/bittner/index.html
Steiniger, S., & Bocher, E. (2009). An overview on current free and open source desktop GIS
developments. International Journal Of Geographical Information Science, 23(10),
1345-1370. doi: 10.1080/13658810802634956
The M-Lab NDT Data Set. (2018). Retrieved from https://measurementlab.net/tests/ndt
The Skeffington Committee. (2013). People and Planning : Report of the Committee on
Public Participation in Planning (The Skeffington Committee Report). Routledge.
https://doi.org/10.4324/9780203794968
Turfjs. (2018). A modular geospatial engine written in JavaScript. Retrieved 28 August 2018,
from https://github.com/Turfjs/turf
Unlocking of government’s mapping and location data to boost economy by £130m a year.
(2018, June 13). Retrieved 9 August 2018, from
https://www.gov.uk/government/news/unlocking-of-governments-mapping-and-
location-data-to-boost-economy-by-130m-a-year
Urban Initiatives. (2010). BATH: Building Heights Strategy (No. 3).
Ushahidi. (2018). Retrieved 23 August 2018, from https://www.ushahidi.com/
Vector tiles: the next generation of tiled maps. (2016). Retrieved 27 August 2018, from
https://www.e-education.psu.edu/geog585/node/746
Visualization. (2018). Retrieved from https://www.arcgis.com/features/visualization.html
Warnecke, L., Beattie, J., Kolin, C., & Lyday, W. (1998). Geographic information technology in
cities and counties: A nationwide assessment. Chicago: Urban and Regional
Information Systems Association.
Waters, N. (2017). GIS: History. International Encyclopedia Of Geography: People, The Earth,
Environment And Technology, 1-12. doi: 10.1002/9781118786352.wbieg0841
What is PFR? | Planning for Real. (n.d.). Retrieved 23 August 2018, from
http://www.planningforreal.org.uk/what-is-pfr/
82
Wilson, A., Tewdwr-Jones, M., & Comber, R. (2017). Urban planning, public participation and
digital technology: App development as a method of generating citizen involvement in
local planning processes. Environment and Planning B: Urban Analytics and City
Science. https://doi.org/10.1177/2399808317712515
Yeh, A. G. O. (2008). GIS as a planning support system for the planning of harmonious cities.
Nairobi: United Nations Human Settlements Programme.
Zambotti, G., Guan, W., & Gest, J. (2015). VISUALIZING HUMAN MIGRATION TRHOUGH
SPACE AND TIME. ISPRS Annals Of Photogrammetry, Remote Sensing And Spatial
Information Sciences, II-4/W2, 155-161. doi: 10.5194/isprsannals-ii-4-w2-155-2015
83