Vector tiles
Vector tiles, tiled vectors or vectiles[1] are packets of geographic data, packaged into pre-defined roughly-square shaped "tiles" for transfer over the web. This is an emerging method for delivering styled web maps, combining certain benefits of pre-rendered raster map tiles with vector map data. As with the widely used raster tiled web maps, map data is requested by a client as a set of "tiles" corresponding to square areas of land of a pre-defined size and location. Unlike raster tiled web maps, however, the server returns vector map data, which has been clipped to the boundaries of each tile, instead of a pre-rendered map image.
There are several major advantages of this hybrid approach. Compared to an un-tiled vector map, the data transfer is reduced,[2] because only data within the current viewport, and at the current zoom level needs to be transferred. The GIS clipping operations can all be performed in advance, as the tile boundaries are pre-defined. This in turn means that tiled vector data can be packaged up and distributed, without needing any kind of GIS system available to serve data.
Compared to a tiled raster map, data transfer is also greatly reduced, as vector data is typically much smaller than a rendered bitmap. Also, styling can be applied later in the process, or even in the browser itself, allowing much greater flexibility in how data is presented. It is also easy to provide interactivity with map features, as their vector representation already exists within the client.[2] Yet another benefit is that less centralised server processing power is required, since rasterisation can be performed directly in the client. This has been described as making "rendering ... a last-mile problem, with fast, high-quality GPU[s] in everyone’s pocket".[3]
History
There is a long history of the use of vector tile schemes in GIS. A very early GIS (circa 1966), the Canada Geographic Information System (CGIS), used a vector tile storage scheme that allowed limited resource computers to efficiently access and process vector map data.[4] CGIS used the term "frame" instead of vector tiles.
In 1975, the US Wildlife Service initiated a national program to map and digitize all the wetlands in the US. In 1976 they awarded a contract to Autometric to develop a software application that allowed stereo imagery to be digitized using an analytical stereo plotter. Later support for 2d digitization from single photos (aka single photo resection) on a digitizing table was added. The software was called WAMS (Wetlands Analytical Mapping System). The WAMS data store used a tiled vector structure. Each tile was called a “geounit”. A geounit corresponded to one of the USGS quadrangle scales, typically 1:24000. As the data were digitized, they were immediately stored in the tiled data store and topologically structured. Lines crossing geounit boundaries were automatically split. The storage Coordinate Reference System (CRS) was WGS 72 lat/long. WAMS is described in detail in “The wetlands analytical mapping system: WAMS" [Pywell and Niedzwiadek, 1980]
Building on the operational experience gained in implementing and using WAMS as well as from the Map Overlay and Statistical System (MOSS),[5] in 1986 Autometric released a UNIX based commercial GIS that implemented an enhanced tiled and indexed storage and access structure: DeltaMap (later GenaMap). The tiled structure capabilities and indexing scheme is described in "DeltaMap: Not just another GIS".[6] Where WAMS implemented a fixed tile system based on latitude/longitude 1:24000 quadrangles, DeltaMap allowed the user to define any size tile in any coordinate reference system (CRS). In this way, sparse data required only a few tiles whereas dense data could use much smaller tiles. R-trees were used as the indexing scheme for the vector tiles. Further, unlike earlier tiling implementations, DeltaMap/GenaMap used the same tiling and indexing scheme for any geospatial data type including 2d and 2.5d vector and feature data, satellite imagery, 3D grids such as DEMs, and annotation. In the late 1980s, Genasys further enhanced GenaMap to allow "Continuous, seamless" processing of the tiled layers. Basically, from the end user perspective, the tiles became invisible. This capability was true regardless of whether the user were editing, visualizing, querying, or analyzing the data.
Standards and approaches
As of early 2015, there is no dominant standard for vector tiles. Approaches can differ in their URL format, data serialisation format, packaging of styling information, and support for projections other than Web Mercator.
Protocol buffers (Mapbox)
Mapbox has defined an open standard for vector map tiles called "vector-tile-spec" which uses Google protocol buffers for space-efficient data serialisation. Web Mercator is the projection of reference, but vector tiles may be used to represent data with any projection and tile extent scheme.[7] It is also tied to the Mapnik rendering engine, using a "serialized version of the internal data that Mapnik uses".[8]
In March 2015, Esri, the dominant geospatial software maker, announced that they would be supporting Mapbox's vector tiles standard in both server and client platforms.[9]
Mapnik Vector Tile
This was an early format developed for the Mapnik renderer.[10]
Other formats
The approach followed by TileStache is to allow multiple data serialisation formats; as of early 2015, it supports GeoJSON, ArcJSON, GeoBSON, Arc GeoServices BSON, GeoAMF and Arc GeoServices BSON. The requested format is given in the URL (e.g., http://example.com/tiles/mylayer/2/1/3.json
)
Support
Services and applications
Vector tiles have been used by the Google Maps Android client since December 2010[11] and on the desktop client since 2013.[12] Vector tiles for rendering OpenStreetMap data were first proposed in March 2013[1] and are supported by Mapnik,[13] the most widely used renderer of OpenStreetMap data. Mapbox, a commercial provider of custom cartography tools and hosting, has focused its cartography tool, Mapbox Studio, around vector tiles.[14]
The popular, and very powerful, Android client for OpenStreetMap data, osmAnd supports vector tiles, which it calls "vector maps".[15]
Servers
The tile server pipeline TileStache supports several flavours of JSON natively.[16] There is also a plugin vector tile provider called VecTiles[17] which converts PostGIS data into vector tiles in Mapnik Vector Tile format (incompatible with the Mapbox specification[18]) or TopoJSON.
PGRestAPI (also known as Chubbs Spatial Server) is a standalone NodeJS server which can also generate vector tiles on the fly from a PostGIS data source, as well as serving pre-generated vector tiles from sources such as Mapbox Studio.[19]
pg_tileserv is an open source PostGIS-only tile server written in Golang that takes in HTTP tile requests and form and executes SQL. [20]
ESRI ArcGIS Server 10.4[21] and ArcGIS Pro 1.2[22] released in February 2016 added support for vector tiles.
Client libraries
The Leaflet JavaScript library does not directly support vector tiles, but there are third-party plugin for vector tiles, Leaflet.MapboxVectorTile for Leaflet 0.7.x[23] and Leaflet.VectorGrid for Leaflet 1.0.x.[24]
Mapbox's own JavaScript library, Mapbox GL JS, can be used.[25]
OpenLayers supports vector tiles through the ol.source.VectorTile object,[26] as of version 3.
External links
References
- "the liberty of postgreslessness: tiled vectors in mapnik (tecznotes)". mike.teczno.com. Retrieved 2014-08-24.
- "About Tiled Vectors". research.microsoft.com. Retrieved 2014-08-24.
- Migurski, Michal (2013-04-01). "Geomeetup Slides 2013-04" (PDF).
- "Introductory Readings In Geographic Information Systems". CRC Press. Retrieved 2016-04-26.
- Moss: A Historical Perspective https://www.scribd.com/document/4606038/2004-Article-by-Carl-Reed-MOSS-A-Historical-perspective
- Reed C N (1986) DELTAMAP: Not just another new GIS- Proceedings of the 3rd International Symposium on Spatial Data Handling. IGU Commission on Geographical Data Sensing and Processing, Williamsville NY, pp. 375-83
- "vector-tile-spec/2.1 at master · mapbox/vector-tile-spec · GitHub". github.com. Retrieved 2016-05-24.
- "Vector Tiles Overview". Mapbox. Archived from the original on 2015-03-18. Retrieved 2015-03-12.
- "Mapbox Vector Tile Specification adopted by Esri". Mapbox blog. 2015-03-17.
- "Python: module TileStache.Goodies.VecTiles.mvt". tilestache.org. Retrieved 2015-11-20.
- "Under the hood of Google Maps 5.0 for Android - Official Google Mobile Blog". googlemobile.blogspot.com.au. Retrieved 2014-08-24.
- "Redesigned Google Maps hands-on: vector-based, more personal and coming soon to mobile". engadget.com. Retrieved 2014-08-24.
- "mapbox/mapnik-vector-tile · GitHub". github.com. Retrieved 2014-08-24.
- "Vector Tiles for MapBox Streets | Mapbox". mapbox.com. Retrieved 2014-08-24.
- "HowToVectorTileData - osmand - This article describes how to use key features - Global Mobile Map Viewing & Navigation for Offline and Online OSM Maps - Google Project Hosting". Retrieved 2014-08-24.
- "TileStache.Vector".
- "TileStache.Goodies.VecTiles.server".
- "Protobuf.skip unimplemented types · Issue #15 · SpatialServer/Leaflet.MapboxVectorTile". GitHub. Retrieved 2015-11-20.
- "PGRestAPI (aka Chubbs Spatial Server)". GitHub. 2015-02-25.
- "pg_tileserv for PostGIS".
- "ArcGIS 10.4 is here!". 18 February 2016.
- "What's new in ArcGIS Pro 1.2—ArcGIS Pro | Documentation".
- "Leaflet.MapboxVectorTile". GitHub. 2015-02-12.
- "Leaflet.VectorGrid". GitHub. 2017-02-16.
- "API Documentation". Mapbox.
- "Open Layers VectorTile documentation".