Summer of Code 2007 Ideas

From World Wind Wiki

Revision as of 18:27, 7 March 2007 by Stepman (Talk | contribs)
Jump to: navigation, search

Google Summer of Code discussion...

Contact Information for SoC entrants / Questions
If you have questions about our Google Summer of Code project please contact:
Adam Hill
Board of Directors, The Free Earth Foundation
Google Talk:
IRC: irc://


Free Earth Foundation profile
The Free Earth Foundation is a non profit organization that promotes free GIS and geodata. We are currently looking for coders to help with NASA World Wind ( a virtual globe much akin to Google Earth. NASA World Wind is currently in C#.
About Google's Summer of Code (student faq, mentor faq)
Summer of Code 2006 is a program that offers student developers stipends to create new open source programs or to help currently established projects. Google will be working with a variety of open source, free software, and technology-related groups to identify and fund several hundred projects over a three-month period. The inaugural instance of the program, which took place last summer, brought together 400 students and 40 mentoring organizations from 49 countries. We'd like to include even more organizations and participants this year.

For those of you coming here from the Google SoC page:

NASA World Wind is a 3d application used for looking at geospatial data. It is written in C# and uses Microsoft's Direct X as its 3d API. It was written by NASA's Learning Technologies group to bring rich browsing capabilities to the schools and students of the world. Students will need to be able to program in one of the .NET languages that are availible and for some of the projects will need a Intermediate to Advance level of knowledge of 3D and its associated data structures.


  • License - NASA Open Source
  • Language - .NET 2.0 C# prefered, but any .NET supported language would be acceptable. This does not apply to any external modules like GDAL/OGR/Proj.4/JTS/GEOS/Mapserver you need to use.



(Remember that these are just suggestions. Feel free to suggest your own!!)

OpenGL port

Difficulty: Hard

Port World Wind to use OpenGL instead of Managed DirectX

Mono Port

Difficulty: Hard(3D), Medium(2D)

Get World Wind running in Mono then hook into the OGL port above or replace with a 2D window. Possibly 2 students could collaborate on these two items.

Easy Data Addition

Difficulty: Medium

An interface with which users (even beginners) could prepare any maps/imagery/data they might have (ideally without the need to know anything about map projections) and get it into WW, in a format which could be distributed easily... some way for individual large images to be manipulated (think Image Overlay with handles), then tiled in WW format with the ability to rejoin as a properly geo-referenced image with a world file or header info like geotif (think Tile Render with more control), as well as a way to easily substitute different map scales at different zoom levels (like USGS TopoMaps). On top of wanting all this, I think WFS/other vector data support is really important to shoot for, and Tiger data should be easily added.

A similar idea from another message:

A streamlined process for getting more data into WW. A stand alone program that can load data from a variety of formats -- terrain models, lines & polyons from shapefiles, points from a geodatabase, ortho images from tiff's in the filesystem, geocoded street network from a WFS server -- and package it all up into distributable WW cache pack. For the bonus round the cache pack can be wrapped up nicely in an installer and plonk an icon down on the tool dock.

A related idea is: Google Earth KML file support. There is a large body of KML files on the web, and several programs are able to generate KML directly (e.g. from GPS logs).

World Wind has placemark KML support already from ShockFire here - perhaps it could be extended, though.

GDAL/OGR and Proj.4 Integration

Difficulty: Easy to Medium

Add the infrastructure necessary to enable World Wind to handle all the formats that bitmap and vector formats GDAL and OGR can read (rasterizing the vector formats as needed) and enabling WMS and WW native tiled formats to be in any projection that Proj.4 can handle.

Scene Graph/3D Support

Difficulty: Hard

World Wind currently has no scene graph for support of efficient rendering of 3D objects. (outside of the sphere of the earth) Modify the World Wind rendering engine to use a scenegraph (Open Scene Graph is a good candidate) and allow larger numbers of 3D objects to be rendered and manipulated. Other solutions to efficiently render many 3D objects are also acceptable.

Vector Support - Shapefiles/OGR/GML/GEOS/NTS

Difficulty: Hard

Rendering vectors is a current deficiency in the World Wind engine. Shapefiles are currently rasterized before rendering as a texture. Implement a renderer for vector objects and implement the ability to support parsing of various vector file types. Optionally use NTS or GEOS to allow spatial operations on the data. Demonstrate that it works by rendering at least 2 vector types Using OGR/Shapelib to read the formats is acceptable (and preferable)There is no scene graph to support efficient vector rendering, so an inventive solution might need to be implemented.

Vector Styling/Attribute Filtering GUI

Difficulty: Easy-Medium

We have Shapefile support in World Wind, but no GUI to help style the data or build expressions to filter the data. Implement a user friendly GUI to allow the end user to style Shapefiles and to filter the data they desire. Preview of the styling visuals and use of good UI design is required.


Difficulty: Easy (but tedious)

World Wind is an English only application at the moment and has no concept of different languages or locales (except for numeric delimiters like commas versus periods in numbers) or English/Metric units. Make World Wind able to support multiple languages and units.

Shapefile improvements

Difficulty: Medium

Shapefiles need to be easily accessible. People need to be able to link to a shapefile on a web page just like they link to a Worldwind://goto/ URL using, say, a Worldwind://shapefile/host/location/shapefile.xml URL. That URL should point to a shapefile XML file. Every time WW is handed a URL, it should check the .xml timestamp and size to see if it needs to be updated (just like a browser does). When it fetches the .xml file, it automatically fetches (or re-fetches) the .zip which is the shapefile itself. The .zip file should be left packed, and the shapefile code enhanced to read the .zip file contents.

Shapefile databases need to be more useful. When the mouse cursor sits in the same polygon, or near the same line or point, for a reasonable period of time (1 second?) a window should be populated with all the data out of the database. The window should not be automatically raised -- if the user has lowered it, that means that they don't want to see it. The window should not be scrolled when it is refreshed -- if the user has scrolled to a particular data point, leave the scroll point at the same place so they see the same data point. The user should be able to select text in the window, and copy it to the clipboard. Of course, once they move the cursor away from the polygon, the data will change. So, when the WW window doesn't have the focus, use the center crosshairs as the point which populates the window.

Rocket Launch and Orbital Mechanics Sim

Difficulty: Hard

Simulate rocket launches and satellite/shuttle missions in 3D. Using various toolkits and source packages out there like JAT ( let a user simulate a rocket launch from the surface of the earth into space and eventual orbit. Ground plots of the trajectory during launch and while in orbit are required. Interactive GUI for setting up the launch parameters are requires as well. The functionality will be similar to that provided by AGI's Satellite Toolkit.

General Rendering Optimizations

Difficulty: Medium

There are many places in WW that could do with some optimization. Currently we do not make use of HW vertex buffers or batch up geometry for submission the to GPU. Redundant geometry for multiple layers should be stored as a single vertex buffer; a reference counting mechanism will be necessary to track vertex buffers currently in use. A similar, unoptimized mechanism is already in place and could be expanded upon. Student would add a batching mechanism and optimize rendering via DirectX Hardware buffers.

Spatial Indexing

There is no generic spatial indexing mechanism for World Wind features. Worldwind needs an implementation of R*-Trees (the insertable kind) to store renderable geometry and as an index into imagery. Student would be responsible for implementing R* for a .NET language (reusing and wrapping existing libs acceptable) and integrating it into the rendering pipeline.

Remote Control

Slaving several running instances of World Wind to a teachers instance would be incredibly useful for classrooms. UDP multicast without a dedicated server would be preferable, but other TCP or UDP solutions are also acceptable. World wind needs an internal command structure to support this. Student would be responsible for reworking World Wind's input system and implementing communication between instances.

Personal tools