<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-31165947082919804</id><updated>2011-10-28T11:22:28.667-04:00</updated><title type='text'>GIS Coder</title><subtitle type='html'>A blog about everything GIS...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>29</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-4269505742545364235</id><published>2011-06-15T12:12:00.001-04:00</published><updated>2011-06-15T12:12:46.878-04:00</updated><title type='text'>FalconView Comes to FOSS4G</title><content type='html'>&lt;a href="http://2011.foss4g.org/sessions/falconview-moving-dod-open-source"&gt;http://2011.foss4g.org/sessions/falconview-moving-dod-open-source&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-4269505742545364235?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/4269505742545364235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=4269505742545364235' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/4269505742545364235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/4269505742545364235'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2011/06/falconview-comes-to-foss4g.html' title='FalconView Comes to FOSS4G'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-6019302539961896633</id><published>2011-04-01T06:34:00.001-04:00</published><updated>2011-04-01T06:36:42.875-04:00</updated><title type='text'>FalconView Announces FalconView for Facebook</title><content type='html'>ATLANTA, GA - In an effort to bring a more social experience to the mission planning community, &lt;a href="http://www.falconview.org/trac/FalconView"&gt;FalconView&lt;/a&gt; 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.&lt;br /&gt;&lt;br /&gt;"The idea is to make mission planning more people-oriented, more social, and more fun," said FalconView program manager Chris Bailey. &amp;nbsp;"This will take us beyond just icons on a map. &amp;nbsp;FalconView for Facebook will add the human dimension to the experience. &amp;nbsp;Intelligence analysts who have long desired better integration between geospatial intelligence and human intelligence have their wish."&lt;br /&gt;&lt;br /&gt;One of the features of FalconView for Facebook is the ability to open a target's Facebook page from within the FalconView GUI. &amp;nbsp;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. &amp;nbsp;(Security concerns preclude us from posting the actual demonstration in this article.)&lt;br /&gt;&lt;br /&gt;Where could this project lead? &amp;nbsp;"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."&lt;br /&gt;&lt;br /&gt;More details about this project may be found &lt;a href="http://tinyurl.com/d27hvr"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-6019302539961896633?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/6019302539961896633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=6019302539961896633' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/6019302539961896633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/6019302539961896633'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2011/04/falconview-announces-falconview-for.html' title='FalconView Announces FalconView for Facebook'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-311549884974376655</id><published>2010-07-30T09:13:00.000-04:00</published><updated>2010-07-30T09:13:22.927-04:00</updated><title type='text'>2010 FalconView Symposium</title><content type='html'>This is just a reminder to sign up for the &lt;a href="http://www.falconview.org/trac/FalconView#FalconViewSymposium2010"&gt;2010 FalconView Symposium&lt;/a&gt;. &amp;nbsp;Yours truly will be presenting a session on &lt;a href="http://giscoder.blogspot.com/2008/03/integration-of-falconview-and-arcgis.html"&gt;ArcGIS integration with FalconView&lt;/a&gt; and the &lt;a href="http://giscoder.blogspot.com/2009/03/falconview-interoperability.html"&gt;FalconView Common Data Interfaces&lt;/a&gt;. &amp;nbsp;(Chris Bailey has stolen my topic of choice, which includes how to use FalconView with &lt;a href="http://giscoder.blogspot.com/2010/05/kml-in-falconview-43.html"&gt;KML&lt;/a&gt; and Web Services.) &amp;nbsp;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 &lt;a href="http://giscoder.blogspot.com/2010/05/kml-in-falconview-43.html"&gt;full FalconView course&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-311549884974376655?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/311549884974376655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=311549884974376655' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/311549884974376655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/311549884974376655'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2010/07/2010-falconview-symposium.html' title='2010 FalconView Symposium'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-4946200244931964427</id><published>2010-06-25T07:59:00.000-04:00</published><updated>2010-06-25T07:59:44.812-04:00</updated><title type='text'>Open Street Maps in FalconView</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;I thought this was too neat not to share. &amp;nbsp;Here is a sample of the new&amp;nbsp;&lt;a href="http://www.openstreetmap.org/"&gt;Open Street Map&lt;/a&gt; base map type drawn in &lt;a href="http://www.falconview.org/"&gt;FalconView 4.3.0.707&lt;/a&gt;. &amp;nbsp;(Note that the red line is a route being drawn from a KML file.)&lt;div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_-qSzNjsg2KI/TCSZlwFWwJI/AAAAAAAACVY/Wv1UYxcq-UQ/s1600/Latest+XP+Clean-2010-06-25-07-56-48.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="500" src="http://4.bp.blogspot.com/_-qSzNjsg2KI/TCSZlwFWwJI/AAAAAAAACVY/Wv1UYxcq-UQ/s640/Latest+XP+Clean-2010-06-25-07-56-48.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-4946200244931964427?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/4946200244931964427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=4946200244931964427' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/4946200244931964427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/4946200244931964427'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2010/06/open-street-maps-in-falconview.html' title='Open Street Maps in FalconView'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_-qSzNjsg2KI/TCSZlwFWwJI/AAAAAAAACVY/Wv1UYxcq-UQ/s72-c/Latest+XP+Clean-2010-06-25-07-56-48.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-1428072361302328630</id><published>2010-06-17T12:00:00.000-04:00</published><updated>2010-06-17T12:00:40.127-04:00</updated><title type='text'>FalconView for Linux</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_-qSzNjsg2KI/TBpGhUIwycI/AAAAAAAACU0/9wpuM7fGaXA/s1600/fvlinux.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="310" src="http://2.bp.blogspot.com/_-qSzNjsg2KI/TBpGhUIwycI/AAAAAAAACU0/9wpuM7fGaXA/s400/fvlinux.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;Developed over 15 years ago, the first version of FalconView was designed to run on PC DOS. &amp;nbsp;FalconView 2.0 for Windows 3.1 appeared shortly thereafter and, since then, FalconView has been an exclusively Windows-based application. &amp;nbsp;Now, thanks to internal funding by Georgia Tech, a Linux-based version of FalconView is running in the development labs at Georgia Tech. &amp;nbsp;The goal is to create a cross-platform code base for FalconView. &amp;nbsp;This will allow FalconView to run in multiple operating systems, like Linux or VxWorks and to support desktop, portable, embedded and mobile devices. &amp;nbsp;This experimental version currently includes support for the various base map types, the Points Overlay and GPS trails (with more features to come). &amp;nbsp;Map management is currently performed by the desktop version of FalconView feeding a cross-platform SQLite database for map coverage support. &amp;nbsp;Georgia Tech hopes to obtain sponsor funding to bring other features to the cross-platform version of FalconView. &amp;nbsp;Stay tuned for further developments in this area.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-1428072361302328630?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/1428072361302328630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=1428072361302328630' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/1428072361302328630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/1428072361302328630'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2010/06/falconview-for-linux.html' title='FalconView for Linux'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_-qSzNjsg2KI/TBpGhUIwycI/AAAAAAAACU0/9wpuM7fGaXA/s72-c/fvlinux.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-5269694729361313117</id><published>2010-06-10T11:01:00.000-04:00</published><updated>2010-06-10T11:01:02.647-04:00</updated><title type='text'>FalconView 4.3 Renamed to FalconView 4.2.1</title><content type='html'>At the request of it's major sponsors, Georgia Tech is renaming FalconView 4.3 to FalconView 4.2.1. &amp;nbsp;Sorry for the confusion.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-5269694729361313117?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/5269694729361313117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=5269694729361313117' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/5269694729361313117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/5269694729361313117'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2010/06/falconview-43-renamed-to-falconview-421.html' title='FalconView 4.3 Renamed to FalconView 4.2.1'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-4488759882766817273</id><published>2010-05-14T07:02:00.001-04:00</published><updated>2010-05-14T09:28:46.248-04:00</updated><title type='text'>KML in FalconView 4.3</title><content type='html'>I'm a fan of Google Earth: having used a handful of 3D map viewers, I've found that GE is hard to beat. &amp;nbsp;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. &amp;nbsp;&lt;a href="http://www.falconview.org/"&gt;FalconView 4.3&lt;/a&gt; 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. &amp;nbsp;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). &amp;nbsp;Here are a few screen captures of the same KML data being drawn in FalconView, Google Earth, and &lt;a href="http://wedge.hpc.mil/"&gt;WEdge&lt;/a&gt;. &amp;nbsp;Click on the image to see the full-size screen capture.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_-qSzNjsg2KI/S-0sqv8j3sI/AAAAAAAACSk/oQV-1Qx5dwk/s1600/FV_GNC_w_GA_Weather.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="250" src="http://1.bp.blogspot.com/_-qSzNjsg2KI/S-0sqv8j3sI/AAAAAAAACSk/oQV-1Qx5dwk/s400/FV_GNC_w_GA_Weather.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_-qSzNjsg2KI/S-0s134u2KI/AAAAAAAACSs/IOsGqnHkQGc/s1600/Google_w_GA_Weather.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_-qSzNjsg2KI/S-0s134u2KI/AAAAAAAACSs/IOsGqnHkQGc/s320/Google_w_GA_Weather.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_-qSzNjsg2KI/S-0s6xifkxI/AAAAAAAACS0/HDwuhL-keM0/s1600/FV_OSM_w_GA_Weather.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_-qSzNjsg2KI/S-0s6xifkxI/AAAAAAAACS0/HDwuhL-keM0/s320/FV_OSM_w_GA_Weather.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_-qSzNjsg2KI/S-0s-1ytm-I/AAAAAAAACS8/NXHuqHs9vgI/s1600/wedge_w_GA_Weather.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_-qSzNjsg2KI/S-0s-1ytm-I/AAAAAAAACS8/NXHuqHs9vgI/s320/wedge_w_GA_Weather.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(Notice that the second image from FalconView is being shown on top of &lt;a href="http://www.openstreetmap.org/"&gt;Open Street Map&lt;/a&gt; data, which is available as a base map in FalconView build 4.3.0.707, available from the FalconView web site.)&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;[[ Update: I forgot to mention that we're using Google's &lt;a href="http://code.google.com/p/libkml/"&gt;libkml&lt;/a&gt; to parse KML input. ]]&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-4488759882766817273?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/4488759882766817273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=4488759882766817273' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/4488759882766817273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/4488759882766817273'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2010/05/kml-in-falconview-43.html' title='KML in FalconView 4.3'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_-qSzNjsg2KI/S-0sqv8j3sI/AAAAAAAACSk/oQV-1Qx5dwk/s72-c/FV_GNC_w_GA_Weather.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-9174352084631543367</id><published>2010-04-07T11:12:00.000-04:00</published><updated>2010-04-07T11:12:19.181-04:00</updated><title type='text'>Building Mapnik on Windows</title><content type='html'>This is just a short note to folks who may be interested in building &lt;a href="http://mapnik.org/"&gt;Mapnik&lt;/a&gt; on Windows. &amp;nbsp;I've posted some detailed notes on the build steps &lt;a href="http://www.falconview.org/trac/FalconView/browser/Sandbox/MAPNIK%20README.txt?rev=2479"&gt;here&lt;/a&gt;. &amp;nbsp;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). &amp;nbsp; I built under Visual Studio 2005, but it would probably be easy to adapt these notes to later versions of Visual Studio. &amp;nbsp;(Thanks to Ben Moore whose notes from a few years ago were very valuable in the process.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-9174352084631543367?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/9174352084631543367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=9174352084631543367' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/9174352084631543367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/9174352084631543367'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2010/04/building-mapnik-on-windows.html' title='Building Mapnik on Windows'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-5043314623033075485</id><published>2010-04-01T06:28:00.000-04:00</published><updated>2010-04-01T06:28:46.017-04:00</updated><title type='text'>FalconView 5.0 to Include PC Sensor Based Environmental Mapping</title><content type='html'>One of the most exciting features of FalconView 5.0 will be the inclusion of environmental mapping using components found on most laptop computers. &amp;nbsp;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. &amp;nbsp;The echoes received by the PC microphone will be processed to create a map of PC surroundings. &amp;nbsp;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). &amp;nbsp;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. &amp;nbsp;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. &amp;nbsp;We invite you to examine the technical white paper found &lt;a href="http://en.wikipedia.org/wiki/April_Fools'_Day"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-5043314623033075485?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/5043314623033075485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=5043314623033075485' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/5043314623033075485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/5043314623033075485'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2010/04/falconview-50-to-include-pc-sensor.html' title='FalconView 5.0 to Include PC Sensor Based Environmental Mapping'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-262962445813162813</id><published>2010-03-22T10:34:00.004-04:00</published><updated>2010-03-22T10:43:41.515-04:00</updated><title type='text'>FalconView Symposium</title><content type='html'>[ Syndicated from the &lt;a href="http://www.falconview.org/"&gt;FalconView web site&lt;/a&gt; ]&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_-qSzNjsg2KI/S6eBSlCj_sI/AAAAAAAACP8/Ec4A1Jq9GJc/s1600-h/FVS_2010_logo_small.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 196px;" src="http://3.bp.blogspot.com/_-qSzNjsg2KI/S6eBSlCj_sI/AAAAAAAACP8/Ec4A1Jq9GJc/s320/FVS_2010_logo_small.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5451468030135762626" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;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.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[ See the &lt;a href="http://www.falconview.org/"&gt;FalconView web site&lt;/a&gt; for information on registration, presenting, and sponsorships. ]&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-262962445813162813?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/262962445813162813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=262962445813162813' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/262962445813162813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/262962445813162813'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2010/03/falconview-symposium.html' title='FalconView Symposium'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_-qSzNjsg2KI/S6eBSlCj_sI/AAAAAAAACP8/Ec4A1Jq9GJc/s72-c/FVS_2010_logo_small.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-8860068242822077781</id><published>2010-01-28T13:57:00.003-05:00</published><updated>2010-05-14T09:31:35.324-04:00</updated><title type='text'>OGR Drivers for FalconView Data</title><content type='html'>Another engineer here at GTRI recently implemented &lt;a href="http://www.gdal.org/ogr/"&gt;OGR&lt;/a&gt; drivers for FalconView points files and drawing files.  This will enable FalconView &lt;a href="http://giscoder.blogspot.com/2009/03/falconview-interoperability.html"&gt;Common Data Architecture&lt;/a&gt; consumers (such as the Geodata overlay) to consume .lpt and .drw files and present them using the &lt;a href="http://www.falconview.org/trac/FalconView/browser/FalconView/trunk/public/fvw_core/CustomInterfaces/FVDataSourcesInterfaces.idl"&gt;Common Data Architecture interfaces&lt;/a&gt;.  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 &lt;a href="http://www.falconview.org/trac/FalconView/browser/FalconView/trunk/public/fvw_core/FvOverlayOGRDriver"&gt;here&lt;/a&gt;.  To register the drivers with OGR, you can use the &lt;a href="http://www.gdal.org/ogr/classOGRSFDriverRegistrar.html"&gt;OGR driver registrar&lt;/a&gt;.  Georgia Tech may make other FalconView drivers for OGR, so stay tuned.&lt;br /&gt;&lt;br /&gt;[[ Update: We've finished OGR drivers for drop zones and landing zones. &amp;nbsp;They are in our source tree, but we don't have a build of these posted yet. ]]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-8860068242822077781?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/8860068242822077781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=8860068242822077781' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/8860068242822077781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/8860068242822077781'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2010/01/ogr-drivers-for-falconview-data.html' title='OGR Drivers for FalconView Data'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-6203258946427410594</id><published>2009-09-30T07:36:00.006-04:00</published><updated>2009-12-03T14:45:45.777-05:00</updated><title type='text'>FalconView and General Aviation</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-qSzNjsg2KI/SsNEUGmwGzI/AAAAAAAACC8/gpTxC3Qgc48/s1600-h/atl_sectional.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 245px;" src="http://2.bp.blogspot.com/_-qSzNjsg2KI/SsNEUGmwGzI/AAAAAAAACC8/gpTxC3Qgc48/s320/atl_sectional.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5387224691426466610" /&gt;&lt;/a&gt;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 &lt;a href="http://www.falconview.org/"&gt;FalconView web site&lt;/a&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[[ UPDATE:  There is now a &lt;a href="http://www.falconview.org/trac/FalconView/wiki/FalconViewForGeneralAviation"&gt;wiki page on the FalconView web site&lt;/a&gt; that should help pilots to get started with using FalconView for GA planning. ]]&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-6203258946427410594?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/6203258946427410594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=6203258946427410594' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/6203258946427410594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/6203258946427410594'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2009/09/falconview-and-general-aviation.html' title='FalconView and General Aviation'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_-qSzNjsg2KI/SsNEUGmwGzI/AAAAAAAACC8/gpTxC3Qgc48/s72-c/atl_sectional.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-7206346553043559693</id><published>2009-07-29T08:50:00.002-04:00</published><updated>2009-07-29T08:54:03.273-04:00</updated><title type='text'>Military Open Source Software Working Group Will Meet Aug. 12-13</title><content type='html'>&lt;div&gt;ATLANTA -- The initial gathering of the Military Open Source Software (Mil-OSS) Working Group will take place here on Aug. 12 and 13 at the Georgia Tech Research Institute (GTRI) Conference Center. The group will discuss the role of open source software for military applications. This non-classified event is open to all interested parties.  "People concerned with the future of open source software for the military are sure to find this meeting quite interesting," said Joshua L. Davis, a GTRI research scientist who is coordinating the gathering.  "This is the working group’s first meeting, and our intention is to hold future meetings of this group every six months."&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Keynote addresses will be given by Daniel Risacher, associate director of Information Policy and Integration, DoD CIO, and by Major James D. Neushul, I-MEF Future Operations, Commo / IMO.  Risacher will speak on "Open Source and the U.S. Department of Defense"; Neushul’s talk is titled "Keep It Stupid Stupid: The KISS Principle for DoD Acquisitions."&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Organizers plan an open agenda, with some 18 presentations scheduled thus far.  In addition, there will be three tracks -- Geospatial OSS Projects, General OSS Projects, and Miscellaneous Topics.  Registration cost for the gathering is $325 for attendees, $250 for speakers, and $100 for students, and special hotel arrangements are available.  For complete information on registration, attendance and other topics, visit &lt;a href="http://www.mil-oss.org/"&gt;http://www.mil-oss.org/&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[[ Yes, FalconView will be there! ]]&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-7206346553043559693?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/7206346553043559693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=7206346553043559693' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/7206346553043559693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/7206346553043559693'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2009/07/military-open-source-software-working.html' title='Military Open Source Software Working Group Will Meet Aug. 12-13'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-2312947225643234065</id><published>2009-06-27T15:28:00.004-04:00</published><updated>2009-06-27T15:42:44.906-04:00</updated><title type='text'>FalconView Open Source Hits the Web</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh5.ggpht.com/_-qSzNjsg2KI/SkZyn9u7yNI/AAAAAAAACAk/muhRFmiIL7c/s400/splash.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 400px; height: 245px;" src="http://lh5.ggpht.com/_-qSzNjsg2KI/SkZyn9u7yNI/AAAAAAAACAk/muhRFmiIL7c/s400/splash.png" border="0" alt="" /&gt;&lt;/a&gt;Not only has Georgia Tech published the source code for FalconView 4.3, but we have also published Windows installer binaries for the full application.  All of this and more can be found on the &lt;a href="http://www.falconview.org/"&gt;FalconView web site&lt;/a&gt;.  Please keep in mind that FalconView 4.3 is still young.  We haven't even reached the beta stage because we're still polishing features that will appear in 4.3.  The current build is suitable for developers and for folks who want to evaluate the application.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are a handful of features for FalconView that should make it useful for the general public.  We still support Shapefiles, GeoTIFF, and other popular GIS formats.  We have the drawing overlay and the analysis tools for making your maps more useful.  Also, we now support Google Earth KML / KMZ and Web Mapping Servers.  A list of features, along with screen captures can be found &lt;a href="http://www.falconview.org/trac/FalconView/wiki/OpenSourceFeatures"&gt;here&lt;/a&gt;.  Oh, and did I mention that my prized &lt;a href="http://giscoder.blogspot.com/2008/03/integration-of-falconview-and-arcgis.html"&gt;GIS Editor&lt;/a&gt; along with its source code is included?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Feel free to contribute to the project by writing plugin extensions for FalconView or by submitting improvements to Georgia Tech.  The SDK is available on the web site along with a handful of other developer resources and examples.  I'm usually glad to answer quick question for someone interested in coding for FalconView.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Download it and take it for a spin; just treat it gently while we work out the kinks.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-2312947225643234065?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/2312947225643234065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=2312947225643234065' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/2312947225643234065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/2312947225643234065'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2009/06/falconview-open-source-hits-web.html' title='FalconView Open Source Hits the Web'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_-qSzNjsg2KI/SkZyn9u7yNI/AAAAAAAACAk/muhRFmiIL7c/s72-c/splash.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-5710804437133123857</id><published>2009-03-12T14:16:00.004-04:00</published><updated>2009-03-12T14:21:49.479-04:00</updated><title type='text'>FalconView Interoperability</title><content type='html'>&lt;div&gt;As I've mentioned here before, a version of FalconView will soon be released to the general public as open-source software.  This is exciting to me not only because the public will be able to contribute to the FalconView code base, but also because the public will be able to download, install and use FalconView.  FalconView scales through charts and images better than any other GIS software I've tried, so I'm expecting that we will see widespread use beyond the our traditional defense community.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Some products do better than FalconView at some GIS tasks: Google Earth is an excellent tool for presenting 3D imagery; ArcGIS is the leading general-purpose GIS tool for advanced GIS users; Quantum GIS makes it easy to connect to PostGIS.  FalconView started in the early 1990s before industry GIS standards were mature.  Because FalconView development has been tailored to government needs, FalconView doesn't do a great job of interoperating with other GIS products.  With the FalconView open-source release, Georgia Tech hopes to change this.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://4.bp.blogspot.com/_-qSzNjsg2KI/SblSfWZTsgI/AAAAAAAAB98/-FYCqrI-DkA/s320/interfaces.png" style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 307px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5312367934001361410" /&gt;&lt;div&gt;The public version of FalconView 4.3 will include a new common data architecture that more closely aligns FalconView with the industry standards published by the Open Geospatial Consortium.  The data architecture arranges data sources in a format that will be familiar to ArcGIS and OGR users: data sources contain data sets, data sets contain features, and features have a geometry and fields.  Geometries are defined per the OGC simple features specification.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The point of this common data architecture is interoperability.  Using the architecture prototypes Georgia Tech has already demonstrated interoperability with PostGIS, WMS, KML and a few other formats.  The KML functionality will be released with FalconView 4.3, and support for some other formats - WMS for one - will likely be included with other formats forthcoming.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is exciting stuff.  Hopefully we can continue to improve FalconView's interoperability with industry standards so that the product becomes a useful tool for a wide range of GIS applications.  &lt;a href="http://joelodom.googlepages.com/GeodataOverlayTechnology.pptx"&gt;Here is a link to a slide show&lt;/a&gt; that we recently gave to the government to describe what we're doing.  I'm sorry that the slides don't stand too well on their own, but hopefully they get the point across.  If some of our architecture looks familiar, that's good: we're aligning with paradigms that experienced GIS users, analysts and developers are already familiar with.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-5710804437133123857?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/5710804437133123857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=5710804437133123857' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/5710804437133123857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/5710804437133123857'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2009/03/falconview-interoperability.html' title='FalconView Interoperability'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_-qSzNjsg2KI/SblSfWZTsgI/AAAAAAAAB98/-FYCqrI-DkA/s72-c/interfaces.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-9112203800408682433</id><published>2009-02-13T13:21:00.001-05:00</published><updated>2009-02-13T13:23:22.824-05:00</updated><title type='text'>New FalconView Web Site</title><content type='html'>In preperation for the upcoming FalconView open source release, Georgia Tech has launched a new web site for the FalconView project.  The new web site pulls together the main web site at falconview.org, as well as the developer wiki.  Check it out &lt;a href="http://www.falconview.org/"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-9112203800408682433?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/9112203800408682433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=9112203800408682433' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/9112203800408682433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/9112203800408682433'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2009/02/new-falconview-web-site.html' title='New FalconView Web Site'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-4801416562537545047</id><published>2008-11-03T11:31:00.006-05:00</published><updated>2008-11-03T12:18:39.211-05:00</updated><title type='text'>Installing FalconView Client Editors</title><content type='html'>As discussed in the &lt;a href="http://wiki.falconview.org/"&gt;FalconView SDK&lt;/a&gt;, in order to install FalconView client editors, it is necessary to add an entry to the client editors registry key (under "HKLM\Software\PFPS\FalconView\Client Editors").  The trick with installing a client editor key is that the installer must determine which client editor number to use for the key.  I recently wrote a new FalconView overlay in C# .NET and thought I'd share some steps that other developers may find useful for installing FalconView overlays.  (I'm working in Visual Studio 2005, so the steps below are for that version.  These steps are somewhat broad as I assume that the developer is experienced enough to fill in some of the details.  I also assume that the overlay is being written in .NET as this example uses all .NET classes and assemblies.)&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;1.  Create a new Setup Project Using Visual Studio and Add Your Binaries to the Setup&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'll leave most of this work to the reader as this post is not meant to address this part of the setup.  Suffice it to say that you add your project outputs to a new setup project in a conventional fashion so that they get installed to the desired location on the user's PC.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;2.  Add an Installer Class to Your Output Assembly&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;An installer class derives from System.Configuration.Install.Installer.  Installer classes have a number of methods that you can override in order to execute steps at certain points during an install.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;3.  Add Code to Your Installer Class to Register Your Assembly for COM&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;FalconView uses COM to communicate with all its client editors.  This function is a short sample that shows how you can add a method to your installer class that will register your assembly for COM so that FalconView can find your overlay class.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;private void RegisterAssembly(string assemblyFile)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;  Assembly assembly = Assembly.LoadFrom(assemblyFile);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;  new RegistrationServices().RegisterAssembly(assembly,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;     AssemblyRegistrationFlags.SetCodeBase);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;4. Add Code to Your Installer Class to Set the Client Editor Key&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's the meat of this post.  The following method sets the client editor key so that your overlay becomes visible to FalconView.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;private void InstallClientEditorKey(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   string classIdString, int interfaceVersion, bool isStaticOverlay)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   // get the FalconView client editors key&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   RegistryKey clientEditorsKey = &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;      Registry.LocalMachine.OpenSubKey(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;      @"SOFTWARE\PFPS\FalconView\Client Editors", true);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   // create a list of taken client editor numbers&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   List&lt;/span&gt;&lt;/span&gt;&lt;int&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt; listTakenNumbers = new List&lt;/span&gt;&lt;/span&gt;&lt;int&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/int&gt;&lt;/int&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   string[] subKeys = clientEditorsKey.GetSubKeyNames();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   foreach (string subKeyName in subKeys)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;      try&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;      {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;         listTakenNumbers.Add(Int32.Parse(subKeyName));&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;      }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;      catch (Exception) { } // probably just a key that isn't an integer&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   // find the first available client editor number&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   int iFirstAvailable = 0;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   while (listTakenNumbers.Contains(iFirstAvailable))&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;      iFirstAvailable++;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   // create the client editor key&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   RegistryKey overlayKey = &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;      clientEditorsKey.CreateSubKey(iFirstAvailable.ToString());&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   // create the values&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   overlayKey.SetValue("classIdString", classIdString,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;      RegistryValueKind.String);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   overlayKey.SetValue("interfaceVersion", interfaceVersion,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;      RegistryValueKind.DWord);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   overlayKey.SetValue("isStaticOverlay",&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;      isStaticOverlay ? 1 : 0, RegistryValueKind.DWord);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   // clean up&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   overlayKey.Close();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   clientEditorsKey.Close();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;5. Call Your Methods From an Overridden Method in Your Installer Class&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I choose to override the Install method on the installer class.  (For more documentiontation on Installer classes, consult MSDN.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;public override void Install(IDictionary stateSaver)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   try&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;      base.Install(stateSaver);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;      // register the assembly for COM&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;      RegisterAssembly(Context.Parameters["assemblypath"]);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;      // install the FalconView client editor key&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;      InstallClientEditorKey("Server.Overlay", 3, true);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   catch (Exception ex)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;      MessageBox.Show(ex.Message,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;         "Install Failed", MessageBoxButtons.OK,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;         MessageBoxIcon.Error);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Note the use of Context.Parameters above.  This dictionary is how all of the install parameters are passed into an Installer class by the installer.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;6. Add the Custom Action to Your Setup Project&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When you add the custom action, you will need to specify the entry point for the action.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://3.bp.blogspot.com/_-qSzNjsg2KI/SQ8wgXdUizI/AAAAAAAABdc/2DLqV57WIR4/s400/image001.jpg" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 311px; height: 123px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5264479822030342962" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This screen capture shows where to set the EntryPoint property on the custom action.  When your install reaches the custom action, it will call into your Installer class and execute the actions there.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You could add additional logic to your install, such as checking to make sure the overlay isn't already installed and adding uninstall steps, but I'll leave that as an exercise for the reader.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-4801416562537545047?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/4801416562537545047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=4801416562537545047' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/4801416562537545047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/4801416562537545047'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2008/11/installing-falconview-client-editors.html' title='Installing FalconView Client Editors'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_-qSzNjsg2KI/SQ8wgXdUizI/AAAAAAAABdc/2DLqV57WIR4/s72-c/image001.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-2212539979312126706</id><published>2008-10-28T15:30:00.005-04:00</published><updated>2008-11-05T11:09:22.863-05:00</updated><title type='text'>Compiling libkml on Windows</title><content type='html'>Just a quick hint here for anyone searching for information on compiling libkml under Visual Studio.  Version 0.4, which I just downloaded, won't compile the libkmlbase project unless you make a small modification to time_util.cc.  Just change the order of the includes so that the winsock2.h include comes &lt;span class="Apple-style-span" style="font-style: italic;"&gt;before&lt;/span&gt; the windows.h include.  If you don't, you will get compiler errors such as, "error C2011: 'fd_set' : 'struct' type redefinition."&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[[ UPDATE: Apparently there are other problems with using libkml in Windows.  I just came across a linker issue where the symbol IsIconParent was undefined.  To solve this problem, I had to add get_link_parents.cc and get_link_parents.h to the libkmlengine project and recompile. ]]&lt;br /&gt;&lt;br /&gt;[[ UPDATE 5 Nov. 08: Both of these issues have been corrected as of version 0.5. ]]&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-2212539979312126706?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/2212539979312126706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=2212539979312126706' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/2212539979312126706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/2212539979312126706'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2008/10/compiling-libkml-on-windows.html' title='Compiling libkml on Windows'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-8710318132996176341</id><published>2008-10-16T07:41:00.002-04:00</published><updated>2008-10-16T07:52:06.445-04:00</updated><title type='text'>FalconView Open Source</title><content type='html'>Beginning with FalconView 4.3, FalconView will become an open source product.  Georgia Tech will distribute the code to FalconView to the general public, and installable binaries will be available.  The open source effort will include the main FalconView application and most of the overlays that come packaged with FalconView.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In order to accomplish this effort, we are reworking major parts of the FalconView architucture.  Historically, FalconView has included a standard set of overlays that built-in to the executible software and a set of "plug-in" overlays that may or may not be installed with FalconView.  Because some of the overlays are export-sensitive, all of the overlays for FalconView 4.3 will be pulled out and made into plug-in overlays.  This architecture will allow us to distribute a version of FalconView for the general public and a version of FalconView for the government.  The versions will be identical, except that the government version will include the threat overlay, the tactical graphics overlay, and some other components not available to the general public.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The FalconView team is excited about this effort.  We feel a great sense of ownership in our work and will be very glad to make the product available to a wider user base.  I'd expect that public betas of FalconView 4.3 will start hitting the internet sometime in the first half of 2009.  Stay tuned as for more news as events unfold.  Feel free to contact me for more details.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-8710318132996176341?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/8710318132996176341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=8710318132996176341' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/8710318132996176341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/8710318132996176341'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2008/10/falconview-open-source.html' title='FalconView Open Source'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-303152460364225685</id><published>2008-08-20T17:04:00.002-04:00</published><updated>2008-08-20T17:08:39.129-04:00</updated><title type='text'>Geoprocessing in FalconView Using ArcGIS</title><content type='html'>I recently presented &lt;a href="http://joelodom.googlepages.com/GeoprocessinginFalconViewUsingArcGIS.pdf"&gt;this paper&lt;/a&gt; at the 2008 ESRI User's Conference in San Diego.  It's about much of what I've discussed on this blog recently, with some added technical details.  &lt;a href="http://docs.google.com/Presentation?id=ddjtsc48_660gtqm6zgb"&gt;Here&lt;/a&gt; are the slides from the presentation, in case you missed it.&lt;br /&gt;&lt;br /&gt;[[ Note that the slides were originally generated in PowerPoint.  I've uploaded them to Google for publication on the web.  Some of the formating is a bit off, but they should get the point across. ]]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-303152460364225685?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/303152460364225685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=303152460364225685' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/303152460364225685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/303152460364225685'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2008/08/geoprocessing-in-falconview-using.html' title='Geoprocessing in FalconView Using ArcGIS'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-807536719938819783</id><published>2008-07-25T06:53:00.003-04:00</published><updated>2008-07-25T07:05:06.340-04:00</updated><title type='text'>FalconView / ArcGIS 9.3 Compatibility Testing</title><content type='html'>I've just finished testing the FalconView GIS Overlay with ArcGIS 9.3 and I'm pleased to say that the testing went off without so much as a bump.&lt;br /&gt;&lt;br /&gt;When we moved from ArcGIS 9.1 to 9.2, I found several incompatibilities in the FalconView 4.1 GIS Overlay that prevented FalconView 4.1 from working with ArcGIS 9.2.  ESRI had changed the behavior of some of their objects so that we had to rewrite parts of our software to make it work with their new version.  In my opinion, this loss of backwards compatibility moving between minor versions was a failure on the part of ESRI software engineering.  This time, though, they seem to have gotten everything exactly right.  Way to go, ESRI.&lt;br /&gt;&lt;br /&gt;I'm very pleased that Georgia Tech will be releasing a version of FalconView 4.1 that is compatible with ArcGIS 9.1, 9.2 &lt;span style="font-style: italic;"&gt;and&lt;/span&gt; 9.3.  FalconView 4.2 will include compatibility with ArcGIS 9.2 and 9.3.  For more information on these FalconView enhancements, &lt;a href="mailto:joel.odom@gtri.gatech.edu"&gt;e-mail me&lt;/a&gt; directly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-807536719938819783?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/807536719938819783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=807536719938819783' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/807536719938819783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/807536719938819783'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2008/07/falconview-arcgis-93-compatibility.html' title='FalconView / ArcGIS 9.3 Compatibility Testing'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-6251842089463248683</id><published>2008-06-25T10:57:00.002-04:00</published><updated>2008-06-25T11:04:58.005-04:00</updated><title type='text'>Using FalconView Geoprocessing to Find Communications Sites</title><content type='html'>This upcoming weekend is a special weekend for the amateur radio community.  Field day (which would better be called Field Days) is a time when ham radio operators go outdoors to set up temporary communications stations to practice emergency communications preparedness and to have a fun educational and relational experience doing it.&lt;br /&gt;&lt;br /&gt;I'm going to dust off my radio license (W4LL) this field day and hit the air with a friend in Colorado.  We talked about several possible sites around the Boulder area where we could set up.  One near the top of our list was Rocky Mountain National Park.  Since there is a plethora of GIS data available for national parks, I decided to load some into FalconView and see if I could use it to help pick a site for us.&lt;br /&gt;&lt;br /&gt;Here are some of the things we wanted in a site:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Within the park.&lt;/li&gt;&lt;li&gt;At a moderate altitude (not too high, not in a valley).&lt;/li&gt;&lt;li&gt;Near a road so we wouldn't have to hike too far with our gear.&lt;/li&gt;&lt;li&gt;On an area with level slope.&lt;/li&gt;&lt;li&gt;An area with a good view of the sky (for radio propagation).&lt;/li&gt;&lt;li&gt;Near a river or stream, if possible.&lt;/li&gt;&lt;/ol&gt;I loaded Colorado terrain data, RMNP road, stream, trail and border data and went to work.  The simple way to do this kind of analysis is to make a group of raster data sets and score them based on a weighting of the criteria above.  Adding all the scores together gives you an overall raster that scores the various terrains.&lt;br /&gt;&lt;br /&gt;I won't go into too much detail here, but the ArcGIS analysis tools integrated into FalconView performed well for the task.  The reclassify tool was used to score the terrain raster for altitude, the slope tool was used to get slopes from the terrain raster, the Euclidean distance tool was used for road and stream proximity data.  Once some camp sites were picked out, the view shed tool was used to determine the sky visibility from the raster.&lt;br /&gt;&lt;br /&gt;The first picture below shows some of the outputs from the aforementioned tools drawn in FalconView.  The colors are so ugly because they represent a mosaic of different outputs which a human must interpret through careful visual analysis.  (Honestly, without the table of contents, which shows up on the GIS Editor, the colors aren't very meaningful.)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://joelodom.googlepages.com/fv_colorado.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://joelodom.googlepages.com/fv_colorado.png" alt="" border="0" /&gt;&lt;/a&gt;The next picture shows just a camp site of interest, view shed, and terrain data, all drawn in the FalconView ArcGIS Editor.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://joelodom.googlepages.com/gis_colorado.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://joelodom.googlepages.com/gis_colorado.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-6251842089463248683?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/6251842089463248683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=6251842089463248683' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/6251842089463248683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/6251842089463248683'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2008/06/using-falconview-geoprocessing-to-find.html' title='Using FalconView Geoprocessing to Find Communications Sites'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-1427720062139472304</id><published>2008-05-23T08:32:00.001-04:00</published><updated>2008-05-23T08:33:25.896-04:00</updated><title type='text'>Ensuring Release of COM Objects in a .NET FalconView Plugin</title><content type='html'>As any experienced FalconView developer knows, FalconView relies on Microsoft COM technology for our plugin APIs.  To write a FalconView plugin, you implement a member of the ILayerEditor interface family and update the registry to tell FalconView the class to instantiate for the plugin.  It's not hard to do once you've seen it done once.  The &lt;a href="http://wiki.falconview.org/"&gt;FalconView wiki&lt;/a&gt; has a wealth of information on writing plugins.&lt;br /&gt;&lt;br /&gt;FalconView 4.1, which is just now hitting the streets, includes the first .NET components ever to ship along with FalconView, including the 4.1 ArcGIS overlay.  When I wrote the GIS overlay for FalconView 4.1, I discovered that the stack would become corrupted whenever .NET did its garbage collection.  This would lead to instability which eventually made really bad things happen, such as FalconView disappearing from under a user's nose (one exception you may see is ReportAvOnComRelease).  After some research, we discovered that this was because .NET was trying to garbage collect COM objects that had already fallen out of scope in FalconView.  The trick to fixing the problem - and if you're writing a .NET plugin for FalconView 4.1 this is very important to pay attention to - is to release explicitly the FalconView COM objects once you're finished with them.  The following code block, by making use of finally clauses, provides an example of how to ensure the release of your COM objects, even if your routine exits early via a premature return statement or an exception.  (See the &lt;a href="http://wiki.falconview.org/wiki/bin/view/FVDev/DotNetDev"&gt;Hello World example&lt;/a&gt; on the wiki for the full project containing this example.)&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="background-color: rgb(180, 180, 200);"&gt;&lt;pre&gt;public void OnDraw(int layer_handle, object pActiveMapProj, int bDrawBeforeLayerObjects)&lt;br /&gt;{&lt;br /&gt; try&lt;br /&gt; {&lt;br /&gt;    if (bDrawBeforeLayerObjects == 1)&lt;br /&gt;    {&lt;br /&gt;       IActiveMapProj pActiveMap = (IActiveMapProj)pActiveMapProj;&lt;br /&gt;&lt;br /&gt;       try&lt;br /&gt;       {&lt;br /&gt;          ISettableMapProj pSettableMapProj;&lt;br /&gt;          pActiveMap.GetSettableMapProj(out pSettableMapProj);&lt;br /&gt;&lt;br /&gt;          if (pSettableMapProj != null)&lt;br /&gt;          {&lt;br /&gt;             try&lt;br /&gt;             {&lt;br /&gt;                IGraphicsContext pGraphicsContext;&lt;br /&gt;                pActiveMap.GetGraphicsContext(out pGraphicsContext);&lt;br /&gt;&lt;br /&gt;                if (pGraphicsContext != null)&lt;br /&gt;                {&lt;br /&gt;                   try&lt;br /&gt;                   {&lt;br /&gt;                      &lt;span style="color: rgb(255, 0, 0);"&gt;// ... Draw Here ...&lt;/span&gt;&lt;br /&gt;                   }&lt;br /&gt;                   finally&lt;br /&gt;                   {&lt;br /&gt;                      Marshal.ReleaseComObject(pGraphicsContext);&lt;br /&gt;                   }&lt;br /&gt;                }&lt;br /&gt;             }&lt;br /&gt;             finally&lt;br /&gt;             {&lt;br /&gt;                Marshal.ReleaseComObject(pSettableMapProj);&lt;br /&gt;             }&lt;br /&gt;          }&lt;br /&gt;       }&lt;br /&gt;       finally&lt;br /&gt;       {&lt;br /&gt;          Marshal.ReleaseComObject(pActiveMap);&lt;br /&gt;       }&lt;br /&gt;    }&lt;br /&gt; }&lt;br /&gt; finally&lt;br /&gt; {&lt;br /&gt;    Marshal.ReleaseComObject(pActiveMapProj);&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Note the use of the nested try ... catch ... finally blocks.  This ensures that the COM objects will be released before execution is returned to FalconView.&lt;br /&gt;&lt;br /&gt;(In this example, I show each try block explicitly, which has the benefit of constraining the scope of objects.  One could make this code more readable by avoiding the nested blocks of code and containing each Marshal.ReleaseComObject call in one big finally statement.  As this big finally block could be entered from any point in the try block, this would simply require null reference testing on each COM reference before attempting to release it.)&lt;br /&gt;&lt;br /&gt;For developers writing .NET plugins to FalconView 4.2, which is nearly ready for beta release, there is same good news here.  The lead FalconView technical guru just informed me this week that FalconView will manage COM objects on the heap, paying full attention to reference counting to prevent premature disposal of the objects.  Though this means that explicitly releasing COM objects in you .NET code is no longer required, it is still a nice idea to do so as it allows FalconView to dispose the object without having to wait on .NET garbage collection.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-1427720062139472304?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/1427720062139472304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=1427720062139472304' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/1427720062139472304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/1427720062139472304'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2008/05/ensuring-release-of-com-objects-in-net_23.html' title='Ensuring Release of COM Objects in a .NET FalconView Plugin'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-4588051790789306793</id><published>2008-05-06T14:06:00.004-04:00</published><updated>2008-05-06T14:10:12.811-04:00</updated><title type='text'>ArcGIS Programming Trick: Adding a Legend to a Raster Renderer</title><content type='html'>In the &lt;a title="previous entry" href="http://giscoder.blogspot.com/2008/04/creating-mosaic-of-falconview-dted-in.html" id="ri4c"&gt;previous entry&lt;/a&gt; on creating a DTED mosaic in the FalconView ArcGIS editor, I touched on creating a RasterStretchColorRampRenderer to symbolize the output of the DTED mosaic.  This post is a short extension of that entry.  One detail that we discovered in implementing the renderer is that the color ramp did not draw on the table of contents legend.  It turns out that there is a trick to getting the color ramp to draw.  As far as I can tell, this trick is undocumented on &lt;a title="EDN" href="http://edn.esri.com/" id="feoz"&gt;EDN&lt;/a&gt;, but we learned it through the help of an ArcGIS guru at ESRI.&lt;br /&gt;&lt;br /&gt;There are two things that need to happen for the legend to be created, neither of which we were doing.  After instantiating the RasterStretchColorRampRenderer, it is important to associate the raster we are rendering with the renderer and to call Update on the renderer immediately thereafter.  The code in the previous blog entry must be changed to look like this (the highlighted code is new):&lt;br /&gt;&lt;br /&gt;&lt;div id="qvja1" style="margin-left: 40px;"&gt;&lt;span id="ezed0" style="color: rgb(255, 0, 0);"&gt;&lt;span id="fuea0"  style="font-family:Courier New;"&gt;// Create a renderer to be used with the raster layer&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span id="fuea3"  style="font-family:Courier New;"&gt;IRasterStretchColorRampRenderer pRasterStretchColorRampRenderer = new RasterStretchColorRampRendererClass();&lt;/span&gt;&lt;br /&gt;&lt;span id="fuea5" style="background-color: rgb(255, 242, 204);font-family:Courier New;" &gt;IRasterRenderer pRasterRenderer = (IRasterRenderer)pRasterStretchColorRampRenderer;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span id="fuea8" style="background-color: rgb(255, 242, 204);font-family:Courier New;" &gt;pRasterRenderer.Raster = pRasterLayer.Raster;&lt;/span&gt;&lt;br /&gt;&lt;span id="fuea10" style="background-color: rgb(255, 242, 204);font-family:Courier New;" &gt;pRasterRenderer.Update(); &lt;span id="ezed1" style="color: rgb(255, 0, 0);"&gt;// the call of Update right after setting Raster is important&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span id="fuea13"  style="font-family:Courier New;"&gt;pRasterStretchColorRampRenderer.BandIndex = 0;&lt;br /&gt;&lt;span id="ezed2" style="color: rgb(255, 0, 0);"&gt;//...&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In this case pRasterLayer is created in the same way as before, except we moved the block of code that creates the layer earlier in the raster creation procedure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-4588051790789306793?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/4588051790789306793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=4588051790789306793' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/4588051790789306793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/4588051790789306793'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2008/05/arcgis-programming-trick-adding-legend.html' title='ArcGIS Programming Trick: Adding a Legend to a Raster Renderer'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-7832285768345873444</id><published>2008-04-21T07:28:00.002-04:00</published><updated>2008-04-21T09:43:27.403-04:00</updated><title type='text'>Quantum GIS: First Impressions</title><content type='html'>As I mentioned in the &lt;a title="welcome" href="http://giscoder.blogspot.com/2008/03/welcome-to-gis-coder.html" id="e0o9"&gt;welcome&lt;/a&gt; to this blog, part of why I want to write here is to grow professionally by trying technologies outside the four walls of my FalconView / ArcGIS office.&amp;nbsp; &lt;a title="Quantum GIS" href="http://www.qgis.org/" id="qey5"&gt;Quantum GIS&lt;/a&gt; is a piece of GIS software not much different from FalconView in its mission.&amp;nbsp; It displays vector layers, raster maps and imagery; it also includes some task-oriented geoprocessing and editing capabilities.&amp;nbsp; Being a typical engineering type, I only spent a few minutes reading the instructions, too eager to dive right in and start trying the thing.&amp;nbsp; Here are my first impressions of Quantum GIS.&amp;nbsp; Please keep in mind that these are impressions coming from an experienced GIS user with no previous exposure to QGIS, so some of my facts about QGIS may be incorrect, but I probably represent a typical GIS user who would be considering this type of solution.&amp;nbsp; Here are my impressions from my short test drive.&lt;br id="r3pd"&gt;&lt;br id="zxbo"&gt;&lt;div id="lb8p" align="center"&gt;&lt;table id="f510" border="0" cellpadding="3" cellspacing="0"&gt;&lt;tbody id="a_ln"&gt;&lt;tr id="jxca"&gt;&lt;td id="z-.5"&gt;&lt;div id="aaue" style="padding: 1em 0pt; text-align: center;"&gt;&lt;a id="p_8-" target="_blank" href="http://joelodom.googlepages.com/quantum_gis.jpg"&gt;&lt;img id="u7g_" style="width: 320px; height: 239.255px;" src="http://joelodom.googlepages.com/quantum_gis.jpg"&gt;&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td id="y9wf" width="20"&gt;&lt;br id="ut7y"&gt;&lt;/td&gt;&lt;td id="nury"&gt;&lt;div id="ywfs" style="padding: 1em 0pt; text-align: center;"&gt;&lt;a id="uvtu" href="http://joelodom.googlepages.com/geotiff_fv.jpg" target="_blank"&gt;&lt;img id="dsja" style="width: 320px; height: 231.619px;" src="http://joelodom.googlepages.com/geotiff_fv.jpg"&gt;&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br id="m2-y"&gt;Right off, I discovered support for drawing GeoTIFFs and Shapefiles.&amp;nbsp; The picture above and left is an image of the Georgia Tech campus drawn in QGIS.&amp;nbsp; (I included the same image in FalconView on the right just for kicks.)&amp;nbsp; The image below shows the Shapefile.&amp;nbsp; Right off I was encouraged: QGIS is easy and intuitive to use.&amp;nbsp; Note that I opened the GeoTIFF in an Ubuntu QGIS install and the Shapefile in a Windows install.&amp;nbsp; This is a nice thing about most open source software: the authors generally do a good job of achieving platform independence.&lt;br id="ktfm"&gt;&lt;br /&gt;&lt;div id="ro93" style="padding: 1em 0pt; text-align: center;"&gt;&lt;a id="cqh:" target="_blank" href="http://joelodom.googlepages.com/quantum_shapefile.png"&gt;&lt;img id="xrva" style="width: 320px; height: 199.187px;" src="http://joelodom.googlepages.com/quantum_shapefile.png"&gt;&lt;/a&gt;&lt;/div&gt;Notice that I don't have the Shapefile and the GeoTIFF drawing together in the same window.&amp;nbsp; After a little poking around, I wasn't able to get this to work properly.&amp;nbsp; I assume my difficulty was due to differing coordinate systems between the two files and my lack of experience setting up coordinate systems in QGIS, but I'm still not sure.&amp;nbsp; Since I was going for first impressions, I gave up trying the get them to draw together after a short time.&amp;nbsp; (ArcMap and FalconView generally transform different coordinate systems to draw together without much difficulty, though there is some danger to doing this.)&amp;nbsp; I did get WMS support working, but I could only get their sample WMS servers to draw.&amp;nbsp; I suspect that with some more experimentation (or actually reading the instructions), I could get support for different coordinate systems and WMS working better.&lt;br id="zf1i"&gt;&lt;br id="o:di"&gt;There are a few other features I quickly discovered that are worth mentioning.&amp;nbsp; As you would expect, QGIS includes good support for custom symbolization of vector data and exporting a map to an image file.&amp;nbsp; There is also a neat feature where you can reclaim real estate on the map by pressing CTRL + T / T to hide and show the toolbars.&amp;nbsp; Finally - and I've saved the best for last - if you're in the market for something to create and edit your own Shapefile, QGIS does this nicely.&amp;nbsp; Unlike ArcMap, where feature editing, though powerful, is about as natural as breathing underwater, QGIS makes it intuitive.&amp;nbsp; (Shameless plug: You can create and edit Shapefiles in FalconView via the &lt;a title="GIS Editor" href="http://giscoder.blogspot.com/2008/03/integration-of-falconview-and-arcgis.html" id="qpd4"&gt;GIS Editor&lt;/a&gt;, which is essentially the same as doing it in ArcMap.)&lt;br id="x62b"&gt;&lt;br id="ex0j"&gt;I very much want to revisit, in a future posting here, the advanced programmatic features of Quantum GIS.&amp;nbsp; There is support for an interactive Python console (I'm a Python novice, so maybe this will be the push I need to learn it better), and there is support for plugins to QGIS.&amp;nbsp; I spent about 30 minutes poking around on the QGIS web site, wiki, and Internet in general to learn more about plugin capabilities and how to write one, but I couldn't find anything useful.&amp;nbsp; Some quick e-mail correspondence with a QGIS developer pointed me &lt;a title="here" href="http://wiki.qgis.org/qgiswiki/DevelopingPluginsWithPython" id="hm_g"&gt;here&lt;/a&gt;.&amp;nbsp; (And there we find yet another advantage to using this active open source project: it's not too hard to find help from the project volunteers.)&lt;br id="nm6x"&gt;&lt;br id="m4ip"&gt;I'll sum up my initial impressions with Quantum GIS by saying that it's a maturing product worthy of applause.&amp;nbsp; It does most of what it's supposed to do with ease, and I suspect that with a little more experience, I could overcome the hurdles I experienced.&amp;nbsp; I enjoyed playing with the tool, which says a lot since I have a pretty short attention span.&lt;br id="ykk1"&gt;&lt;br id="hokk"&gt;If you want a quick demo of the basic capabilities, check out &lt;a title="this video" href="http://qgis.org/flash/qgisdemo1.html" id="d0bn"&gt;this video&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-7832285768345873444?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/7832285768345873444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=7832285768345873444' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/7832285768345873444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/7832285768345873444'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2008/04/quantum-gis-first-impressions.html' title='Quantum GIS: First Impressions'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-1938546481141032087</id><published>2008-04-10T08:57:00.001-04:00</published><updated>2008-04-10T08:57:40.267-04:00</updated><title type='text'>Creating a Mosaic of FalconView DTED in the GIS Editor</title><content type='html'>In my previous post on the subject of DTED in the FalconView ArcGIS Editor, I mentioned that bringing DTED into the GIS Editor is a two step process.&amp;nbsp; The FalconView user first has the Editor create a feature class that shows all the DTED tiles in the FalconView map data manager; the second step is to select the area of interest and create a DTED mosaic from that area.&amp;nbsp; The previous post&amp;nbsp;examined the creation of a feature class to show DTED coverage.&amp;nbsp; This post will examine the technical details of how the GIS Editor uses the geoprocessing capabilities of ArcGIS to add a nicely rendered DTED mosaic to the map.&lt;br id="uw.:"&gt;&lt;br id="plzn"&gt;(Please note that the code below is still somewhat experimental.&amp;nbsp; Comments and suggestions are welcome.&amp;nbsp; As FalconView 4.2 is still under development, there are some discussions within Georgia Tech and our user community as to how the final user experience for this will happen.)&lt;br id="kgjx"&gt;&lt;br id="el:7"&gt;&lt;span id="gpl6"&gt;&lt;b id="jyjn"&gt;1. Get a list of DTED tiles to add to the mosaic&lt;/b&gt;&lt;/span&gt;&lt;br id="pvyp"&gt;&lt;br id="chps"&gt;The code block below shows how to enumerate all features the layer of FalconView DTED coverage, collecting a list of DTED tiles which will later be passed to the Mosaic geoprocessing tool.&amp;nbsp; Note that the only end result from this code block is sMosaicInput, the colon separated list of tiles to add to the mosaic (e.g. "C:\dted\w086\n35.dt1;C:\dted\w086\n34.dt1").&amp;nbsp; I have highlighted the two most interesting parts of the code: the part that builds the lookup table of selected features and the part that builds sMosaicInput from the features in the lookup table.&lt;br id="mb56"&gt;&lt;blockquote id="intn" style="font-family: Courier New;"&gt;string sMosaicInput = null;&lt;br id="y_7n"&gt;&lt;br id="fpc5"&gt;&lt;font id="mlxr" color="#ff0000"&gt;// ... some redacted code ...&lt;/font&gt;&lt;br id="urzo"&gt;&lt;br id="t3kf"&gt;&lt;font id="r3qo" color="#ff0000"&gt;// The block below populates sMosaicInput&lt;/font&gt;&lt;br id="qe:e"&gt;&lt;br id="r_i7"&gt;try&lt;br id="wh-d"&gt;{&lt;br id="ypp_"&gt;&lt;div id="ld:." style="margin-left: 40px;"&gt;&lt;font id="o6w4" color="#ff0000"&gt;// Create a lookup table of selected features&lt;/font&gt;&lt;br id="e9m2"&gt;&lt;br id="uz0e"&gt;IFeatureSelection pFeatureSelection = (IFeatureSelection)pLayer;&lt;br id="cour"&gt;Dictionary&amp;lt;int, object&amp;gt; dictSelectedIDs = new Dictionary&amp;lt;int, object&amp;gt;();&lt;br id="uobx"&gt;&lt;br style="background-color: rgb(255, 255, 255);" id="hyes"&gt;&lt;span id="jhf." style="background-color: rgb(255, 242, 204);"&gt;IEnumIDs pEnumIDs = pFeatureSelection.SelectionSet.IDs;&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="se.."&gt;&lt;span id="hbd7" style="background-color: rgb(255, 242, 204);"&gt;for (int id = pEnumIDs.Next(); id != -1; id = pEnumIDs.Next())&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="g40v"&gt;&lt;div id="caff" style="margin-left: 40px; background-color: rgb(255, 255, 255);"&gt;&lt;span style="background-color: rgb(255, 242, 204);" id="z8xi"&gt;dictSelectedIDs[id] = null;&lt;/span&gt;&lt;br id="x6.t"&gt;&lt;/div&gt;&lt;br style="background-color: rgb(255, 255, 255);" id="zkaa"&gt;&lt;font id="mlxr" color="#ff0000"&gt;// ... some redacted code ...&lt;/font&gt;&lt;br id="urzo"&gt;&lt;br id="l_o6"&gt;&lt;font id="flqc" color="#ff0000"&gt;// Enumerate all features, adding selected paths to the list&lt;/font&gt;&lt;br id="wen1"&gt;&lt;br id="r:cq"&gt;IFeatureLayer pFeatureLayer = (IFeatureLayer)pLayer;&lt;br id="komp"&gt;IFeatureCursor pFeatureCursor = pFeatureLayer.FeatureClass.Search(null, true);&lt;br id="wyhu"&gt;int iPathField = pFeatureCursor.FindField("Path");&lt;br id="i20c"&gt;&lt;br id="qp.2"&gt;&lt;span id="jgs_" style="background-color: rgb(255, 242, 204);"&gt;for (IFeature pFeature = pFeatureCursor.NextFeature(); pFeature != null; pFeature = pFeatureCursor.NextFeature())&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="do-3"&gt;&lt;span id="vsof" style="background-color: rgb(255, 242, 204);"&gt;{&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="o.qw"&gt;&lt;div id="ickf" style="margin-left: 40px;"&gt;&lt;span style="background-color: rgb(255, 242, 204);" id="rbkf"&gt;if (dictSelectedIDs.ContainsKey(pFeature.OID))&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="gmnh"&gt;&lt;span style="background-color: rgb(255, 242, 204);" id="o:s3"&gt;{&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="kzv."&gt;&lt;div id="zsl:" style="margin-left: 40px;"&gt;&lt;span style="background-color: rgb(255, 242, 204);" id="c20i"&gt;string sPath = (string)pFeature.get_Value(iPathField);&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="h9b5"&gt;&lt;span style="background-color: rgb(255, 242, 204);" id="rjqy"&gt;if (sMosaicInput == null)&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="luke"&gt;&lt;div id="wrrc" style="margin-left: 40px; background-color: rgb(255, 255, 255);"&gt;&lt;span style="background-color: rgb(255, 242, 204);" id="ilfb"&gt;sMosaicInput = sPath;&lt;/span&gt;&lt;br id="lhqf"&gt;&lt;/div&gt;&lt;span style="background-color: rgb(255, 242, 204);" id="vt13"&gt;else&lt;/span&gt;&lt;br style="background-color: rgb(255, 255, 255);" id="n6dk"&gt;&lt;div id="eunr" style="margin-left: 40px; background-color: rgb(255, 255, 255);"&gt;&lt;span style="background-color: rgb(255, 242, 204);" id="pglt"&gt;sMosaicInput += ';' + sPath;&lt;/span&gt;&lt;br id="w0w1"&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="background-color: rgb(255, 242, 204);" id="pg5x"&gt;}&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="uu4q"&gt;&lt;/div&gt;&lt;span id="y2.l" style="background-color: rgb(255, 242, 204);"&gt;}&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="wdxg"&gt;&lt;/div&gt;}&lt;br id="k.o:"&gt;catch (Exception ex)&lt;br id="n43e"&gt;{&lt;br id="zm1z"&gt;&lt;div id="zyu7" style="margin-left: 40px;"&gt;&lt;font id="mlxr" color="#ff0000"&gt;// ... some redacted code ...&lt;/font&gt;&lt;br id="urzo"&gt;&lt;/div&gt;&lt;br /&gt;}&lt;br id="kgn_"&gt;&lt;/blockquote&gt;&lt;span id="ayt."&gt;&lt;b id="gms7"&gt;2. Use geoprocessing tools to create the mosaic raster&lt;/b&gt;&lt;/span&gt;&lt;br id="te49"&gt;&lt;br id="ikiu"&gt;Once we have compiled the string containing the paths of the DTED tiles to be added to the mosaic, creating the mosaic is a simple task requiring the use of two geoprocessing tools.&amp;nbsp; In the code below, the first highlighted section executes a CreateRasterDataset geoprocessor, creating a scratch raster dataset in a scratch file geodatabase.&amp;nbsp; The second highlighted lines execute the Mosaic geoprocessor.&lt;br id="s11r"&gt;&lt;blockquote style="font-family: Courier New;" id="yn:o"&gt;&lt;font id="hm-f" color="#ff0000"&gt;// Create a new raster dataset to hold the mosaic&lt;/font&gt;&lt;br id="xhm_"&gt;&lt;br id="jg:f"&gt;string sRasterName = "dted_mosaic" + Guid.NewGuid().ToString("N");&lt;br id="srcp"&gt;const string PIXEL_TYPE = "16_BIT_SIGNED"; &lt;font id="vcps" color="#ff0000"&gt;// Matches DTED 1 &amp;amp; 2 in ArcMap&lt;/font&gt;&lt;br id="raeu"&gt;const int NUMBER_OF_BANDS = 1; &lt;font id="pw33" color="#ff0000"&gt;// Matches DTED 1 &amp;amp; 2 in ArcMap&lt;/font&gt;&lt;br id="dn8t"&gt;&lt;br id="f1sg"&gt;&lt;span id="kxpo" style="background-color: rgb(255, 242, 204);"&gt;CreateRasterDataset createRasterDataset = new CreateRasterDataset(TempGeodatabaseUtils.TempFileGeodatabase, sRasterName, PIXEL_TYPE, NUMBER_OF_BANDS);&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="z_-n"&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="wa-b"&gt;&lt;span id="syzh" style="background-color: rgb(255, 242, 204);"&gt;Geoprocessor geoprocessor = new Geoprocessor();&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="ffzg"&gt;&lt;span id="iqn9" style="background-color: rgb(255, 242, 204);"&gt;geoprocessor.Execute(createRasterDataset, null);&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="qaim"&gt;for (int j = 0; j &amp;lt; geoprocessor.MessageCount; j++)&lt;br id="pk_b"&gt;&amp;nbsp;&amp;nbsp; LoggingUtils.TraceMessage(geoprocessor.GetMessage(j));&lt;br id="p31a"&gt;&lt;br id="xycy"&gt;&lt;font id="iwms" color="#ff0000"&gt;// Create the mosaic&lt;/font&gt;&lt;br id="b8mi"&gt;&lt;br id="dwk9"&gt;&lt;span id="vmd7" style="background-color: rgb(255, 242, 204);"&gt;Mosaic mosaic = new Mosaic(sMosaicInput, TempGeodatabaseUtils.TempFileGeodatabase + '\\' + sRasterName);&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="gm:g"&gt;&lt;span id="fh7q" style="background-color: rgb(255, 242, 204);"&gt;mosaic.mosaic_type = "BLEND";&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="u8th"&gt;&lt;span id="v4q6" style="background-color: rgb(255, 242, 204);"&gt;mosaic.nodata_value = -32767;&amp;nbsp; &lt;font id="kgkf" color="#ff0000"&gt;// NoData for DTED 1 &amp;amp; 2 in ArcMap&lt;/font&gt;&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="egb:"&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="hn:l"&gt;&lt;span id="bi9p" style="background-color: rgb(255, 242, 204);"&gt;geoprocessor = new Geoprocessor();&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="n1u7"&gt;&lt;span id="esyz" style="background-color: rgb(255, 242, 204);"&gt;geoprocessor.Execute(mosaic, null);&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="m0_n"&gt;for (int j = 0; j &amp;lt; geoprocessor.MessageCount; j++)&lt;br id="t9mz"&gt;&amp;nbsp;&amp;nbsp; LoggingUtils.TraceMessage(geoprocessor.GetMessage(j));&lt;br id="x56n"&gt;&lt;/blockquote&gt;&lt;span id="il:v"&gt;&lt;b id="smv:"&gt;3. Symbolize the mosaic and add it to the map&lt;/b&gt;&lt;/span&gt;&lt;br id="b7.7"&gt;&lt;br id="buh5"&gt;Once the mosaic is created, it must be symbolized before it is added to the FalconView map.&amp;nbsp; After some experimentation, we found that a simple color ramp shows the features of the DTED well.&amp;nbsp; (Note that a possible improvement to this would be to add a hillshade effect.)&amp;nbsp; The first section of highlighted code below shows how to create raster statistics programmatically.&amp;nbsp; The raster statistics will be used to determine the parameters of the renderer.&amp;nbsp; The highlighted section shows how to build a simple stretch color ramp.&amp;nbsp; The last lines show how to create a raster layer from the raw raster, apply the renderer, and add the raster to the map control.&lt;br id="j8.o"&gt;&lt;blockquote id="v0nx" style="font-family: Courier New;"&gt;&lt;font id="dged" color="#ff0000"&gt;// Set up a raster data object from the mosaic&lt;/font&gt;&lt;br id="mnsh"&gt;&lt;br id="nwhu"&gt;IWorkspaceFactory pWorkspaceFactory = new FileGDBWorkspaceFactory();&lt;br id="up:x"&gt;IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(TempGeodatabaseUtils.TempFileGeodatabase, hWnd);&lt;br id="p8f2"&gt;IRasterWorkspaceEx pRasterWorkspace = (IRasterWorkspaceEx)pWorkspace;&lt;br id="gf-5"&gt;IRasterDataset pRasterDataset = pRasterWorkspace.OpenRasterDataset(sRasterName);&lt;br id="d.oi"&gt;&lt;br id="scmd"&gt;&lt;font id="nb02" color="#ff0000"&gt;// Create raster statistics so we can find the highest and lowest points on the raster for the color ramp&lt;/font&gt;&lt;br id="vezj"&gt;&lt;br id="d.jd"&gt;&lt;span id="x0xj" style="background-color: rgb(255, 242, 204);"&gt;IRasterBandCollection pRasterBandCollection = (IRasterBandCollection)pRasterDataset;&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="lw_d"&gt;&lt;span id="gpc-" style="background-color: rgb(255, 242, 204);"&gt;IEnumRasterBand pEnumRasterBand = pRasterBandCollection.Bands;&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="mmr3"&gt;&lt;span id="uiqd" style="background-color: rgb(255, 242, 204);"&gt;IRasterBand pRasterBand = pEnumRasterBand.Next();&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="nnlz"&gt;&lt;span id="uv1e" style="background-color: rgb(255, 242, 204);"&gt;pRasterBand.ComputeStatsAndHist();&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="qk_2"&gt;&lt;span id="gbzq" style="background-color: rgb(255, 242, 204);"&gt;IRasterStatistics pRasterStatistics = pRasterBand.Statistics;&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="l62l"&gt;&lt;br id="ge:e"&gt;&lt;font id="w4nu" color="#ff0000"&gt;// Create a renderer to be used with the raster layer&lt;/font&gt;&lt;br id="lw4b"&gt;&lt;br id="jm_5"&gt;IRgbColor pFromColor = new RgbColorClass();&lt;br id="tbc7"&gt;pFromColor.Red = 254;&lt;br id="ka4m"&gt;pFromColor.Green = 254;&lt;br id="ws8d"&gt;pFromColor.Blue = 255;&lt;br id="s5yk"&gt;&lt;br id="n3qx"&gt;IRgbColor pToColor = new RgbColorClass();&lt;br id="yo6c"&gt;pToColor.Red = 0;&lt;br id="h9g:"&gt;pToColor.Green = 0;&lt;br id="oy-6"&gt;pToColor.Blue = 255;&lt;br id="lx9w"&gt;&lt;br id="mouk"&gt;IAlgorithmicColorRamp pAlgorithmicColorRamp = new AlgorithmicColorRampClass();&lt;br id="eua2"&gt;pAlgorithmicColorRamp.FromColor = pFromColor;&lt;br id="xgjf"&gt;pAlgorithmicColorRamp.ToColor = pToColor;&lt;br id="gkfv"&gt;pAlgorithmicColorRamp.Algorithm = esriColorRampAlgorithm.esriCIELabAlgorithm;&lt;br id="ckax"&gt;pAlgorithmicColorRamp.Size = 50;&lt;br id="g_x4"&gt;&lt;br id="yy6e"&gt;bool bOK;&lt;br id="f.7s"&gt;pAlgorithmicColorRamp.CreateRamp(out bOK);&lt;br id="ujkz"&gt;LoggingUtils.Assert(bOK, "Failed to create color ramp");&lt;br id="e7-t"&gt;&lt;br id="abvz"&gt;&lt;span id="u3:0" style="background-color: rgb(255, 242, 204);"&gt;IRasterStretchColorRampRenderer pRasterStretchColorRampRenderer = new RasterStretchColorRampRendererClass();&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="x3k-"&gt;&lt;span id="yeow" style="background-color: rgb(255, 242, 204);"&gt;pRasterStretchColorRampRenderer.BandIndex = 0;&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="bzrm"&gt;&lt;span id="ya-i" style="background-color: rgb(255, 242, 204);"&gt;pRasterStretchColorRampRenderer.LabelHigh = pRasterStatistics.Maximum.ToString();&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="lw.8"&gt;&lt;span id="k_0m" style="background-color: rgb(255, 242, 204);"&gt;pRasterStretchColorRampRenderer.LabelLow = pRasterStatistics.Minimum.ToString();&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);" id="k_-i"&gt;&lt;span id="heog" style="background-color: rgb(255, 242, 204);"&gt;pRasterStretchColorRampRenderer.ColorRamp = pAlgorithmicColorRamp;&lt;br id="qwjh"&gt;&lt;br id="snhp"&gt;&lt;font id="fgsc" color="#ff0000"&gt;&lt;span id="dgk2" style="background-color: rgb(255, 255, 255);"&gt;// Create the raster layer and add it to the map&lt;/span&gt;&lt;/font&gt;&lt;br id="qth0"&gt;&lt;br id="k2jr"&gt;IRasterLayer pRasterLayer = new RasterLayerClass();&lt;br id="zvc1"&gt;pRasterLayer.CreateFromDataset(pRasterDataset);&lt;br id="m15y"&gt;pRasterLayer.Name = "FalconView DTED Mosaic";&lt;br id="dks."&gt;pRasterLayer.Renderer = (IRasterRenderer)pRasterStretchColorRampRenderer;&lt;br id="kc.3"&gt;&lt;br id="v0lp"&gt;pMapControl2.AddLayer(pRasterLayer, 0);&lt;br id="kiwa"&gt;&lt;br id="jbkz"&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br id="ouuz"&gt;&lt;br id="lu16"&gt;&lt;br id="hi7g"&gt;&lt;br id="lzcu"&gt;&lt;br id="r01o"&gt;&lt;br id="j_57"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-1938546481141032087?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/1938546481141032087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=1938546481141032087' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/1938546481141032087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/1938546481141032087'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2008/04/creating-mosaic-of-falconview-dted-in.html' title='Creating a Mosaic of FalconView DTED in the GIS Editor'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-7917750885194747986</id><published>2008-04-02T08:16:00.001-04:00</published><updated>2008-04-08T14:26:49.500-04:00</updated><title type='text'>Consuming FalconView DTED in the GIS Editor</title><content type='html'>                                    The FalconView 4.2 ArcGIS Editor will have the capability of pulling &lt;a id="e2lm" href="http://www.fas.org/irp/program/core/dted.htm"&gt;DTED&lt;/a&gt; from FalconView into an ESRI ArcMap document so that users can perform geoprocessing tasks with the terrain data.  In this blog posting, I will examine this capability that will be in FalconView 4.2 and will give an overview of how this capability was implemented technically. The reader will learn how to retrieve coverage data from the FalconView map data manager and how to create a feature class from this coverage data.&lt;br id="bc:q"&gt;&lt;br id="vjp8"&gt;&lt;a id="s20a" href="http://joelodom.googlepages.com/fv_dted_w_gis_dted.jpg"&gt;&lt;img id="dy.2" style="margin: 0pt 10px 10px 0pt; float: left; width: 320px;" src="http://joelodom.googlepages.com/fv_dted_w_gis_dted.jpg" alt="" border="0"&gt;&lt;/a&gt;Users add DTED tiles to their FalconView coverage database through the FalconView map data manager. Once the DTED is loaded into FalconView, users can draw elevation data visually, use elevation data in route planning, calculate terrain masking of radar systems, and so on. While FalconView has numerous uses for terrain elevation data, ArcGIS has a generalized geoprocessing framework which allows GIS intelligence officers to perform a wide variety of specialized calculations for their mission planning. The integration of FalconView and ArcGIS will provide a simplified framework for mission planning which requires geoprocessing with terrain data.&lt;br id="q.26"&gt;&lt;br id="ynww"&gt;The screen capture to the left shows FalconView drawing DTED two ways (the DTED view is zoomed out to 25% to remove detail so that the screen capture is suitable for posting to a public forum.) The black and white background map is the normal DTED base map drawn by FalconView. The blue and white tile in the center is a mosaic of four DTED tiles being drawn by the GIS Editor. The FalconView base map is optimized for a viewing experience that shows the general layout of the terrain. The GIS Editor splotch in the center of the map is optimized for a viewing experience that highlights the high and low areas of the terrain.&lt;br id="i7n1"&gt;&lt;br id="pcla"&gt;&lt;a id="u.i1" href="http://joelodom.googlepages.com/gis_editor_dted.png"&gt;&lt;img id="c3e5" style="margin: 0pt 0pt 10px 10px; float: right; width: 400px;" src="http://joelodom.googlepages.com/gis_editor_dted.png" alt="" border="0"&gt;&lt;/a&gt;For GIS Editor users, creating a mosaic of FalconView DTED is a two step process. First, the user creates a vector overlay of polygons which describe the DTED coverage available from FalconView. Next, the user selects the DTED tiles he wishes to turn into a mosaic and creates the mosaic. The coverage overlay and the mosaic are both automatically created by the GIS Editor and are stored in temporary geodatabases. The screen capture to the right shows the tiles of DTED available on my development system. Notice the little raster blotch in the Eastern US. This is a mosaic of four DTED tiles. (It may be necessary to click on the image to the right to see the detail of the overlay.)&lt;br id="cq15"&gt;&lt;br id="ee3a"&gt;Let's explore the technical steps necessary to bring this DTED from FalconView into ArcGIS.  (In this blog post we will not examine the steps used to create the DTED mosaic, though we may explore that in a follow-up post.)&lt;br id="lp6m"&gt;&lt;br id="pgdq"&gt;&lt;font id="cqgz"&gt;&lt;b id="aswe"&gt;1. Creating an ArcGIS feature class to contain the FalconView DTED&lt;/b&gt;&lt;/font&gt;&lt;br id="a_l_"&gt;&lt;br id="jwt8"&gt;ArcGIS always holds feature classes in some sort of geodatabase.  In the case of the FalconView DTED, we load the coverage data into a scratch file geodatabase.&lt;br id="icl3"&gt; &lt;blockquote id="wij5"&gt;&lt;font id="mh6:" color="#ff0000"&gt;&lt;span id="amj1" style="font-family: courier new; color: rgb(255, 102, 102);"&gt;// Create the output workspace&lt;/span&gt;&lt;span id="mmcg" style="font-family: courier new; color: rgb(255, 102, 102);"&gt;s&lt;/span&gt;&lt;br id="uo9."&gt;&lt;/font&gt;&lt;br id="d2bf"&gt;&lt;span id="arep" style="font-family: courier new;"&gt;IWorkspaceFactory pOutWorkspaceFactory = new FileGDBWorkspaceFactory();&lt;/span&gt;&lt;br id="bjxy"&gt;&lt;div id="yl97"&gt;&lt;span id="fz-7" style="font-family: courier new;"&gt;IWorkspace pOutWorkspace = pOutWorkspaceFactory.OpenFromFile(TempGeodatabaseUtils.TempFileGeodatabase, hWnd);&lt;/span&gt;&lt;br id="y62w"&gt;&lt;/div&gt;&lt;span id="o4ns" style="font-family: courier new;"&gt;IFeatureWorkspace pOutFeatWorkspace = (IFeatureWorkspace)pOutWorkspa&lt;/span&gt;&lt;span id="n9bv" style="font-family: courier new;"&gt;ce;&lt;/span&gt;&lt;br id="w:b9" style="font-family: courier new;"&gt;&lt;/blockquote&gt;             The temporary file geodatabase referred to above is created during the call to the TempFileGeodatabase property, if it didn't exist before.&lt;br id="k.sr"&gt; &lt;br id="tvic"&gt; After we get the reference to the output feature workspace, we must create the Fields that will be stored with the feature class.  The fields we create include a shape field to hold the shape of the polygon, a path field which holds the path to the DTED tile, and a level field which indicates the DTED level (0, 1, 2, 3, etc.).&lt;br id="pl:3"&gt; &lt;blockquote id="xvoh"&gt;&lt;font id="b-d5" color="#ff0000"&gt;&lt;span id="ls8d" style="font-family: courier new;"&gt;// Create the fields object which will hold the fields for the feature class.  I have put much of the field creation&lt;/span&gt;&lt;br id="kzhi" style="font-family: courier new;"&gt;&lt;span id="o3:f" style="font-family: courier new;"&gt;// logic in its own block to demonstrate that the only object that matters after the fields are built is pFields.&lt;/span&gt;&lt;br id="bc51" style="font-family: courier new;"&gt;&lt;/font&gt;&lt;br id="r2i4" style="font-family: courier new;"&gt;&lt;span id="vpho" style="font-family: courier new;"&gt;IFields pFields = new FieldsClass();&lt;/span&gt;&lt;br id="ctkd" style="font-family: courier new;"&gt;&lt;br id="qu8n" style="font-family: courier new;"&gt;&lt;span id="i2hn" style="font-family: courier new;"&gt;{&lt;/span&gt;&lt;br id="kg78" style="font-family: courier new;"&gt;&lt;div id="dcp." style="margin-left: 40px;"&gt;&lt;font id="oc1a" color="#ff0000"&gt;&lt;span id="zp65" style="font-family: courier new;"&gt;// Set up the polygon shape field for the feature class&lt;/span&gt;&lt;/font&gt;&lt;br id="s841" style="font-family: courier new;"&gt;&lt;br id="tvie"&gt;&lt;span id="i4tm" style="font-family: courier new;"&gt;IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields;&lt;/span&gt;&lt;br id="rspm" style="font-family: courier new;"&gt;&lt;br id="z0yv" style="font-family: courier new;"&gt;&lt;span id="xz_5" style="font-family: courier new;"&gt;IField pField = new FieldClass();&lt;/span&gt;&lt;br id="mlkd" style="font-family: courier new;"&gt;&lt;span id="of0k" style="font-family: courier new;"&gt;IFieldEdit pFieldEdit = (IFieldEdit)pField;&lt;/span&gt;&lt;br id="znmj" style="font-family: courier new;"&gt;&lt;span id="uxkc" style="font-family: courier new;"&gt;pFieldEdit.Name_2 = "Shape";&lt;/span&gt;&lt;br id="t58q" style="font-family: courier new;"&gt;&lt;span id="tzgh" style="font-family: courier new;"&gt;pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;&lt;/span&gt;&lt;br id="hinz" style="font-family: courier new;"&gt;&lt;br id="zvt2" style="font-family: courier new;"&gt;&lt;span id="fu1b" style="font-family: courier new;"&gt;IGeometryDef pGeometryDef = new GeometryDefClass();&lt;/span&gt;&lt;br id="f-3_" style="font-family: courier new;"&gt;&lt;span id="g-8k" style="font-family: courier new;"&gt;IGeometryDefEdit pGeometryDefEdit = (IGeometryDefEdit)pGeometryDef;&lt;/span&gt;&lt;br id="zsy6" style="font-family: courier new;"&gt;&lt;span id="woge" style="font-family: courier new;"&gt;pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon;&lt;/span&gt;&lt;br id="q-vz" style="font-family: courier new;"&gt;&lt;br id="w21y" style="font-family: courier new;"&gt;&lt;span id="vsnc" style="font-family: courier new;"&gt;ISpatialReferenceFactory2 pSpaRefFact2 = new SpatialReferenceEnvironmentClass();&lt;/span&gt;&lt;br id="eo9j" style="font-family: courier new;"&gt;&lt;span id="x117" style="font-family: courier new;"&gt;IGeographicCoordinateSystem pGeoCoordSys = pSpaRefFact2.CreateGeographicCoordinateSystem(4326); &lt;font id="r5q4" color="#ff0000"&gt;// 4326 is esriSRGeoCS_WGS1984&lt;/font&gt;&lt;/span&gt;&lt;br id="fu6w" style="font-family: courier new;"&gt;&lt;span id="uw17" style="font-family: courier new;"&gt;ISpatialReference pSpatialReference = (ISpatialReference)pGeoCoordSys;&lt;/span&gt;&lt;br id="va03" style="font-family: courier new;"&gt;&lt;br id="j2nj" style="font-family: courier new;"&gt;&lt;font id="xg98" color="#ff0000"&gt;&lt;span id="ppuf" style="font-family: courier new;"&gt;// Set the domain on the coordinate system&lt;/span&gt;&lt;/font&gt;&lt;br id="vfni" style="font-family: courier new;"&gt;&lt;font id="xg98" color="#ff0000"&gt;&lt;span id="z6fg" style="font-family: courier new;"&gt;// This prevents the error, "The XY domain on the spatial reference is not set or invalid."&lt;/span&gt;&lt;/font&gt;&lt;br id="j4ji" style="font-family: courier new;"&gt;&lt;br id="v:3b"&gt;&lt;span id="k5wm" style="font-family: courier new;"&gt;ISpatialReferenceResolution pSpatialReferenceResolution = (ISpatialReferenceResolution)pSpatialReference;&lt;/span&gt;&lt;br id="vr7t" style="font-family: courier new;"&gt;&lt;span id="qff8" style="font-family: courier new;"&gt;pSpatialReferenceResolution.ConstructFromHorizon();&lt;/span&gt;&lt;br id="d1b3" style="font-family: courier new;"&gt;&lt;br id="a.9:" style="font-family: courier new;"&gt;&lt;span id="t6rt" style="font-family: courier new;"&gt;pGeometryDefEdit.SpatialReference_2 = pSpatialReference;&lt;/span&gt;&lt;br id="k4va" style="font-family: courier new;"&gt;&lt;span id="srru" style="font-family: courier new;"&gt;pFieldEdit.GeometryDef_2 = pGeometryDef;&lt;/span&gt;&lt;br id="pp.m" style="font-family: courier new;"&gt;&lt;span id="t4yf" style="font-family: courier new;"&gt;pFieldsEdit.AddField(pField);&lt;/span&gt;&lt;br id="j6:t" style="font-family: courier new;"&gt;&lt;br id="lh4q" style="font-family: courier new;"&gt;&lt;font id="w2mk" color="#ff0000"&gt;&lt;span id="ic08" style="font-family: courier new;"&gt;// Add the Path field&lt;/span&gt;&lt;/font&gt;&lt;br id="utof" style="font-family: courier new;"&gt;&lt;br id="r-dq" style="font-family: courier new;"&gt;&lt;span id="mouz" style="font-family: courier new;"&gt;pField = new FieldClass();&lt;/span&gt;&lt;br id="f5sw" style="font-family: courier new;"&gt;&lt;span id="j70y" style="font-family: courier new;"&gt;pFieldEdit = pField as IFieldEdit;&lt;/span&gt;&lt;br id="hs6:" style="font-family: courier new;"&gt;&lt;span id="r5-x" style="font-family: courier new;"&gt;pFieldEdit.Name_2 = "Path";&lt;/span&gt;&lt;br id="l.ua" style="font-family: courier new;"&gt;&lt;span id="vicl" style="font-family: courier new;"&gt;pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;&lt;/span&gt;&lt;br id="ri-l" style="font-family: courier new;"&gt;&lt;span id="cyps" style="font-family: courier new;"&gt;pFieldsEdit.AddField(pField);&lt;/span&gt;&lt;br id="byvp" style="font-family: courier new;"&gt;&lt;br id="qu-6" style="font-family: courier new;"&gt;&lt;font id="gcih" color="#ff0000"&gt;&lt;span id="bg6v" style="font-family: courier new;"&gt;// Add the Level field&lt;/span&gt;&lt;/font&gt;&lt;br id="ikj1" style="font-family: courier new;"&gt;&lt;br id="xw8i" style="font-family: courier new;"&gt;&lt;span id="txuy" style="font-family: courier new;"&gt;pField = new FieldClass();&lt;/span&gt;&lt;br id="z68d" style="font-family: courier new;"&gt;&lt;span id="we0r" style="font-family: courier new;"&gt;pFieldEdit = pField as IFieldEdit;&lt;/span&gt;&lt;br id="e_21" style="font-family: courier new;"&gt;&lt;span id="e_gu" style="font-family: courier new;"&gt;pFieldEdit.Name_2 = "Level";&lt;/span&gt;&lt;br id="bdum" style="font-family: courier new;"&gt;&lt;span id="zmkb" style="font-family: courier new;"&gt;pFieldEdit.Type_2 = esriFieldType.esriFieldTypeInteger;&lt;/span&gt;&lt;br id="jx05" style="font-family: courier new;"&gt;&lt;span id="g4.h" style="font-family: courier new;"&gt;pFieldsEdit.AddField(pField);&lt;/span&gt;&lt;br id="asow" style="font-family: courier new;"&gt;&lt;br id="wjt5" style="font-family: courier new;"&gt;&lt;font id="f97l" color="#ff0000"&gt;&lt;span id="sxt0" style="font-family: courier new;"&gt;// Add other required fields to the feature class&lt;/span&gt;&lt;/font&gt;&lt;br id="a7d2" style="font-family: courier new;"&gt;&lt;br id="udqu" style="font-family: courier new;"&gt;&lt;span id="pqyq" style="font-family: courier new;"&gt;IObjectClassDescription pObjectClassDescription = new FeatureClassDescriptionClass();&lt;/span&gt;&lt;br id="tyy8" style="font-family: courier new;"&gt;&lt;br id="e7r2" style="font-family: courier new;"&gt;&lt;span id="by6f" style="font-family: courier new;"&gt;for (int i = 0; i &amp;lt; pObjectClassDescription.RequiredFields.FieldCount; i++)&lt;/span&gt;&lt;br id="pyt0" style="font-family: courier new;"&gt;&lt;span id="j2wn" style="font-family: courier new;"&gt;{&lt;/span&gt;&lt;br id="s:ni" style="font-family: courier new;"&gt;&lt;div id="aa:e" style="margin-left: 40px;"&gt;&lt;span id="qcvo" style="font-family: courier new;"&gt;pField = pObjectClassDescription.RequiredFields.get_Field(i);&lt;/span&gt;&lt;br id="ur90" style="font-family: courier new;"&gt;&lt;span id="syyc" style="font-family: courier new;"&gt;if (pFieldsEdit.FindField(pField.Name) == -1)&lt;/span&gt;&lt;br id="a118" style="font-family: courier new;"&gt;&lt;div id="p6a-" style="margin-left: 40px;"&gt;&lt;span id="hvrb" style="font-family: courier new;"&gt;pFieldsEdit.AddField(pField);&lt;/span&gt;&lt;br id="jrw3" style="font-family: courier new;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;span id="yuuj" style="font-family: courier new;"&gt;}&lt;/span&gt;&lt;br id="djc6" style="font-family: courier new;"&gt;&lt;/div&gt;&lt;span id="at6t" style="font-family: courier new;"&gt;}&lt;/span&gt;&lt;br id="s2:u" style="font-family: courier new;"&gt;&lt;/blockquote&gt;                                                            Note the loop an the end of this block of code that ensures all required fields are added to the feature class.  When creating a feature class from scratch, it is important to add all of the required fields to the class.  In a debug session, I see this block of code skips adding the SHAPE field, which we manually created at the beginning of the block, but adds the required OBJECTID field.  The image below is a snapshot of the attributes table of the new feature class as seen in the FalconView GIS Editor.  If you click on the image, you will see the fields we added to the feature class, along with some of the data which we will add in the next step.&lt;div id="t3y3" style="padding: 1em 0pt; text-align: left;"&gt;&lt;div id="ftc9" style="padding: 1em 0pt; text-align: left;"&gt;&lt;a id="nm3d" href="http://joelodom.googlepages.com/dted_attributes.png"&gt;&lt;img id="cd6:" style="margin: 0px auto 10px; display: block; text-align: center; width: 400px;" src="http://joelodom.googlepages.com/dted_attributes.png" alt="" border="0"&gt;&lt;/a&gt;The next step is to create the feature class, which is relatively simple.  The code below also shows how we set up some references we will use to add features to the feature class.&lt;br id="m434"&gt;&lt;/div&gt;&lt;/div&gt;&lt;blockquote id="p:ip"&gt;&lt;font id="se6i" color="#ff0000"&gt;&lt;span id="d4t9" style="font-family: Courier New;"&gt;// Create the feature class&lt;/span&gt;&lt;/font&gt;&lt;br style="font-family: Courier New;" id="f6oz"&gt;&lt;br style="font-family: Courier New;" id="e:qh"&gt;&lt;span id="brxd" style="font-family: Courier New;"&gt;string sFeatureClassName = "dted" + Guid.NewGuid().ToString("N");&lt;/span&gt;&lt;br style="font-family: Courier New;" id="s67:"&gt;&lt;span id="js-y" style="font-family: Courier New;"&gt;IFeatureClass pFeatureClass = pOutFeatWorkspace.CreateFeatureClass(&lt;/span&gt;&lt;br style="font-family: Courier New;" id="vreu"&gt;&lt;div id="kb2o" style="margin-left: 40px;"&gt;&lt;span id="m78_" style="font-family: Courier New;"&gt;sFeatureClassName, pFields, null, null, esriFeatureType.esriFTSimple, "Shape", null);&lt;/span&gt;&lt;br id="c9m6"&gt;&lt;/div&gt;&lt;span id="m78_" style="font-family: Courier New;"&gt;&lt;br id="o4hg"&gt;&lt;font id="ku4c" color="#ff0000"&gt;// Get an insert cursor and a feature buffer&lt;/font&gt;&lt;br id="ezhk"&gt;&lt;br id="tims"&gt;IFeatureCursor pFeatureCursor = pFeatureClass.Insert(true);&lt;br id="jprh"&gt;IFeatureBuffer pFeatureBuffer = pFeatureClass.CreateFeatureBuffer();&lt;br id="ipq6"&gt;&lt;br id="tcur"&gt;&lt;font id="ollo" color="#ff0000"&gt;// Get the indicies for the fields of interest&lt;/font&gt;&lt;br id="dwc:"&gt;&lt;br id="symn"&gt;int iPathFieldIndex = pFeatureBuffer.Fields.FindField("Path");&lt;br id="z2vg"&gt;int iLevelFieldIndex = pFeatureBuffer.Fields.FindField("Level");&lt;br style="font-family: Courier New;" id="xc.j"&gt;&lt;/span&gt;&lt;/blockquote&gt;Note that creating a feature class and adding fields to the class can also be done using several geoprocessing objects, but, once you understand the steps above, it's simpler to do it as described above.&lt;br id="w6-s"&gt;&lt;br id="p4nm"&gt;&lt;font id="f_pm"&gt;&lt;b id="tjr6"&gt;2. Pulling DTED coverage tiles from the FalconView Map Data Manager&lt;/b&gt;&lt;/font&gt;&lt;br id="o4vn"&gt;&lt;br id="k.5-"&gt;The block of code below shows how to enumerate all FalconView map coverage, creating polygons from DTED tiles and adding them to our feature class.  Note that there are three nested loops here.  The outer loop enumerates over all of the data sources in the FalconView coverage database.  The next inner loop enumerates over all of the DTED levels on the data source under consideration (we're only enumerating levels 1 through 3 for now).  The innermost loop enumerates over all of the tiles of the particular DTED level on the particular data source.  A polygon feature is created for each tile of DTED enumerated in the innermost loop and is added to the feature class using the insert cursor.&lt;blockquote id="a2qp"&gt;&lt;font id="mxyb" color="#ff0000"&gt;&lt;span id="nmre" style="font-family: Courier New;"&gt;// Initialize the coverage rowset&lt;/span&gt;&lt;/font&gt;&lt;br style="font-family: Courier New;" id="kcud"&gt;&lt;br style="font-family: Courier New;" id="df_2"&gt;&lt;span id="iy9s" style="font-family: Courier New;"&gt;ICoverageRowset coverageRowset = new CoverageRowsetClass();&lt;/span&gt;&lt;br style="font-family: Courier New;" id="ta01"&gt;&lt;span id="lt1b" style="font-family: Courier New;"&gt;coverageRowset.Initialize("Dted");&lt;/span&gt;&lt;br style="font-family: Courier New;" id="z83v"&gt;&lt;br style="font-family: Courier New;" id="h-ae"&gt;&lt;font id="hkk6" color="#ff0000"&gt;&lt;span id="rqww" style="font-family: Courier New;"&gt;// Enumerate all data sources, cataloging DTED&lt;/span&gt;&lt;/font&gt;&lt;br style="font-family: Courier New;" id="gib0"&gt;&lt;br style="font-family: Courier New;" id="h18x"&gt;&lt;span id="vb_8" style="font-family: Courier New;"&gt;const int FLUSH_INTERVAL = 100; &lt;font id="saxl" color="#ff0000"&gt;// Experiment with this value as needed&lt;/font&gt;&lt;/span&gt;&lt;br style="font-family: Courier New;" id="e1l-"&gt;&lt;span id="kjcp" style="font-family: Courier New;"&gt;int iRowsProcessed = 0;&lt;/span&gt;&lt;br style="font-family: Courier New;" id="qpk9"&gt;&lt;span id="ia5r" style="font-family: Courier New;"&gt;Dictionary&amp;lt;string, object&amp;gt; dictFoldersAdded = new Dictionary&amp;lt;string, object&amp;gt;();&lt;/span&gt;&lt;br style="font-family: Courier New;" id="w39:"&gt;&lt;br style="font-family: Courier New;" id="nw30"&gt;&lt;span id="rvd9" style="font-family: Courier New;"&gt;IDataSourcesRowset dataSourcesRowset = new DataSourcesRowsetClass();&lt;/span&gt;&lt;br style="font-family: Courier New;" id="m0ln"&gt;&lt;span id="q.0j" style="font-family: Courier New;"&gt;dataSourcesRowset.SelectAll(1 &lt;font id="nr-o" color="#ff0000"&gt;/* Online Only */&lt;/font&gt;);&lt;/span&gt;&lt;br style="font-family: Courier New;" id="iliw"&gt;&lt;span id="ty5p" style="font-family: Courier New;"&gt;while (dataSourcesRowset.m_Identity &amp;gt; 0)&lt;/span&gt;&lt;br style="font-family: Courier New;" id="gmrr"&gt;&lt;span id="jc92" style="font-family: Courier New;"&gt;{&lt;/span&gt;&lt;br style="font-family: Courier New;" id="e75j"&gt;&lt;div id="q9jx" style="margin-left: 40px;"&gt;&lt;span id="sbdd" style="font-family: Courier New;"&gt;string sLocalFolderName = dataSourcesRowset.m_LocalFolderName;&lt;/span&gt;&lt;br style="font-family: Courier New;" id="ctib"&gt;&lt;br style="font-family: Courier New;" id="ahqh"&gt;&lt;font id="u3kn" color="#ff0000"&gt;&lt;span id="z6od" style="font-family: Courier New;"&gt;// Enumerate all DTED on this data source&lt;/span&gt;&lt;/font&gt;&lt;br style="font-family: Courier New;" id="mq.-"&gt;&lt;br style="font-family: Courier New;" id="uiqx"&gt;&lt;span id="e.ig" style="font-family: Courier New;"&gt;for (int iDtedLevel = 1; iDtedLevel &amp;lt;= 3; iDtedLevel++)&lt;/span&gt;&lt;br style="font-family: Courier New;" id="kwyr"&gt;&lt;span id="v0.n" style="font-family: Courier New;"&gt;{&lt;/span&gt;&lt;br style="font-family: Courier New;" id="cjr1"&gt;&lt;div id="uyvc" style="margin-left: 40px;"&gt;&lt;span id="mym0" style="font-family: Courier New;"&gt;coverageRowset.SelectByGeoRectAndDS(dataSourcesRowset.m_Identity, iDtedLevel, -90, -180, 90, 180);&lt;/span&gt;&lt;br style="font-family: Courier New;" id="skff"&gt;&lt;br style="font-family: Courier New;" id="x0y5"&gt;&lt;span id="bl:u" style="font-family: Courier New;"&gt;while (coverageRowset.m_LocationSpec != "")&lt;/span&gt;&lt;br style="font-family: Courier New;" id="llk8"&gt;&lt;span id="jt1t" style="font-family: Courier New;"&gt;{&lt;/span&gt;&lt;br style="font-family: Courier New;" id="qimh"&gt;&lt;div id="gtgu" style="margin-left: 40px;"&gt;&lt;font id="dmak" color="#ff0000"&gt;&lt;span id="mgtk" style="font-family: Courier New;"&gt;// Get the path to this DTED tile and skip it if it's already added&lt;/span&gt;&lt;/font&gt;&lt;br style="font-family: Courier New;" id="m388"&gt;&lt;br style="font-family: Courier New;" id="a5od"&gt;&lt;span id="c906" style="font-family: Courier New;"&gt;string sPath = sLocalFolderName + '\' + coverageRowset.m_LocationSpec;&lt;/span&gt;&lt;br style="font-family: Courier New;" id="ep:j"&gt;&lt;br style="font-family: Courier New;" id="eglf"&gt;&lt;span id="a_o8" style="font-family: Courier New;"&gt;if (dictFoldersAdded.ContainsKey(sPath.ToLower()))&lt;/span&gt;&lt;br style="font-family: Courier New;" id="z:u6"&gt;&lt;div id="fy6x" style="margin-left: 40px;"&gt;&lt;span id="xiaw" style="font-family: Courier New;"&gt;goto next_row; &lt;font id="rh:s" color="#ff0000"&gt;// Sometimes can happen when map data server acts up&lt;/font&gt;&lt;/span&gt;&lt;br style="font-family: Courier New;" id="zk6_"&gt;&lt;/div&gt;&lt;span id="o2v4" style="font-family: Courier New;"&gt;dictFoldersAdded[sPath.ToLower()] = null;&lt;/span&gt;&lt;br style="font-family: Courier New;" id="fy.0"&gt;&lt;br style="font-family: Courier New;" id="akxv"&gt;&lt;font id="xola" color="#ff0000"&gt;&lt;span id="eaxp" style="font-family: Courier New;"&gt;// Get the bounds of this DTED tile&lt;/span&gt;&lt;/font&gt;&lt;br style="font-family: Courier New;" id="mj6."&gt;&lt;br style="font-family: Courier New;" id="a13v"&gt;&lt;span id="ysfn" style="font-family: Courier New;"&gt;double dllLat, dllLon, durLat, durLon;&lt;/span&gt;&lt;br style="font-family: Courier New;" id="x9-t"&gt;&lt;span id="np:u" style="font-family: Courier New;"&gt;coverageRowset.GetBounds(out dllLat, out dllLon, out durLat, out durLon);&lt;/span&gt;&lt;br style="font-family: Courier New;" id="u6gu"&gt;&lt;br style="font-family: Courier New;" id="nrcb"&gt;&lt;font id="w_by" color="#ff0000"&gt;&lt;span id="un43" style="font-family: Courier New;"&gt;// Create a polygon from the coverage rectangle&lt;/span&gt;&lt;/font&gt;&lt;br style="font-family: Courier New;" id="y.r4"&gt;&lt;br style="font-family: Courier New;" id="fiaf"&gt;&lt;span id="yj7-" style="font-family: Courier New;"&gt;IPolygon pPolygon = new PolygonClass();&lt;/span&gt;&lt;br style="font-family: Courier New;" id="u3x4"&gt;&lt;span id="ni6e" style="font-family: Courier New;"&gt;IPoint pPoint = new PointClass();&lt;/span&gt;&lt;br style="font-family: Courier New;" id="qx.e"&gt;&lt;span id="qkb6" style="font-family: Courier New;"&gt;IPointCollection pPointCollection = pPolygon as IPointCollection;&lt;/span&gt;&lt;br style="font-family: Courier New;" id="uxpz"&gt;&lt;span id="p97z" style="font-family: Courier New;"&gt;object missing = Type.Missing;&lt;/span&gt;&lt;br style="font-family: Courier New;" id="jtni"&gt;&lt;br style="font-family: Courier New;" id="x4b6"&gt;&lt;span id="eai2" style="font-family: Courier New;"&gt;pPoint.X = dllLon;&lt;/span&gt;&lt;br style="font-family: Courier New;" id="amqc"&gt;&lt;span id="a-ib" style="font-family: Courier New;"&gt;pPoint.Y = dllLat;&lt;/span&gt;&lt;br style="font-family: Courier New;" id="l5.e"&gt;&lt;span id="vbzf" style="font-family: Courier New;"&gt;pPolygon.FromPoint = pPoint;&lt;/span&gt;&lt;br style="font-family: Courier New;" id="fnqy"&gt;&lt;span id="alad" style="font-family: Courier New;"&gt;pPoint.X = durLon;&lt;/span&gt;&lt;br style="font-family: Courier New;" id="wb8n"&gt;&lt;span id="semf" style="font-family: Courier New;"&gt;pPointCollection.AddPoint(pPoint, ref missing, ref missing);&lt;/span&gt;&lt;br style="font-family: Courier New;" id="srsw"&gt;&lt;span id="dt-r" style="font-family: Courier New;"&gt;pPoint.Y = durLat;&lt;/span&gt;&lt;br style="font-family: Courier New;" id="x.cx"&gt;&lt;span id="i5t2" style="font-family: Courier New;"&gt;pPointCollection.AddPoint(pPoint, ref missing, ref missing);&lt;/span&gt;&lt;br style="font-family: Courier New;" id="gnim"&gt;&lt;span id="snpa" style="font-family: Courier New;"&gt;pPoint.X = dllLon;&lt;/span&gt;&lt;br style="font-family: Courier New;" id="r54w"&gt;&lt;span id="d3p." style="font-family: Courier New;"&gt;pPointCollection.AddPoint(pPoint, ref missing, ref missing);&lt;/span&gt;&lt;br style="font-family: Courier New;" id="s8q1"&gt;&lt;span id="bfif" style="font-family: Courier New;"&gt;pPolygon.Close();&lt;/span&gt;&lt;br style="font-family: Courier New;" id="ksy0"&gt;&lt;br style="font-family: Courier New;" id="dba5"&gt;&lt;font id="wbmj" color="#ff0000"&gt;&lt;span id="jtq8" style="font-family: Courier New;"&gt;// Add the polygon to the feature class&lt;/span&gt;&lt;/font&gt;&lt;br style="font-family: Courier New;" id="a79-"&gt;&lt;br style="font-family: Courier New;" id="f2yp"&gt;&lt;span id="vzms" style="font-family: Courier New;"&gt;pFeatureBuffer.Shape = pPolygon;&lt;/span&gt;&lt;br style="font-family: Courier New;" id="r46s"&gt;&lt;span id="s.d:" style="font-family: Courier New;"&gt;pFeatureBuffer.set_Value(iPathFieldIndex, sPath);&lt;/span&gt;&lt;br style="font-family: Courier New;" id="wigb"&gt;&lt;span id="wym:" style="font-family: Courier New;"&gt;pFeatureBuffer.set_Value(iLevelFieldIndex, iDtedLevel);&lt;/span&gt;&lt;br style="font-family: Courier New;" id="l2eh"&gt;&lt;span id="s:2j" style="font-family: Courier New;"&gt;pFeatureCursor.InsertFeature(pFeatureBuffer);&lt;/span&gt;&lt;br style="font-family: Courier New;" id="wl10"&gt;&lt;br style="font-family: Courier New;" id="nh8e"&gt;&lt;font id="yvj1" color="#ff0000"&gt;&lt;span id="ny_y" style="font-family: Courier New;"&gt;// Flush the data from time to time&lt;/span&gt;&lt;/font&gt;&lt;br style="font-family: Courier New;" id="f.g5"&gt;&lt;br style="font-family: Courier New;" id="w6pl"&gt;&lt;span id="m:y_" style="font-family: Courier New;"&gt;if (++iRowsProcessed % FLUSH_INTERVAL == 0) pFeatureCursor.Flush();&lt;/span&gt;&lt;br style="font-family: Courier New;" id="d_s8"&gt;&lt;br style="font-family: Courier New;" id="asw."&gt;&lt;font id="wh2v" color="#ff0000"&gt;&lt;span id="ew.-" style="font-family: Courier New;"&gt;// Move to the next DTED coverage rowset&lt;/span&gt;&lt;/font&gt;&lt;br style="font-family: Courier New;" id="j56p"&gt;&lt;br style="font-family: Courier New;" id="aze_"&gt;&lt;span id="yr4i" style="font-family: Courier New;"&gt;next_row: coverageRowset.MoveNext();&lt;/span&gt;&lt;br style="font-family: Courier New;" id="w_jr"&gt;&lt;/div&gt;&lt;span id="kkfy" style="font-family: Courier New;"&gt;}&lt;/span&gt;&lt;br style="font-family: Courier New;" id="xofy"&gt;&lt;/div&gt;&lt;span id="mtj_" style="font-family: Courier New;"&gt;}&lt;/span&gt;&lt;br style="font-family: Courier New;" id="cih0"&gt;&lt;br style="font-family: Courier New;" id="kac2"&gt;&lt;font id="hs34" color="#ff0000"&gt;&lt;span id="my-0" style="font-family: Courier New;"&gt;// Move to the next FalconView data source&lt;/span&gt;&lt;/font&gt;&lt;br style="font-family: Courier New;" id="nut4"&gt;&lt;br style="font-family: Courier New;" id="goph"&gt;&lt;span id="y._j" style="font-family: Courier New;"&gt;dataSourcesRowset.MoveNext();&lt;/span&gt;&lt;br style="font-family: Courier New;" id="i9h9"&gt;&lt;/div&gt;&lt;span id="z8vd" style="font-family: Courier New;"&gt;}&lt;/span&gt;&lt;br style="font-family: Courier New;" id="cfgb"&gt;&lt;/blockquote&gt;The feature cursor is flushed from time to time during its population and again after all of the DTED tiles have been added to the feature class.  It's important after this step to manually release all of your COM objects so that the lock on the feature class in the geodatabase is removed.  The last step is to create a feature layer from the feature class.  (All of these steps are shown below.)  The feature layer may be directly added to the map.&lt;br id="k23z"&gt;&lt;blockquote id="jo1v"&gt;&lt;font id="hphu" color="#ff0000"&gt;&lt;span id="gci." style="font-family: Courier New;"&gt;// Flush the feature cursor and release COM objects&lt;/span&gt;&lt;/font&gt;&lt;br id="wf7r" style="font-family: Courier New;"&gt;&lt;br id="at.k" style="font-family: Courier New;"&gt;&lt;span id="eou3" style="font-family: Courier New;"&gt;pFeatureCursor.Flush();&lt;/span&gt;&lt;br id="b:d4" style="font-family: Courier New;"&gt;&lt;br id="y:ef" style="font-family: Courier New;"&gt;&lt;span id="p1.n" style="font-family: Courier New;"&gt;Marshal.ReleaseComObject(pFeatureBuffer);&lt;/span&gt;&lt;br id="ft_v" style="font-family: Courier New;"&gt;&lt;span id="j_rm" style="font-family: Courier New;"&gt;Marshal.ReleaseComObject(pFeatureCursor);&lt;/span&gt;&lt;br id="nba8" style="font-family: Courier New;"&gt;&lt;span id="nd_u" style="font-family: Courier New;"&gt;Marshal.ReleaseComObject(pFeatureClass);&lt;/span&gt;&lt;br id="u2l2" style="font-family: Courier New;"&gt;&lt;span id="hlcp" style="font-family: Courier New;"&gt;Marshal.ReleaseComObject(pOutFeatWorkspace);&lt;/span&gt;&lt;br id="xt6s" style="font-family: Courier New;"&gt;&lt;span id="uqph" style="font-family: Courier New;"&gt;Marshal.ReleaseComObject(pOutWorkspace);&lt;/span&gt;&lt;br id="ivy." style="font-family: Courier New;"&gt;&lt;span id="soc1" style="font-family: Courier New;"&gt;Marshal.ReleaseComObject(pOutWorkspaceFactory);&lt;/span&gt;&lt;br id="kguh" style="font-family: Courier New;"&gt;&lt;br id="lbt2" style="font-family: Courier New;"&gt;&lt;font id="lxap" color="#ff0000"&gt;&lt;span id="v0rt" style="font-family: Courier New;"&gt;// Return a DTED feature layer&lt;/span&gt;&lt;/font&gt;&lt;br id="x6el" style="font-family: Courier New;"&gt;&lt;br id="w-xc" style="font-family: Courier New;"&gt;&lt;span id="vcs2" style="font-family: Courier New;"&gt;IWorkspaceFactory pWorkspaceFactory = new FileGDBWorkspaceFactoryClass();&lt;/span&gt;&lt;br id="wt73" style="font-family: Courier New;"&gt;&lt;span id="tvdz" style="font-family: Courier New;"&gt;IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(TempGeodatabaseUtils.TempFileGeodatabase, hWnd);&lt;/span&gt;&lt;br id="og-j" style="font-family: Courier New;"&gt;&lt;span id="yf:2" style="font-family: Courier New;"&gt;IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)pWorkspace;&lt;/span&gt;&lt;br id="pyvg" style="font-family: Courier New;"&gt;&lt;span id="t4ei" style="font-family: Courier New;"&gt;pFeatureClass = pFeatureWorkspace.OpenFeatureClass(sFeatureClassName);&lt;/span&gt;&lt;br id="wef0" style="font-family: Courier New;"&gt;&lt;br id="v16i" style="font-family: Courier New;"&gt;&lt;span id="r_5c" style="font-family: Courier New;"&gt;IFeatureLayer pFeatureLayer = new FeatureLayerClass();&lt;/span&gt;&lt;br id="v0qj" style="font-family: Courier New;"&gt;&lt;span id="uurb" style="font-family: Courier New;"&gt;pFeatureLayer.Name = FV_DTED_LAYER_NAME;&lt;/span&gt;&lt;br id="m-2m" style="font-family: Courier New;"&gt;&lt;span id="cjzs" style="font-family: Courier New;"&gt;pFeatureLayer.FeatureClass = pFeatureClass;&lt;/span&gt;&lt;br id="yq1p" style="font-family: Courier New;"&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-7917750885194747986?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/7917750885194747986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=7917750885194747986' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/7917750885194747986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/7917750885194747986'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2008/04/consuming-falconview-dted-in-gis-editor.html' title='Consuming FalconView DTED in the GIS Editor'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-742712729210338608</id><published>2008-03-28T06:52:00.004-04:00</published><updated>2008-03-28T07:34:09.600-04:00</updated><title type='text'>Integration of FalconView and ArcGIS</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_-qSzNjsg2KI/R-zXqIK6VLI/AAAAAAAABFE/AYF09b-iXZw/s1600-h/fv42.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_-qSzNjsg2KI/R-zXqIK6VLI/AAAAAAAABFE/AYF09b-iXZw/s320/fv42.png" alt="" id="BLOGGER_PHOTO_ID_5182754389944325298" border="0" /&gt;&lt;/a&gt;Starting with version 4.1, FalconView will be able to read and display map documents generated by ArcMap through a plugin overlay which will be shipped and installed with FalconView.  When the user installs ArcGIS, a button that activates the GIS Overlay will appear on the FalconView toolbar.  The early FalconView 4.1 version of the GIS Overlay will allow users to view ArcGIS map documents and data in FalconView and do some limited changes to the way those map documents are displayed. &lt;a href="http://joelodom.googlepages.com/IntegrationofFalconViewandCJMTK.pdf" target="_blank"&gt;This paper&lt;/a&gt; describes the 4.1 effort in some detail.&lt;br /&gt;&lt;br /&gt;(For users who do not have access to an ArcGIS license, FalconView will continue to function normally without the GIS Overlay.  Many FalconView users - perhaps the majority of them - will have access to ArcGIS through the &lt;a href="http://www.cjmtk.com/"&gt;CJMTK&lt;/a&gt; program.)&lt;br /&gt;&lt;br /&gt;I'm quite excited about the project I'm working on now. FalconView 4.2, which is still in development, will not only have all of the features of FalconView 4.1, but it will contain a GIS Editor which is almost like an "ArcMap lite." It will allow editing of map documents and feature classes, spatial queries, access to the ArcGIS geoprocessing libraries, and lots of extras.  The output of the GIS Editor will be drawn as an overlay on the FalconView map.  We're planning to allow users to pull data from existing FalconView overlays (local points, threats, tactical graphics, DAFIF, DTED, etc.) into the GIS Editor so that FalconView data can be used in spatial queries and geoprocessing.  Map documents generated in the FalconView 4.2 GIS Editor can be saved and opened in ArcMap.&lt;br /&gt;&lt;br /&gt;FalconView 4.2 will enter beta testing this summer.  The screen capture included with this entry shows where we are at the moment (click on it to see a larger image.)  It's a big undertaking, but the early results are promising.  Expect some technical discussion of the ArcGIS and FalconView programming involved in this effort in future blog entries here.  Stay tuned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-742712729210338608?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/742712729210338608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=742712729210338608' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/742712729210338608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/742712729210338608'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2008/03/integration-of-falconview-and-arcgis.html' title='Integration of FalconView and ArcGIS'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_-qSzNjsg2KI/R-zXqIK6VLI/AAAAAAAABFE/AYF09b-iXZw/s72-c/fv42.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31165947082919804.post-648487333973224501</id><published>2008-03-27T08:19:00.000-04:00</published><updated>2008-03-27T10:11:49.389-04:00</updated><title type='text'>Welcome to GIS Coder!</title><content type='html'>Welcome to GIS Coder, a blog about all things GIS.  We're going to start this blog with a focus on the technical side of GIS programming, though we may very well branch into other aspects of GIS.&lt;br /&gt;&lt;br /&gt;By way of introduction, I'm Joel Odom, a research scientist at &lt;a href="http://www.gtri.gatech.edu/"&gt;Georgia Tech&lt;/a&gt;.  I'm in the &lt;a href="http://www.falconview.org/"&gt;FalconView&lt;/a&gt; department, and I specialize on the &lt;a href="http://joelodom.googlepages.com/IntegrationofFalconViewandCJMTK.pdf"&gt;integration of FalconView and ArcGIS&lt;/a&gt;.  Because of my background, you'll find me initially doing a lot of talking about these programs.  I'm going to dive into technical aspects as much as my professional responsibilities allow.  As a government funded academic researcher, I expect to get a lot of leeway in sharing my research.&lt;br /&gt;&lt;br /&gt;My aim in this blog is to promote information sharing within the GIS community, to promote the FalconView program - a highly successful program of which I'm proud to be a part - and to promote my own professional development by forcing myself to think outside the walls of my office as I share technology, ideas and news.  That's how the blog is going to start - we'll see where it goes.&lt;br /&gt;&lt;br /&gt;The layout and format of this blog will change over time.  The style of the blog - now informal - and the content of the blog will also surely evolve over time.  I'm open to outside writers and welcome all feedback via the comment system.  Comment moderation will initially be disabled, though I may choose to moderate comments if that becomes a problem.&lt;br /&gt;&lt;br /&gt;(Because FalconView was mostly developed under Department of Defense funding, there are some aspects of the FalconView program which are "sensitive."  By and large, FalconView is, in and of itself, unclassified and not sensitive, though it is export-controlled.  There is a movement underway to create a version of FalconView which is available to export, maybe even open-source.  For more information on the FalconView program itself, you may &lt;a href="mailto:joel.odom@gtri.gatech.edu"&gt;contact me directly&lt;/a&gt;, or you may &lt;a href="http://www.falconview.org/contacts.htm"&gt;contact the FalconView program manager at Georgia Tech&lt;/a&gt;.  Be assured that nothing on this blog will touch on technology that compromises security or intellectual property rights.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31165947082919804-648487333973224501?l=giscoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://giscoder.blogspot.com/feeds/648487333973224501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31165947082919804&amp;postID=648487333973224501' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/648487333973224501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31165947082919804/posts/default/648487333973224501'/><link rel='alternate' type='text/html' href='http://giscoder.blogspot.com/2008/03/welcome-to-gis-coder.html' title='Welcome to GIS Coder!'/><author><name>Joel Odom</name><uri>http://www.blogger.com/profile/05617882424522179979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_-qSzNjsg2KI/R2loJuu6ADI/AAAAAAAAAJg/QnQ9-5X34Jk/S220/images.jpg'/></author><thr:total>0</thr:total></entry></feed>
