Who Needs Google Maps? (when you’ve got SQL Server) Alastair Aitchison
Who Needs Google Maps?(when you’ve got SQL Server)
Alastair Aitchison
Google MapsSnazzy Logo Search for Location
Map Display
Route between locations
Bing MapsSnazzy Logo Search for Location
Map Display
Route between locations
Yahoo MapsSnazzy Logo
Search for Location
Map DisplayRoute between
locations
MapQuestSnazzy Logo
Search for Location
Map DisplayRoute between locations
Requirements Checklist
1. Snazzy Logo2. Pannable, Zoomable Map Display3. Search for a Location4. Calculate Route Between Destinations
This will involve: Importing data from shapefiles, integrating with SQLCLR, using SSRS, passing spatial data to/from stored procedures, and more!
Requirement #1 : Snazzy Logo
• Take a brand name and add on “maps”
• Therefore…
Requirements Checklist
1. Snazzy Logo a2. Pannable, Zoomable Map Display3. Search for a Location4. Calculate Route Between Destinations
Ordnance Survey Open Data
• Free, “lite” OS datasets• Different products, e.g:– VectorMap (features)
– Gazetteer (placenames)
– CodePoint Open (p’codes)
• Download or DVD• ESRI Shapefile format
Loading Shapefiles to SQL Server
• SQL Server does not support shapefiles• Use 3rd party tools– Commercial: Safe FME, Manifold– Free: OGR2OGR, Shape2SQL
• Check .prj file to determine geography/geometry and correct SRID
Shape2SQL Demo
Requirement #2 : Map Display
• What visualisation options does SQL Server provide?– SSMS Spatial Results tab (SQL 2008/R2)– SSRS Map Component (SQL 2008 R2 only)
• No new options in SQL Denali
SSMS Spatial Results Tab Demo
SSRS Map Component Demo
Requirement #2 : Map Display
• SSMS Spatial Results tab+ Available after SELECTing geometry/geography data+ Pannable, zoomable, labelled- Max 5,000 features- Only for use in SSMS - not embeddable / exportable
• SSRS Map Component (SQL 2008 R2)+ Good for analysis – drilldown by clicking shapes etc.+ Can be exported as static image- Slow and static. Not “slippy” interface
A Silverlight Map Display App
• Silverlight provides UI and Graphics classes• SqlServer.Types.dll not Silverlight compatible• Use intermediary web service• OS Eastings / Northings -> Screen (x,y)
SProc to Retrieve OS Tiles
CREATE PROCEDURE [dbo].[GetSettlementDataForTile] @TileBounds geometry
AS BEGIN DECLARE @TileHeight float = (@TileBounds.STPointN(3).STY - @TileBounds.STPointN(2).STY); DECLARE @Res float = @TileHeight / 256;
SELECT geom27700.STIntersection(@TileBounds).Reduce(@Res) FROM Settlement_Area WITH(index(geom27700_sidx)) WHERE geom27700.STIntersects(@TileBounds) = 1END
Silverlight Slippy Map Demo
Requirements Checklist
1. Snazzy Logo a2. Pannable, Zoomable Map Display a3. Search for a Location4. Calculate Route Between Destinations
Geocoding (Location Searching)
• Not really a Spatial Operation• Address text parsing / searchSELECT * FROM OSLocatorWHERE ROADNAME = @RoadName
• Fuzzy matching with full-text search• RegEx matching for Postcode• Supplied address is freetext user input so be
cautious of SQL injection attacks etc.
Geocoding Demo
Requirements Checklist
1. Snazzy Logo a2. Pannable, Zoomable Map Display a3. Search for a Location a4. Calculate Route Between Destinations
Routing
• Not sufficient to have a table of LineStrings• Network topology – how are roads connected?• Graph theory:
Node (Point) Edge (LineString)
Brute Force Routing with T-SQL
• Recursive CTE• Anchor member selects LineString edges that
begin at chosen start node• Recursive member joins from STEndPoint() of
last edge to STStartPoint() of next edge• Create geometry of route already travelled to
avoid infinite loops• Expand outwards until end node found
Smart Routing with SQLCLR
• A* algorithm• Heuristics prioritise edges more likely to lie on
least cost route to goal• “Least cost” does not have to mean “shortest”• Additional properties of each node:
g: cost of route already travelled to reach this nodeh: estimated remaining cost from this node to goalf: g + h
A* Algorithm in Operation
Start Goal
A B
C
D
E
A* Algorithm in Operation
3 7
2 10.2
2.8 8.2
Start Goal
A B
C
D
E
A* Algorithm in Operation
X
2 10.2
2.8 8.2
Start Goal
A B
C
D
E
A* Algorithm in Operation
X
2 10.2
2.88.5
1
Start Goal
A B
C
D
E
A* Algorithm in Operation
X
2 10.2
2.88.5
1
Goal reached!Route cost: 12.2
Start Goal
A B
C
D
E
Requirements Checklist
1. Snazzy Logo a2. Pannable, Zoomable Map Display a3. Search for a Location a4. Calculate Route Between Destinations a
Put it all together and what have you got?
SQLBitMaps in action…
Want More?
: @alastaira #sqlbits8
: http://alastaira.wordpress.com
MSDN Spatial Forum: http://social.msdn.microsoft.com/Forums/en-GB/sqlspatial/threads