Wednesday, May 19, 2010

Transforming Paper and Plastic into a 3D Interactive Experience

This post is part of the Who's @ Google I/O, a series of blog posts that give a closer look at developers who'll be speaking or demoing at Google I/O. This guest post is written by Roundarch's Technical Architect Greg Knapowski and Sr. Front End Developer Lawrence O’Sullivan who will be demoing as part of the Developer Sandbox.

Our client, NYSTROM Herff Jones Education Division, the leading producer of maps and globes for schools, sees many classrooms replacing chalk boards and wall maps with interactive white boards and laptop computers. Our Roundarch team worked to develop StrataLogica™, a web-based learning application that delivers map and atlas content in an engaging 3D, interactive environment utilizing the Google Earth API.

The Google Earth API was used as a foundation for StrataLogica™ to make use of its sophisticated image rendering logic, satellite imagery and access to built-in tools and navigation controls. As an enterprise scale application, we faced some interesting challenges and gained many insights along the way that we’d like to share.

Our first task was to prove we could wrap Nystrom’s existing educationally-focused maps and globes onto Google Earth while retaining the same high quality resolution delivered in their print products.

Achieving acceptable image resolution resulted in file sizes which were much too large. In addition, we needed to deliver an increased level of map content and granularity of images as the user zoomed into the earth. To address these two issues, we created a custom process that takes an Adobe Illustrator file and outputs Superoverlays in accordance with KML 2.1 standards. Using open source Python frameworks, we created a customized solution that outputs Superoverlays with various levels of content.

Our next challenge was to provide support for authoring and maintaining content, in the browser, using the Google Earth plugin. All content is authored and maintained in a content management system (CMS) in much the same way as any dynamic website. One unique difference is that some of the content elements are geo-referenced coordinates that specify the location of content on earth. In the case of placemark balloons, the geo-referenced coordinates identify “hotspots” on the Nystrom maps which become clickable when the user turns on a setting. The placemark balloons provide supplementary audio, image, video and descriptive content such as the example shown above for the Appalachian Mountains.



An ETL (extract, transform, load) process is used to transfer published content into the StrataLogica™ application database. We then use Java Server Pages (JSPs) to generate the KML which renders the placemark balloons. The KML contains both the “hotspot” coordinates and embedded HTML to display the audio, video, images and text. This example illustrates that standard web technologies can be used to deliver content through the Google Earth API with the exception that KML is generated in addition to HTML.

Once Nystrom was able to see their maps and content rendered on Google Earth through the plug-in, we needed to create a compelling and immersive educational experience to allow teachers and students to interact with maps, not just view them. Our team added features such as marking tools, custom content authoring tools and the ability for users to share and collaborate. For those of you attending Google I/O, stop by our booth in the Sandbox space to experience StrataLogica™ firsthand and chat with our team about the front-end development challenges we faced and how we overcame them. If you aren’t attending we encourage you to check out our blog post at http://blog.roundarch.com where we share more about how we developed StrataLogica™.

3 comments:

  1. BEGIN
    {
    $ENV{ORACLE_HOME} = '/home/oracle/product/8.1.7';
    $ENV{TWO_TASK} = 'DB';
    }

    $dbhpindb= DBI->connect("dbi:Oracle:host=000.000.000.000;sid=pindb", "user", "pass") or die "Unable to connect: $DBI::errstr";

    ReplyDelete
  2. $dbhpintmp = DBI->connect('dbi:Oracle:', q{user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST= 000.000.000.000)(PORT=1021)) (CONNECT_DATA=(SID=pindb)))}, "");


    $dbhpindb= DBI->connect($config{"DB_STRING_PIN"}, $config{"DB_USER_PIN"}, $config{"DB_PASSWD_PIN"});

    ReplyDelete
  3. DB_STRING_PIN=dbi:Oracle:host=000.000.000;sid=pindb

    ReplyDelete