Summer of Code 2007 Ideas

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
 * adam.hill@gmail.com
 * AIM: adam.hill@mac.com
 * MSN: adamhill@pobox.com
 * Google Talk: adam.hill@gmail.com
 * IRC: irc://irc.freenode.net/#worldwind

Thanks!


 * 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 (http://worldwind.arc.nasa.gov), a virtual globe much akin to Google Earth. NASA World Wind is currently in C#.


 * About Google's Summer of Code (faq)
 * Summer of Code 2007 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.

Requirements:
 * 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.

Ideas
Remember that these are just suggestions. Feel free to suggest your own!! Also keep in mind that some of these suggestions may be for nice new features in WW, but if the amount of work involved is relatively small then they may be less likely to get approved. You might consider expanding on the idea, or combining it with something related.

Enhanced Vector Support
Difficulty:Hard to Medium depending on depth of implementation and student's experience.

This section collates various Vector data related entries from below.Please delete them as this section takes shape.

Vector Support - Formats(Shapefiles/GML/KML/WFS) and Libaries(OGR/GEOS/NTS)

 * Add support for a common Open Source vector library. Choose one or more of the above.
 * Increase the scope of support for the various vector formats and generalize their rendering i.e. Shapefile,GML and KML are to be rendered using the same World Wind Renderable Objects for uniformity.
 * Add support for server based vector format i.e. WFS. Data from the WFS can be delivered and cached in one of the supported file based formats (see WFS placenames in WW 1.4 for some initial work on this). From experience GML-GZIP is the most compact.
 * Support vector data in multiple projections if projection info is available.This can be done using the libraries mentioned.

Vector Styling/Attribute filtering GUI

 * Add styling GUI for the vector layers. This can be via the Layer Properties dialog.
 * Add serialization and reloading of styling information. This can be via XSD or a similar standard.

Vector Rendering Optimization

 * Optimize Vector data rendering. Specifically Icons(for points), Linefeature/Polygonfeature(for line data). The performance can be measured using the DirectX Profiler.

Spatial Indexing

 * Allow spatial indexing and query of file based vector data.
 * Allow use of server based indexing and query on WFS servers.

OpenGL port
Difficulty: Hard

Port World Wind to use OpenGL instead of Managed DirectX


 * I have started a forum for people who are interested in porting WorldWind to Linux. Here is the link. http://www.kevin.myprofessionalweb.com

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(Including conversion of Virtual Earth to QuadTileset)
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.

This will also allow better integrated support for Vitual Earth and all other services using similar tiling scheme(i.e. Google Maps and Yahoo Maps).

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.

Localization
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 (http://jat.sourceforge.net/) 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 STK.

This project really is "hard". The best way to get similar functionality to AGI's STK is to let AGI help. Please email Graham Beasley at AGI if you are interested (gbeasley@agi.com)

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.

KML 3D Model improvements
KML 3D models currently run much slower in World Wind than Google Earth and are not as detailed, see http://issues.worldwind.arc.nasa.gov/browse/WW-777 for more details. Also sketchup models from Googles 3D warehouse are not supported, improving this functionality will be a great asset for World Wind, this may be related to certain improvements listed above.

Internal Layer Selection
Sorry if this is a bad suggestion. Add the ability to tell World Wind which layers to load at startup from with in it. It could be useful for sorting the Layer Manager if you have a lot of layers or just don't need to see every single one.

Split-Window Viewing capabilities
The ability to view more than one spot and/or more than one layer at the same time. See this thread for more information Idea for Summer of Code: Split window viewing

Alternate Globe Rendering (Ellipsoid support and Better poles)
For special circumstances e.g. Navigation or for Rendering data near the poles it is useful to have support for ellipsoids and a separate projection for polar-areas like OssimPlanet does.This will invlove extensive recoding of sphere rendering. Chris Maxwell experimented with this a bit and may mentor the student. Organizations doing arctic/antarctic research may also have helpful input for a project involving rendering near the poles.

Click-Once Deployment
Difficultly: Medium-Hard

.NET has a deployment technology called Click-Once. This allows you to publish the app on the web and users can just click on a link to install it locally (.NET and Managed DirectX are still required) The barrier of installing WW would go down considerably if this could be used.

This will involve more than just making an installer. The student will need to figure out how to load configuration files and graphic resources as well as how to manage the WorldWind cache in a resource constrained sandbox. Appropriate security demands will also need to be integrated into the code.

Virtual Earth Integration
Difficulty:Medium-Easy

We currently have a plugin that uses Virtual Earth layers. But it is not integrated properly into the Image Layer system. Student would be responsible for making it a real layer and reprojecting the tiles on the fly with Proj.4