NASA World Wind for .NET
NASA has created a very powerful Java SDK, called World Wind,for the visualization of geographical data. It is an open source, open standards, and cross-platform Java SDK that allows you to quickly create powerful GUIs to visualize and manipulate GIS data. Commercial and governmental users rely on this SDK for sophisticated applications in all sectors of industry.
While Java proved to be an excellent choice for creating a cross-platform toolkit it unfortunately hampered adoption on the popular Microsoft Windows platform because many applications there tend to be written in C# or one of the other .NET languages. In the past it had been notoriously hard and awkward to integrate a Java GUI into a .NET application.
Codemesh's JuggerNET tool now allows the embedding of arbitrary Java GUI components into .NET Forms-based applications. We used this core technology to create an integrated solution for World Wind that is both intended to showcase the strength and versatility of Codemesh's JuggerNET tool and provide customers with an out-of-box World Wind component for their .NET applications.
The image below shows a demo written in C# that hosts a Java WorldWindowGLCanvas component on the left side and is fully integrated with the .NET controls on the right side.
While this might not be the prettiest .NET GUI ever created it demonstrates many advantages of tight, full-featured integration, notably:
- a PositionListener written in C# that updates the coordinates on the right hand side based on mouse movements over the globe (demonstrates callbacks),
- custom layers (Equator and Meridien) drawn and controlled from C#,
- a .NET list control providing full control over the PlaceNameServices in the World Wind control,
- a button that rotates the globe to the (0,0) coordinate,
- full mouse functionality, including mouse wheel for zoom
How we did it
We used our JuggerNET product to generate .NET bindings for the entire World Wind API and some assorted Java support types. Then we added our expertise in integrating between .NET and Java and provided you with an easy to use custom control that hosts a World Wind GUI. You can simply add the custom control to your Windows Form and start cusotmizing and hooking up events.
Just to stress this fact: our code generator generates .NET bindings for Java types, it does not translate the Java types. This means that you still need a supported Java Runtime Environment and the NASA World Wind jar files at runtime; our product simply provides an easy-to-use .NET gateway, both at development- and at runtime.
Our code generation-based approach has several advantages:
- It is easy to customize the set of Java types you want to use from .NET. Anything between a complete World Wind API (>8MB for assembly) and just the basics (<100k for assembly) is possible.
- All integration code is generated using proven code generator technology. If it compiles, it runs.
Why do we say: "If it compiles"? Because some APIs use naming policies that do not translate well to .NET in every name translation setting. You might have to tweak some code generation settings to get the generated code to compile. This is particularly true for the complete World Wind API (and we did it for you so you don't have to worry about it).
- The generated types are extremely close to their underlying Java types. This means that often you can get a Java World Wind snippet ported into .NET in a few minutes or even use it without any changes.
- You might not even need to rebuild your .NET app to take advantage of bug fixes in NASA's World Wind SDK. As long as the changes are calling interface compatible you only have to update the jar files.
Contact us and ask us for the World Wind demo application or our code generator. Evaluations are free and fully supported for 30 days. You will find us extremely reasonable in pricing and licensing. Just because we don't list prices does not mean that we're unaffordable. Feel free to take a look at the product evaluation license that is about as short and concise as we could make it.
Talk to us about other GUI integrations if this is not exactly what you need but you think our products might be able to help you.