160 likes | 349 Views
Common Map Widget API. June 05, 2013. Agenda. Background The API Current Status Implementation Example (picture only). Background: OWF. Widgets : web pages or apps contained in an iframe , often used to provide views of dynamic content
E N D
Common Map Widget API June 05, 2013
Agenda • Background • The API • Current Status • Implementation Example (picture only)
Background: OWF • Widgets: web pages or apps contained in an iframe, often used to provide views of dynamic content • Ozone: combination layout manager and messaging mechanism for hosting widgets within a Web browser. • It resembles iGoogle, and uses Shindig, an open source Google gadget (widget) container. • Because browsers don't permit communication between iframesfrom different domains, Ozone also provides cross-domain-compatible pub-sub mechanism. • Enables development of Web apps composed of multiple intercommunicating widgets. • OWF = Ozone Widget Framework: in wide use across DoD/IC programs
Background • Current Users: • Joint Command and Control Common User Interface (JC2CUI) • Global Command and Control System – Integrated Imagery and Intelligence (GCCS-I3) • Distributed Common Ground System – Intelligence Community (DCGS-IC) • Defense Intelligence Information Enterprise (DI2E) Framework • Army Tactical Mission Command • NSA • Other Prospective Partners: • Navy C2RPC (PEO-C4I/PMW-150) • AOC-WS • US Coast Guard • CIA Adopted by OWF GOSS as OWF related project
Background • A Common Pattern • Widgets query for or manipulate data • Map widget displays results • The Vision • Mix and match query widgets and map widgets from different programs • I.e., plug and play • The Problem • Map widgets are tightly coupled to query widgets • Interwidgetcomms (channels) unique to each program • The Solution • Common Map Widget API
First Principles • First principle of design patterns: program to an interface, not an implementation • From Design Patterns: Elements of Reusable Object-Oriented Software by the "Gang of Four”
The API (Basic Approach) • Identify basic map operations • Abstract operations away from any physical map • Define channels and messages, and associate with basic map operations (i.e., the API) • Any widget can subscribe to map channels and react appropriately • not just a map • Don’t tie API to any particular implementation or map renderer • e.g. Google Earth, OpenLayers
The API (Conceptual View) Search Widget Map Widget “container” OpenLayers Library JavaScript Translation Code Analysis Widget Map Widget “container” SA Widget Google Earth Library JavaScript Translation Code Intel Widget Map Widget “container” Google Map Library JavaScript Translation Code Map Library-Unique APIs (e.g., OpenLayers, GoogleMaps, Proprietary, etc) Common Map Widget API – enables widgets from different communities to interoperate with different maps
The API (summary) • View • map.view.zoom • map.view.center.overlay • map.view.center.feature • map.view.center.location • map.view.center.bounds • map.view.clicked • Status • map.status.request • map.status.view • map.status.format • map.status.about • Errors • map.error • Overlays • map.overlay.create • map.overlay.remove • map.overlay.hide • map.overlay.show • map.overlay.update • Features • map.feature.plot • map.feature.plot.url • map.feature.unplot • map.feature.hide • map.feature.show • map.feature.selected • map.feature.update • Drag And Drop Will expand these in next few slides
The API (in code) • Load kml feature data onto map widgetEventingController.publish('map.feature.plot.url', '{ "featureId": “SAGE_PUBLIC", "url": "https://sageearth.northcom.mil/arcgisserver/public/SAGE_link.kml" }'); • Center Map on Location (pan) widgetEventingController.publish('map.view.center.location', '{ "location": {"lat": 40.2205, "lon": -74.3579} }');
Current Status • Current spec (v1.1) • Requires KML and WMS (getMap) • Signed off early 2013 • Growing community of adopters • Next version (v1.2) • Ambiguity fixes • User manipulation support • Optional extensions (e.g., widget intents, clustering) • Considering GeoJSON • Growing community of participants
Common Map Widget API • Implementations: • JC2CUI – Reference Map Widget. Pluggable architecture, supports dynamically selected map renderer. JavaScript library can be reused for any desired renderer. Current implementations include Google Maps API version 2, Google Maps API version 3, Google Earth Plugin, OpenLayers 2.12. • Army – Google Earth Plugin based Map Widget with Army extensions. JavaScript wrapper library can be reused for any desired renderer. NASA World Wind implementation under development. • GCSS-I3 – NASA World Wind and Open Layers based implementations
JC2 CUI Example Publish map.feature.plot message Publish map.feature.selected message Receive message. Plot tracks on map Receive message. Center on selected track Receive message. Plot tracks on map Receive message. Plot tracks on map Receive message. Center on selected track Receive message. Center on selected track Receive message. Center on selected track Receive message. Center on selected track Receive message. Show tracks in grid Publish map.feature.selected message Receive message. Scroll to selected track
Additional Information • More Information: • Common Map API Group: https://groups.google.com/forum/?fromgroups#!forum/common-map-widget-api • Common Map API Wiki: https://intellipedia.intelink.gov/wiki/Common_Map_Widget_API_Committee • POCs for additional info: • Ken Trabue - kenneth.m.trabue.civ@mail.mil • Stephen Lubowsky- slubowsky@eoir.com • Marty Dowd - martin.j.dowd.ctr@mail.mil • Chris Bashioum – cbashioum@mitre.org, bashiouc@nro.ic.gov