Wednesday, August 14, 2013
Very Sleepy
I've used a handful of different performance analysis tools in my time as a coder, but I've never liked one as much as Very Sleepy. The first time that I decided to try it, I had the tool downloaded, installed and working with useful results all within about five minutes. It's simple, it works well, and it tells you most everything you need to know. Windows only. Try it.
Monday, July 22, 2013
Google Maps for Android: From Good to Worse
I recently read In The Plex by Steven Levy. In his book Levy describes a company with vision, long-term vitality, and technical savvy. Hearing about the vision and standards of Google inspired me to be a better researcher in my work at Georgia Tech, and, as proud as I am to be a part of FalconView, I'll even go so far as to admit that I've been tempted (and only tempted) to send Google a resume just to see what happens.
I say all of that to preface my negative comments with the point that I hold nothing against Google. Here in the South if you want to say something negative about someone and still be polite, you have to start off by saying, "bless his heart." Well, bless their hearts, Google has goofed up Maps for Android in some pretty serious ways.
Goodbye, Easy Navigation
Before the latest update if I needed to navigate any place, I would open the navigation application, I'd press, "Speak Destination," I'd speak, and then I'd be off all within about twenty seconds. To find a nearby BBQ place I only had to press a couple of buttons, say, "BBQ" and I was practically there. I loved it.
Maybe I've missed it, but the easy button is now gone. I have to open the navigation application and press about seven buttons before I can speak my destination. If I turn off the screen on the way to conserve battery life, I have to push a few more buttons to return to the navigation screen. The application crashed on me three times yesterday on the way across town. In short, the navigation feature of Google Maps for Android is no longer suited for use while in the car, which pretty much defeats the point.
Goodbye, Latitude
I used Google Reader daily only a few months ago, then Google pulled the plug on the entire application. (Thanks, Feedly, for the great alternative.) Now they are pulling the plug on Latitude. It's already completely removed from Google Maps for Android. My family and I used to keep up with one another using this feature, and I liked exploring my location history. No more. Reader, Latitude, and probably more to come are being sucked in by Google Plus. Here's the kicker. Very few people that I know use Google Plus. Google beats the world in organizing the world's information and making it useful -- they are absolutely awesome in this regard -- but this strategy of forcing all Google users to engage in Google Plus is ill advised. Let's face it (bad pun intended), Google doesn't have the masses in social media. Their strategy to get there is frustrating their biggest fans.
Trust me, I'm one of them.
I say all of that to preface my negative comments with the point that I hold nothing against Google. Here in the South if you want to say something negative about someone and still be polite, you have to start off by saying, "bless his heart." Well, bless their hearts, Google has goofed up Maps for Android in some pretty serious ways.
Goodbye, Easy Navigation
Before the latest update if I needed to navigate any place, I would open the navigation application, I'd press, "Speak Destination," I'd speak, and then I'd be off all within about twenty seconds. To find a nearby BBQ place I only had to press a couple of buttons, say, "BBQ" and I was practically there. I loved it.
Maybe I've missed it, but the easy button is now gone. I have to open the navigation application and press about seven buttons before I can speak my destination. If I turn off the screen on the way to conserve battery life, I have to push a few more buttons to return to the navigation screen. The application crashed on me three times yesterday on the way across town. In short, the navigation feature of Google Maps for Android is no longer suited for use while in the car, which pretty much defeats the point.
Goodbye, Latitude
I used Google Reader daily only a few months ago, then Google pulled the plug on the entire application. (Thanks, Feedly, for the great alternative.) Now they are pulling the plug on Latitude. It's already completely removed from Google Maps for Android. My family and I used to keep up with one another using this feature, and I liked exploring my location history. No more. Reader, Latitude, and probably more to come are being sucked in by Google Plus. Here's the kicker. Very few people that I know use Google Plus. Google beats the world in organizing the world's information and making it useful -- they are absolutely awesome in this regard -- but this strategy of forcing all Google users to engage in Google Plus is ill advised. Let's face it (bad pun intended), Google doesn't have the masses in social media. Their strategy to get there is frustrating their biggest fans.
Trust me, I'm one of them.
Thursday, June 13, 2013
Introducing the FalconView KML Drawing Library
Thanks, Georgia Tech, for funding me to develop a library for drawing KML. The screen captures that you've seen in the last couple of months have shown the library in progress on Windows (via FalconView) and on Linux (via Quantum GIS).
One of the most exciting parts of this project was implementing a KML drawer for Android. This involved making the drawer and its dependencies (including Libkml and Google Test) compile using the Android native development kit, and hooking the Java-coded GUI to the C++ portion via JNI.
More information about the KML Drawing Library, which is used as a part of FalconView, may be found on the FalconView web site. Like all of FalconView Open Source, the KML Drawing Library may be used in third party applications so long as the terms of the FalconView Open Source license are followed. Some instructions for using the library and a link to the source code are available at that link. I'd be glad to answer questions about using the library posted here or on the FalconView web site discussion boards.
One of the most exciting parts of this project was implementing a KML drawer for Android. This involved making the drawer and its dependencies (including Libkml and Google Test) compile using the Android native development kit, and hooking the Java-coded GUI to the C++ portion via JNI.More information about the KML Drawing Library, which is used as a part of FalconView, may be found on the FalconView web site. Like all of FalconView Open Source, the KML Drawing Library may be used in third party applications so long as the terms of the FalconView Open Source license are followed. Some instructions for using the library and a link to the source code are available at that link. I'd be glad to answer questions about using the library posted here or on the FalconView web site discussion boards.
Thursday, May 9, 2013
FalconView is Going 3D
Starting with FalconView 5.2, users will have the option of viewing data in 3D. Our engine uses osgEarth to render FalconView maps on overlays on a 3D canvas, draped over elevation data.
We probably won't have a beta of this available until later in the year, but stay tuned the the official FalconView web site as we push out code and releases.
Friday, March 22, 2013
A Random KML Generator
For testing KML performance in FalconView, I've written a Random KML Generator. It only does points and squares at the moment, but I will be adding to it over time. Feel free to make good use of it. The source code is on the FalconView web site here (forgive the monolithic Python file).
Monday, January 28, 2013
Quantum GIS KML Overlay
I've put together a KML Overlay for Quantum GIS based on the KML Overlay that I'm working on now for FalconView. You can see a video demonstration of it here. The source code is here.
My purpose in posting this is to demonstrate a KML drawing library that I'm putting together that is intended to be a rendering companion to LibKML. More about this drawing library, which is currently under construction, will be posted here.
My purpose in posting this is to demonstrate a KML drawing library that I'm putting together that is intended to be a rendering companion to LibKML. More about this drawing library, which is currently under construction, will be posted here.
Friday, January 18, 2013
How to Create a QGIS Plugin in C++
FalconView has a rich plugin-architecture that I've been writing to for many years. Though I'm very comfortable writing FalconView plugins, I'm in the process now of writing a plugin that needs to work in FalconView and in Quantum GIS. This post is about my learning experience in writing a plugin for Quantum GIS. I find that the documentation on QGIS plugins is sparse, so perhaps what I've learned will help others who want to do something similar.
The full source code for this plugin may be found here. This is a minimalistic plugin that simply draws a rectangle on the screen using screen coordinates. It demonstrates how to register a plugin with Quantum, how to add an action to a QGIS menu, how to register to receive a callback, and how to draw on the map canvas. I call it the Hello World plugin.
(Before I started this process, I had no experience coding to QGIS or to Qt. I'm sure that some of what I've done here does not reflect best practices with either technology, so I invite members of either community to comment here in order to help me and others to understand best practices. I will note that my plugin does not conform to the Quantum GIS coding standards. Instead, I've conformed to the FalconView coding standards since this project is part of a larger effort related to FalconView.)
[[ EDIT: Most QGIS plugins are done in Python, and there is much better documentation for these plugins. ]]
The Header File
The complete header file may be found here. There are two things of interest in the header file. First, notice that the HelloWorldPlugin is a QObject. This comes by deriving from QObject and by including the QOBJECT macro in the class.
class HelloWorldPlugin : public QObject, public QgisPlugin
{
Q_OBJECT
...
The full source code for this plugin may be found here. This is a minimalistic plugin that simply draws a rectangle on the screen using screen coordinates. It demonstrates how to register a plugin with Quantum, how to add an action to a QGIS menu, how to register to receive a callback, and how to draw on the map canvas. I call it the Hello World plugin.
(Before I started this process, I had no experience coding to QGIS or to Qt. I'm sure that some of what I've done here does not reflect best practices with either technology, so I invite members of either community to comment here in order to help me and others to understand best practices. I will note that my plugin does not conform to the Quantum GIS coding standards. Instead, I've conformed to the FalconView coding standards since this project is part of a larger effort related to FalconView.)
[[ EDIT: Most QGIS plugins are done in Python, and there is much better documentation for these plugins. ]]
The Header File
The complete header file may be found here. There are two things of interest in the header file. First, notice that the HelloWorldPlugin is a QObject. This comes by deriving from QObject and by including the QOBJECT macro in the class.
class HelloWorldPlugin : public QObject, public QgisPlugin
{
Q_OBJECT
...
The next point of interest is the declaration of the Qt slots. These are callback methods.
public slots:
void StartOverlay();
void DrawOverlay(QPainter* painter);
Functions Exported from the Library
There are a handful of functions exported from the library that are required for QGIS to load plugin. These are all in the cpp file, and are all declared with the QGISEXTERN macro.
Adding a Menu Item to a QGIS Menu
We do this in the initGui method. The important thing to note is how we register for a callback using connect(...) and how we call into the QGIS interface to add the action to the Plugin menu.
/*virtual*/ void HelloWorldPlugin::initGui()
{
std::cout << "HelloWorldPlugin::initGui" << std::endl;
// add an action to the menu
m_action = new QAction(QIcon("" ), tr("Hello World"), this);
m_action->setWhatsThis(tr("Draw on the map canvas."));
connect(m_action, SIGNAL(triggered()), this, SLOT(StartOverlay()));
m_qgis_if->addRasterToolBarIcon(m_action);
m_qgis_if->addPluginToMenu(tr("&Hello World"), m_action);
}
Handling the Menu Item Selection Event
StartOverlay() handles this event. It gets the map canvas and connects to the render complete signal. I have some code in this sample that demonstrates how to zoom out the map. This is not necessary for drawing the rectangle, but I've left it in for pedagogical reasons.
void HelloWorldPlugin::StartOverlay()
{
std::cout << "HelloWorldPlugin::StartOverlay" << std::endl;
// get the map canvas
QgsMapCanvas* canvas = m_qgis_if->mapCanvas();
// connect to the render complete signal
connect(canvas, SIGNAL(renderComplete(QPainter*)),
this, SLOT(DrawOverlay(QPainter*)));
// zoom out for fun
canvas->zoomOut(); // wheeeeee!!!
}
Drawing the Rectangle
Now that we are registered to receive calls to DrawOverlay when the canvas refreshes, drawing the rectangle is easy.
void HelloWorldPlugin::DrawOverlay(QPainter* painter)
{
std::cout << "HelloWorldPlugin::DrawOverlay" << std::endl;
painter->drawRect(20, 20, 60, 60);
}
Building the Project
The Qt project file is here. First, run qmake qgis_hello_world.pro to make the Makefile. Next, run make to build the library. Notice that Qt will generate some code files that you will find in the project folder.
Trying it Out
Copy the library to your QGIS plugins folder. The command that I use to do this on my Ubuntu system is sudo cp libqgis_hello_world.so.1.0.0 /usr/lib/qgis/plugins/libqgis_hello_world.so.
The Hello World plugin should now appear in the QGIS plugin manager menu. Turn it on. Next, select the menu item that we added to the Plugin menu. The rectangle should draw.
Finding More Help
Be sure to look at the QGIS header files (in /usr/include/qgis on my system) and API reference (http://www.qgis.org/). Also the samples under src/plugins are helpful.
Thursday, November 1, 2012
Open Street Maps KML Super Overlay
In support of testing KML in FalconView, I created a simple Google App Engine application that provides automatically generated KML via network links and regions to deliver Open Street Maps. I thought this was fun enough to blog. You can find a KML file to try it yourself here, and you can find a link to the Python source code here
.
.
Wednesday, June 15, 2011
Friday, April 1, 2011
FalconView Announces FalconView for Facebook
ATLANTA, GA - In an effort to bring a more social experience to the mission planning community, FalconView researchers have completed a year-long effort to integrate two of the most popular and useful tools in the DoD mission planner's kit: FalconView and Facebook.
"The idea is to make mission planning more people-oriented, more social, and more fun," said FalconView program manager Chris Bailey. "This will take us beyond just icons on a map. FalconView for Facebook will add the human dimension to the experience. Intelligence analysts who have long desired better integration between geospatial intelligence and human intelligence have their wish."
One of the features of FalconView for Facebook is the ability to open a target's Facebook page from within the FalconView GUI. Bailey demonstrated this feature to us in the lab by linking FalconView to a live intelligence feed, right-clicking on a combatant radar site, and opening the "Facebook places" page for the site, where he pointed out that several combatant soldiers had already "tagged" themselves in the satellite imagery of the location. (Security concerns preclude us from posting the actual demonstration in this article.)
Where could this project lead? "I can't disclose all of the next steps," said Bailey, "but let's just say that geographic analysis of your Farmville properties will soon become much easier."
More details about this project may be found here.
"The idea is to make mission planning more people-oriented, more social, and more fun," said FalconView program manager Chris Bailey. "This will take us beyond just icons on a map. FalconView for Facebook will add the human dimension to the experience. Intelligence analysts who have long desired better integration between geospatial intelligence and human intelligence have their wish."
One of the features of FalconView for Facebook is the ability to open a target's Facebook page from within the FalconView GUI. Bailey demonstrated this feature to us in the lab by linking FalconView to a live intelligence feed, right-clicking on a combatant radar site, and opening the "Facebook places" page for the site, where he pointed out that several combatant soldiers had already "tagged" themselves in the satellite imagery of the location. (Security concerns preclude us from posting the actual demonstration in this article.)
Where could this project lead? "I can't disclose all of the next steps," said Bailey, "but let's just say that geographic analysis of your Farmville properties will soon become much easier."
More details about this project may be found here.
Friday, July 30, 2010
2010 FalconView Symposium
This is just a reminder to sign up for the 2010 FalconView Symposium. Yours truly will be presenting a session on ArcGIS integration with FalconView and the FalconView Common Data Interfaces. (Chris Bailey has stolen my topic of choice, which includes how to use FalconView with KML and Web Services.) The conference will be held here at Georgia Tech, and it's a great chance to get a chance to ask questions to the FalconView developers without paying the big bucks for a full FalconView course.
Friday, June 25, 2010
Open Street Maps in FalconView
I thought this was too neat not to share. Here is a sample of the new Open Street Map base map type drawn in FalconView 4.3.0.707. (Note that the red line is a route being drawn from a KML file.)
Thursday, June 17, 2010
FalconView for Linux
Developed over 15 years ago, the first version of FalconView was designed to run on PC DOS. FalconView 2.0 for Windows 3.1 appeared shortly thereafter and, since then, FalconView has been an exclusively Windows-based application. Now, thanks to internal funding by Georgia Tech, a Linux-based version of FalconView is running in the development labs at Georgia Tech. The goal is to create a cross-platform code base for FalconView. This will allow FalconView to run in multiple operating systems, like Linux or VxWorks and to support desktop, portable, embedded and mobile devices. This experimental version currently includes support for the various base map types, the Points Overlay and GPS trails (with more features to come). Map management is currently performed by the desktop version of FalconView feeding a cross-platform SQLite database for map coverage support. Georgia Tech hopes to obtain sponsor funding to bring other features to the cross-platform version of FalconView. Stay tuned for further developments in this area.
Thursday, June 10, 2010
FalconView 4.3 Renamed to FalconView 4.2.1
At the request of it's major sponsors, Georgia Tech is renaming FalconView 4.3 to FalconView 4.2.1. Sorry for the confusion.
Friday, May 14, 2010
KML in FalconView 4.3
I'm a fan of Google Earth: having used a handful of 3D map viewers, I've found that GE is hard to beat. Sometimes, though, it's nice to be able to view maps, charts and imagery in a 2D setting, where it's often easier to visualize a route or a mission plan. FalconView 4.3 includes the capability to open KML and KMZ so that you can view your data in the 3D environment of Google Earth, or in the 2D environment of FalconView, whichever is better suited to your particular need. We support KML ground overlays, time-dependent KML (use the FalconView time control), regionated KML, screen overlays and all types of placemarks (other than 3D models, which we draw as points so that you can see where they would draw in a 3D view and get the metadata associated with them). Here are a few screen captures of the same KML data being drawn in FalconView, Google Earth, and WEdge. Click on the image to see the full-size screen capture.
(Notice that the second image from FalconView is being shown on top of Open Street Map data, which is available as a base map in FalconView build 4.3.0.707, available from the FalconView web site.)
[[ Update: I forgot to mention that we're using Google's libkml to parse KML input. ]]
Wednesday, April 7, 2010
Building Mapnik on Windows
This is just a short note to folks who may be interested in building Mapnik on Windows. I've posted some detailed notes on the build steps here. Copies of the source code that I fetched to build with are in that same Sandbox folder (forgive me for making entire copies of source trees, but I wanted to have the exact versions that I built against in case we ever need them for debugging). I built under Visual Studio 2005, but it would probably be easy to adapt these notes to later versions of Visual Studio. (Thanks to Ben Moore whose notes from a few years ago were very valuable in the process.)
Thursday, April 1, 2010
FalconView 5.0 to Include PC Sensor Based Environmental Mapping
One of the most exciting features of FalconView 5.0 will be the inclusion of environmental mapping using components found on most laptop computers. Just like bats "see" their surroundings with SONAR, FalconView 5.0 will allow users to map their surroundings using high-frequency pulses emitted from the speakers. The echoes received by the PC microphone will be processed to create a map of PC surroundings. To complement this SONAR technology, 5.0 will include visual processing of surroundings through the laptop's built-in camera (multiple laptops and/or input devices can be linked to create a true 3D picture). The last important feature of the "Sensor Based Map Overlay" is the use of wireless networking cards to create RADAR images of the user's environment. Using advanced sensor-fusion technologies, all of these inputs will be combined to create a nearly perfect replica of the situational environment of the user, which can be visualized and saved via the FalconView overlay. We invite you to examine the technical white paper found here.
Monday, March 22, 2010
FalconView Symposium
[ Syndicated from the FalconView web site ]

The FalconView team will be hosting the first FalconView Symposium this Summer. This annual event will be held in Atlanta, Georgia, August 23-25. International attendees are welcome to attend.
GTRI will be presenting several sessions on FalconView integration best practices. There are trade offs for various possible integration scenarios. Our aim is to get the word out on what can be done, what should be done, and what is being done now. Are you planning a proposal for a FalconView tool? Let us help translate the requirements for you and see what others are doing.
The differences among the various FalconView versions out there will also be covered as well as how to move your tools forward into newer FalconView releases.
The floor is also open for speakers from the entire FalconView community. We want to hear what you would like FalconView to do for you!
Attendance is space-limited to the first 200 registrants so reserve your spot soon! Please sign up for information below. A small conference fee will be charged during registration (there is a discount for presenters!). We need to get a headcount so please indicate the likelihood of your attendance in your email.
[ See the FalconView web site for information on registration, presenting, and sponsorships. ]
Thursday, January 28, 2010
OGR Drivers for FalconView Data
Another engineer here at GTRI recently implemented OGR drivers for FalconView points files and drawing files. This will enable FalconView Common Data Architecture consumers (such as the Geodata overlay) to consume .lpt and .drw files and present them using the Common Data Architecture interfaces. This also means that third-parties now have an easy way of consuming .lpt and .drw data: you can build these drivers yourself (available under the terms of the LPGL), register them with OGR, and use OGR to read your FalconView data. The source code, currently in beta, is here. To register the drivers with OGR, you can use the OGR driver registrar. Georgia Tech may make other FalconView drivers for OGR, so stay tuned.
[[ Update: We've finished OGR drivers for drop zones and landing zones. They are in our source tree, but we don't have a build of these posted yet. ]]
[[ Update: We've finished OGR drivers for drop zones and landing zones. They are in our source tree, but we don't have a build of these posted yet. ]]
Wednesday, September 30, 2009
FalconView and General Aviation
Georgia Tech just got the green light for making FAA / NACO sectionals for FalconView available for free download. You can get them on the Downloads tab of the FalconView web site.As a commercial pilot, I'm interested in bringing the flight planning capabilities of FalconView to the general public. (I often use the software myself as an aid to preflight planning.) The main hindrance to this now is the availability of data on airports, navaids, waypoints and airspace. When I get a chance, I'll poke around some and see if I can find this data in a format that FalconView can read and that I won't go to jail for distributing. After that I'll post here a tutorial on ways that FalconView can be used as a flight-planning aid. In the meantime, I'd be glad to answer individual questions in the comments below. (There is also a thread in the discussion groups on the FalconView web site on using FalconView for general aviation.)
Keep a lookout on this blog for hints and tips that will help the general public use FalconView for the kinds of flight-planning tasks that our military has used it for for years.
[[ UPDATE: There is now a wiki page on the FalconView web site that should help pilots to get started with using FalconView for GA planning. ]]
Subscribe to:
Posts (Atom)

.png)








