-
Notifications
You must be signed in to change notification settings - Fork 3.5k
Google Summer of Code Ideas
Cesium is an open-source JavaScript library for creating 3D globes and 2D maps in a web browser without a plugin. It uses HTML5 and WebGL for hardware-accelerated graphics.
Information for Students
Cesium developers are eager to work with you. Our code has shipped to 10's of millions of people in the same day. We have a culture of writing clean, peer-reviewed, tested code. Our developers are experts in their fields; they write books, create open standards, and present at international conferences. We look forward to helping you grow your skills and ship beautiful code that has wide impact.
If you have questions about your proposal, email the project's mentor or discuss it on our mailing list. We encourage innovation; we are open to proposals for original projects not listed below. See our roadmap for ideas.
Tip: Strengthen your proposal by reading our Contributor's Guide and showing that you were able to get Cesium running locally on your machine. It's easy. If you need help, just ask. Make your proposal even stronger by tackling an issue or two, see our list of issues for beginners.
Student proposals are submitted through Cesium's page on the Google Summer of Code website.
Proposals are being accepted from April 22, 19:00 UTC through May 3rd 2013, 19:00 UTC. (see the full schedule.)
Get your feet wet
It can be quite helpful to learn about our codebase and try making some simple modifications to it, prior to submitting your proposal. Check out our issues flagged with the GSoC label to see if there are any that might make a good first bugfix for you.
All of Cesium's code is covered by a Contributor's License Agreement (CLA), which basically authorizes Cesium developers and users to use the code you're contributing to us. You'll need to read the instructions for contributing to Cesium and email us a signed CLA before we can accept any code changes.
Technologies and Tools We Use
(We don't expect you to know all of them).
HTML5, CSS3, JavaScript, WebGL, SVG, Git, Ant, Eclipse, Chrome, Firefox, Android
Project Ideas
# Android ## Android PerformanceWebGL support is improving rapidly on Android. Chrome, Firefox, and Opera Beta are capable of running Cesium on several phones and tablets. However, these devices do not have the same CPU and GPU performance as a desktop. On many devices, Cesium runs well, but that's not enough for us - we want it to scream.
Help us optimize Cesium for these devices. We will profile to find hot-spots and then tune the GPU code written in GLSL or the CPU code written in JavaScript or both. We'll consider fundamental architecture changes as needed and will carefully make visual quality vs. speed trade-offs.
Since this is the bleeding edge, we expect to find bugs in the browsers and GPU drivers. We'll work with browser and GPU vendors to resolve these and make the mobile platform better for everyone.
References
Skills: WebGL, JavaScript, Android, profiling, optimizing JavaScript and GLSL, git
Level: Advanced
Mentor: Kevin Ring - kevin@kotachrome.com
Backup Mentor: Patrick Cozzi - pjcozzi@siggraph.org
# Graphics ## Declutter for Map Labels
Image from Temporally Coherent Real-Time Labeling of Dynamic Scenes
A classic problem when drawing 2D or 3D maps is the overlap of nearby text labels, resulting in a cluttered display and illegible labels. We will design and implement an efficient real-time algorithm to declutter map labels, avoiding or minimizing overlap.
This is an NP-hard problem, and therefore we will solve it heuristically in an attempt to minimize the amount we move each label and maintain temporal aesthetics. We will also explore creating hierarchies of labels using k-means and/or knowledge of hierarchical label relationships, e.g., street - city - county - state.
The algorithm needs to be very efficient; it must run in JavaScript and work for 100s of dynamic labels or 1000s of static labels.
References
- Temporally Coherent Real-Time Labeling of Dynamic Scenes
- Dynamic Label Placement for Improved Interactive Exploration
- K-Means Clustering
Skills: Algorithm design, strong math, code and algorithm optimization, JavaScript, git
Level: Advanced
Mentor: Patrick Cozzi - pjcozzi@siggraph.org
Backup Mentor: Dan Bagnell - dbagnell@agi.com
## Geometric AlgorithmsWe use geometric algorithms to compute triangles composing shapes on the globe such as circles, ellipsoids, polygons, etc. We then use the triangles to draw the shape using WebGL.
In this project, we will add geometric algorithms for new shapes and optimize existing geometric algorithms. We will:
- Add triangulation for walls perpendicular to the globe. This includes computing positions, averaged normals, and texture coordinates.
- Add triangulation for "ribbon lines" - think the geometry for the track in Rainbow Road.
- Add triangulation for hexahedrons.
- Optimize polygon ear clipping and improve its robustness at the International Date Line.
- Optimize triangulation for circles and ellipses.
We'll consider other shapes and level of detail as time permits.
References
Skills: Strong geometry and math skills, data structures and algorithms, optimization, JavaScript, git
Level: Intermediate
Mentor: Dan Bagnell - dbagnell@agi.com
Backup Mentor: Patrick Cozzi - pjcozzi@siggraph.org
# Geospatial ## Vector Data Visualization with JSONKML is a popular XML-based format for storing vector data, i.e., points, polylines, and polygons. However, new JSON-based standards are emerging that are better suited to web mapping.
In this project, we will add support for two JSON vector data formats, GeoJSON and TopoJSON, to Cesium. First, we'll load and draw them using the Cesium API. Then we'll investigating styling with colors, patterns, etc.
References
Skills: JavaScript, git, open standards, geospatial
Level: Novice
Mentor: Matt Amato - mamato@agi.com
Backup Mentor: Ford?
## Raster Data Visualization with Web Map Tile ServiceCesium draws 3D maps retrieved using many map standards like Web Map Service (WMS) and OpenStreetMap. These standards provide access to high-resolution maps.
In this project, we will add support for Web Map Tile Service (WMTS), an Open Geospatial Consortium (OGC) standard. WMTS allows serving static tiles as individual files, and generally performs better than WMS.
References
Skills: JavaScript, REST APIs, git, open standards, geospatial
Level: Intermediate
Mentor: Tom Fili - tfili@agi.com
Backup Mentor: Kevin Ring - kevin@kotachrome.com
## Vector Data Visualization with Geography Markup LanguageGeography Markup Language (GML) is an Open Geospatial Consortium (OGC) standard for expressing geographical features, e.g., points, polylines, and polygons, in XML.
In this project, we will add support to Cesium to draw and style features from GML. The GML spec is quite large with many different feature types. We can limit our scope to the OpenGIS GML Simple Features Profile, which defines a common subset.
This project is a stepping stone to supporting Web Feature Service (WFS) below.
References
Skills: JavaScript, XML, git, open standards, geospatial
Level: Intermediate
Mentor: TBA
Backup Mentor: TBA
## Vector Data Visualization with Web Feature ServiceWeb Feature Service (WFS) is an Open Geospatial Consortium (OGC) standard for requesting geographical features, e.g., points, polylines, and polygons, over the web.
In this project, we will add support to Cesium to request geographical features using WFS over HTTP, and draw and style them. Time permitting, we will also implement client-side creation, deletion, and modification of features and the resulting server updates using WFS-T (Transactional).
This project depends on the Geography Markup Language (GML) project above since WFS features are returned using GML (based on XML). GML support can be considered a subset of this project or a separate project.
References
Skills: JavaScript, web services, XML, git, open standards, geospatial
Level: Intermediate
Mentor: TBA
Backup Mentor: TBA
# UI ## Navigation WidgetCesium provides default mouse and touch input for the camera, including:
- Left click and drag - Rotates the camera around the globe in 3D and translates the camera over the map surface in 2D and Columbus view.
- Right click and drag - Zooms the camera in and out.
- Middle wheel scrolling - Also zooms the camera in and out.
- Middle click and drag - Rotates the camera around the point on the surface of the globe.
In this project, we'll create a modern widget, potentially using SVG, to allow the user to perform these camera actions with just the left mouse button or single click. We'll also consider adding an instruction overlays demonstrating mouse and touch controls. More ideas for this project here.
The nav widget would likely include some sort of a compass, which might or might not look anything like the above.
References
Skills: Eye for aesthetic UI design, HTML5, CSS3, SVG, JavaScript, git
Level: Intermediate
Mentor: Ed Mackey - ed-cesium@snappymaria.com
Backup Mentor: Matt Amato - mamato@agi.com
## Credits LayoutCesium draws content (terrain, imagery, models, etc.) from external sources that need to be credited when their content is visible as shown in the screenshot above. Depending on what content is loaded or visible, the displayed credit (image or text) can vary.
In this project, we'll design an API to mange credits and aesthetically overlay them on the 3D scene.
Skills: Eye for aesthetic UI design, JavaScript, git
Level: Novice
Mentor: Scott Hunter - scott.k.hunter@gmail.com
Backup Mentor: Ed Mackey - ed-cesium@snappymaria.com
# Misc ## Offline Web App SupportCesium provides a realistic virtual globe by streaming high-resolution terrain and imagery on-demand. However, users without a network connection or an unreliable network connection cannot rely on the connection to servers hosting terrain, imagery, and other data used by Cesium.
In this project, we'll use new HTML5 features to design and implement offline support in Cesium. That is, we'll let users select and download data for an area of the globe (pending the data provider's terms of use) so that users can use Cesium later without connectivity.
References
Skills: JavaScript, HTML5, git
Level: Novice
Mentor: Scott Hunter - scott.k.hunter@gmail.com
Backup Mentor: Kevin Ring - kevin@kotachrome.com