Technology
Madrona makes many technology choices for you while still providing lots of options, recognizing that the most successful software solutions are tailored to a specific goal, process, audience, geography, and culture. This takes time and multiple iterations. You want to be able to quickly piece together and refine your solution without getting distracted by all of the nuts and bolts.
Core Building Blocks
Madrona is built on libraries such as Django, PostGIS, JQuery, OpenLayers and Google Earth, which provide all of the essential building blocks for developing modern spatial web applications.
Django
- Model-template-view architecture
- Automatic admin interface
- Elegant URL design
- Template system
- Caching
- Internationalization
- User accounts and groups
- Content management
- Extensive third-party packages
GeoDjango
- PostGIS support
- Geographic models
- Object-oriented spatial queries
- GEOS Python API
- GDAL Python API
PostGIS
- Vector and raster support
- First-class geographic data types
- Full spatial query support
- GiST indexing
JQuery
- Lightweight
- Cross-browser DOM manipulation and event handling
- Extendable through plugin architecture
- Extensive third-party plugins
OpenLayers
- 2D tile-based maps
- Vector support with drawing tools
- Extensive support for mapping services including UTF-Grid
- Google maps integration
Google Earth
- Free browser plugin
- Immersive 3D environment
- KML support including superoverlays
- Global base imagery
- Simplified use through extensions
Madrona Building Blocks
Madrona builds on these core building blocks to create new ones that are designed specifically for planning and decision support. Mix and match them to meet your specific needs.
Spatial Features
Provides a powerful spatial content management system complete with API. Define new features (point, line, polygon) that are unique to your needs (wind energy sites, bike paths, event locations), then let users sketch, copy and share them.
Learn MoreCollaboration
The best ideas often evolve through many iterations and through connecting with other people. Madrona is developed with quick iteration and sharing in mind. Our robust permissions model is secure but allows you to share your work when you want.
Learn MoreFeature Manipulators
Features sketched by users often need to be modified or cleaned, Madrona provides a workflow for doing that. Examples include clipping a polygon to a study region or excluding specific areas.
Learn MoreMap Bookmarks
Let’s users take a snapshot of their map view including the data layers and features they had turned on then share and manage the views as bookmarks (Google Earth support only currently)
Learn MoreStudy Regions
Focus the user’s attention on a specific geographic region and then create or limit user actions specific to that region.
Learn MoreData Layers
Manage a hierarchy of data layers important to your decision-making process and provide fine-grained access for viewing. Also let users upload their own data layers. (KML support only currently).
Learn MoreReports
Provide feedback to users by performing real-time spatial analyses on their features. Quickly organize information as tabular data and interactive charts using Django’s template system and your favorite visualization library.
Learn MoreFlexible Analysis
Interact with external modeling and analysis software such as Grass, Marxan or ArcGIS Server in a standardized way. Define your model inputs and capture the output as Features that the user can interact with and share.
Learn MoreAsynchronous Tasking
Analysis can take a lot of time and system resources. Users should be able to do other things while they are waiting. Run processes in the background and get notified when they finish.
Learn MoreStatic Maps
Create static map images for putting into reports and printing that include user defined shapes and other features.
Learn MoreCustom Projections
Use one of the thousands of projections available with Proj.4 or define your own.
Learn MoreRaster Statistics
Quickly calculate statistics for a polygon Feature such as the average elevation or maximum temperature using raster data layers. Provides an optional caching mechanism.
Learn MoreOne-size-fits-all rarely works and often times you have to roll your sleeves up. The assumption is you will want to integrate different technology with Madrona whether it’s a mapping library like Leaflet, data management and data serving tools like Geoserver or ArcServer or a more robust client-side framework like GeoExt.
Architecture
Features
Madrona creates a system that can best be thought of as a feature spatial content management system. This starts with the Madrona PointFeature, LineFeature and PolygonFeature models. You can quickly extend these models to define your own spatial features specific to the purpose of your tool. Working with wind energy sites? Define a PolygonFeature and give it attributes for the type and number of turbines. Once you register your feature it’s mapped to a PostGIS table and automatically published through the REST API.
For more information consult the Madrona Feature documentation
REST API
The madrona REST API is the communication channel for the client and server and supports both GeoJSON and KML. Using it you can:
- Create, read, update and delete Features
- Copy and share Features between user groups
- Manage Features within a FeatureCollection
- Convert to export formats
- Access reports and related documents
Workspace Document
The workspace document is an important part of the REST API. It is a JSON document that the client fetches from the server at startup that describes the server-side API. Specifically::
- What Features are defined for the current user
- What Feature actions are available for the current user
- How Features relate to one another
- Creating, Updating, and Deleting Feature instances
- Editing actions that can be performed such as Copying and Sharing
- Managing relationships between Features
- Alternative export formats, such as KMZ or shapefile downloads
- Related files that can be downloaded, such as spreadsheet or pdf reports
- Reading feature attributes or reports
Because the API is well-defined through the workspace document, you can quickly and efficiently develop alternative client interfaces.
For more information consult the Madrona workspace specification
The JSON snippet below defines the wind energy site feature in the workspace document. You can see that URL's have been published for performing create and edit actions as well as accessing associated viewshed maps and KMZ/Shapefile exports.
3D Web Client
By default, madrona provides a robust HTML/Javascript client interface based on the 3D Google Earth plugin. It is not the only option for building a client interface but it does provide a complete solution out of the box.
The 3D web client allows features to be delivered using the expressive KML format. Using the workspace document the client will automatically configure a set of javascript widgets including the Google Earth Plugin, forming an end-to-end spatial content management system. Besides the Google Earth plugin itself, madrona provides a number of additional components.
KmlTree
kmltree is a javascript tree widget that can be used in conjunction with the Google Earth API. It replicates the functionality of the Google Earth desktop client, namely the ability to render complex KML documents very quickly and present the hierarchal contents of a KML document as an expandable, interactive tree view.
KmlEditor
KmlEditor provides the editing interface and menu to hook your features tree into the REST API. It will use the workspace document and configure the editing interface according to the API definition. The interface is context sensitive and provides the appropriate options for the selected features.
KML Drawing Tools
Madrona provides a robust set of drawing and editing tools for the Google Earth Plugin. These play a part in the larger workflow of creating, editing and sharing features.
2D Web Client
Madrona provides core support for 2D web mapping through its REST API allowing a variety of possibilities for developing 2D client interfaces. Additional client-side widgets are currently in development for Madrona. You can contribute to that effort or take a look at frameworks such as GeoExt. OpenLayers is currently seen as the most robust 2D mapping client with support for vector editing, UTF-Grid encoding and other advanced features most often needed by Madrona-based tools.
GeoJSON Output
The Madrona REST API provides support for GeoJSON output of any Feature by default. This was challenging because the GeoJSON specification does not currently support a hierarchical structure (a collection within a collection) and Madrona does through its FeatureCollection class. To get around this Madrona supports two strategies, a ‘flat’ strategy that strictly follows the spec and a ‘nest_feature_set’ strategy which extends the GeoJSON specification to tell you all of the child collections that are within a given collection. In this way you can quickly query down into an arbitrary hierarchy of features.
Third-party Integration
Madrona can integrate with a variety software products, libraries, and services both server and client-side. We do this all the time on a project-by-project basis. Much of this is possible through the power of open data standards, API's and the web.
Tools we're leveraging:
- Mapbox/Tilemill - UTFGrid map production/publishing
- Twitter Bootstrap - simplified UI scaffolding and interaction
- Knockout - dynamic Javascript UI's
- Amazon S3 - cloud-based storage
- Grass - raster analysis
- Arc2Earth - Map tile production in ArcMap
Tools we want to leverage soon:
- ArcServer
- CartoDB