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.
- PostGIS support
- Geographic models
- Object-oriented spatial queries
- GEOS Python API
- GDAL Python API
- Vector and raster support
- First-class geographic data types
- Full spatial query support
- GiST indexing
- Cross-browser DOM manipulation and event handling
- Extendable through plugin architecture
- Extensive third-party plugins
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.
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 More
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 More
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 More
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 More
Focus the user’s attention on a specific geographic region and then create or limit user actions specific to that region.Learn More
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 More
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 More
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 More
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 More
Create static map images for putting into reports and printing that include user defined shapes and other features.Learn More
Use one of the thousands of projections available with Proj.4 or define your own.Learn More
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 More
One-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.
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
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
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
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.
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.
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
- Amazon S3 - cloud-based storage
- Grass - raster analysis
- Arc2Earth - Map tile production in ArcMap
Tools we want to leverage soon: