Project Description
CLR CSharp application to render a set of GIS spatial images directly from SQL Server as rowset data using standard T-SQL language extended for simplicity .
C# 3.5 32 or 64 bit extension for SQL server 2008

The Virtual Earth and Googles of the world will always be ahead of the game in base map generation. However as enterprise and SMB's continue to leverage spatial data for internal or external usage, the need grows to allow them to display their custom data as acetate layers on a base map in a simple elegant manner.

Project Summary

A common problem exists today on most GIS/Map rendering engines; we store large volumes of spatial data in a database which is usually a more powerful server (or cluster) and then expect an application server (usually a web server) to take and render the data as images. While the database server is probably tuned to handle a large volume of transactions we've all noticed the bottleneck apparent in the application/render server when rendering real-time tiles of our custom data. Most GIS shops will implement dynamic tile caching (WMS-C) or the like in order to improve the speed at which the images are delivered to the clients. While this answer functions it's still fundamentally inefficient and requires new caches to be created when the data changes, hence the purpose of the project.

The paradigm I've always tried to adhere to in data driven application development is "the SQL server should provide the data I'm asking for" , sounds simple, however when it comes to spatial applications there always seems to be secondary and sometimes tertiary processing on the data in order to provide a simple image from a projection and bounding box. So based on the paradigm of data driven application architecture why not have the SQL server return the tiles to the client via T-SQL, thereby reducing the power required at the application server tier.

Design Intentions
  • Operate as a pure image generation engine, allowing developers to implement GIS standards as they see fit (i.e. OGC, ESRI)
  • Reduce the computational power required by the application/rendering server
  • Move the rendering engine to the data tier and leverage SQL server processing power
  • Render custom acetate data from T-SQL statements
  • Create a scalable distibuted tile rendering framework

Design Roadmap
  • Version 1
    • Extend T-SQL with a set of tile generation methods exposed as an easy to use API
    • Implement a matix system for tile generation (i.e QuadKey)
    • Create labelling methods and datatypes for tiles (i.e. Font, Style, Size)
    • Enable aggregated layering of geometric data into single tiles
      • Provide a layer ordering mechanism
      • Provide feature data with each layer
    • Implement ETL methods for common spatial data conversions
    • Implement threaded tile generation
  • Version 2
    • Enable distributed processing for tile generation
    • Implement limited dynamic session caching for tiles
    • Expose a CLR API for extension modules (i.e. Plugins)

Sample T-SQL: (simplistic)

SELECT SD.ID, STRE.GetTile(SD.Geometry,SRID,PNG,BoundingBOX,ZoomLevel) AS Tile, SD.LocationID, SD.CustomerCity
FROM dbo.SpatialData as SD
WHERE SD.CustomerName = 'AcmeAnvils' AND CustomerLocation = 'NorthAmerica'

ID TILE LocationID CustomerCity
1 <BINARY> TON-123 Toronto
2 <BINARY> NYC-4983 New York
3 <BINARY> EDM-387 Edmonton
4 <BINARY> LA-34498 Los Angeles
5 <BINARY> HU-23023 Huston
6 <BINARY> JA-0549845 Jacksonville

Last edited Nov 25, 2008 at 9:28 PM by Caduceuscoil, version 24