<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss version="2.0"><channel><title>ArcExperts.net :: GIS Developer Aggregator</title><link>http://www.ArcExperts.net/rss</link><description>The latest ArcGIS developer postings from around the world.</description><copyright>All Content copyright of the original authors.</copyright><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Arcexperts" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="arcexperts" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><title>Raba Shani :: Publish code using &amp;quot;Insert Code Snippet&amp;quot;</title><description>&lt;p&gt;
This post is a test case
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;div class="csharpcode-wrapper"&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt; 1:&lt;/span&gt; &lt;span class="kwrd"&gt;using&lt;/span&gt; (AddIn.CodeSnippet()) &lt;/pre&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt; 2:&lt;/span&gt; { &lt;/pre&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt; 3:&lt;/span&gt; TestThisMethodInMyBlog();&lt;/pre&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt; 4:&lt;/span&gt; I.HopeItWillFinallyWorkInBothBlogAndRssReaders();&lt;/pre&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt; 5:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
Hope it will work
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.human-debugger.net/aggbug.ashx?id=7cc3c9cd-04b9-493f-87c6-b6e3a2326c40" /&gt;</description><link>http://www.human-debugger.net/PublishCodeUsingQuotInsertCodeSnippetquot.aspx</link><pubDate>2/21/2008 8:58:09 PM</pubDate></item><item><title>Raba Shani :: Preparing to WCF Course - list of tools</title><description>&lt;p&gt;
Next week &lt;a href="http://blogs.microsoft.co.il/blogs/ndobkin/default.aspx"&gt;Nati&lt;/a&gt; &amp;amp;
I going give a two days lecture (&amp;amp; hands-on-labs) about WCF. 
&lt;br /&gt;
I am setting some good tools on my laptop for the presentation, Here is part of the
list I've installed till now:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
TestDriven.net: &lt;a href="http://www.testdriven.net/"&gt;http://www.testdriven.net/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
ZoomIt v1.72:&amp;#160; &lt;a href="http://www.microsoft.com/technet/sysinternals/Miscellaneous/ZoomIt.mspx"&gt;http://www.microsoft.com/technet/sysinternals/Miscellaneous/ZoomIt.mspx&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
ToDo List 2 - for organizing my tasks: &lt;a href="http://www.codeproject.com/KB/applications/todolist2.aspx"&gt;http://www.codeproject.com/KB/applications/todolist2.aspx&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Cool Commands 4.0 (Vs 2008): 
&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
The cool-commands link:&amp;#160; &lt;a href="http://download.deklarit.com/files/gmilano/coolcommands40.zip"&gt;http://download.deklarit.com/files/gmilano/coolcommands40.zip&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Here is a great post about fixing it to work on VS2008: &lt;a href="http://geekswithblogs.net/SoftwareDoneRight/archive/2007/12/12/coolcommands-in-visual-studio-2008.aspx"&gt;http://geekswithblogs.net/SoftwareDoneRight/archive/2007/12/12/coolcommands-in-visual-studio-2008.aspx&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&gt;
&lt;p&gt;
I am still looking for more cool tools. 
&lt;br /&gt;
feel free to leave a post about more cool tools - for a better show (presentation).
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.human-debugger.net/aggbug.ashx?id=0a603d17-3f1f-497d-a2f2-d53346c6e67a" /&gt;</description><link>http://www.human-debugger.net/PreparingToWCFCourseListOfTools.aspx</link><pubDate>2/21/2008 4:17:39 PM</pubDate></item><item><title>Paolo Corti's Blog :: A day with FeatureServer #1</title><description>Some friends already spoke me well about FeatureServer by MetaCarta in the last weeks, so I already was waiting for having a bit of time to get started with it. Then James posted this on his blog, and my curiosity was definitely fired.
So I decided to spend a day for installing and testing it, without [...]</description><link>http://www.paolocorti.net/public/wordpress/index.php/2008/02/21/a-day-with-featureserver-1/</link><pubDate>2/21/2008 12:10:14 PM</pubDate></item><item><title>GeoScrum :: The shape of things to come</title><description>&lt;p&gt;
Yesterday, I wrote about backlogs and what your team includes in them.  Well,
it seems that backlogs are on my mind a lot this week.  Today, I was working
on a backlog for a new project and was considering what should be in it.  How
far ahead should I be looking and what should the granularity of the stories be? 
This brought to mind the idea of planning horizons and prioritization.  
&lt;/p&gt;
        &lt;p&gt;
The backlog I assembled is for the rollout of agile practices throughout our company's
enterprise.  So, I have some things that require immediate attention and some
that I know we won't be considering for a few months.  What I decided was to
create a backlog with several planning horizons embedded in it.  The near term
horizon has stories that are well defined.  The medium range horizon (2-3 months
out) has stories that are defined but are still kind of fuzzy.  And the long
range horizon (3-6 months or more out) has stories that are really just headlines. 
As we move ahead in time, I'll work to increase the granularity of the medium and
long range stories as they get closer to implementation.  We do this on all of
our agile projects.  What is does is effectively reduce the waste of spending
too much upfront time defining the details of a story that may or may not ever be
implemented.
&lt;/p&gt;
        &lt;p&gt;
The next thing I had to do was start prioritizing the stories.  Instead of spending
too much time prioritizing the entire list, I actually went through the list and did
a top ten list of stories.  I know that we aren't going to work through more
than 10 stories in the next 4 weeks, so I think that prioritizing beyond that can
be wasteful as well.  As we complete stories on the top ten list, we'll move
new stories into the top ten to keep it constantly stocked.  
&lt;/p&gt;
        &lt;p&gt;
I think that the use of both of these ideas keeps the backlog in alignment with value
production and reduce waste.  
&lt;/p&gt;
        &lt;img width="0" height="0" src="http://www.chrisspagnuolo.com/aggbug.ashx?id=f66b1c2e-3434-41eb-ab24-7ec2d8eb1292"&gt;&lt;/img&gt;
        &lt;br&gt;
        &lt;hr&gt;&lt;/hr&gt;
© Copyright 2007, ChrisSpagnuolo.com GeoScrum! by Chris Spagnuolo is licensed under
a Creative Commons Attribution 3.0 United States License. 
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=4YZ1r5E"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=4YZ1r5E" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=6e4FyZE"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=6e4FyZE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=96o8Tde"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=96o8Tde" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=YnW2dJE"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=YnW2dJE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=EG1pBTe"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=EG1pBTe" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=InnFZuE"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=InnFZuE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=iXIThfE"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=iXIThfE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=WjZBJ5E"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=WjZBJ5E" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=oDiQ7We"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=oDiQ7We" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisSpagnuolosGeoscrum/~4/238917757" height="1" width="1"/&gt;</description><link>http://feeds.feedburner.com/~r/ChrisSpagnuolosGeoscrum/~3/238917757/TheShapeOfThingsToCome.aspx</link><pubDate>2/21/2008 9:33:39 AM</pubDate></item><item><title>GeoScrum :: What's in your backlog?</title><description>&lt;p&gt;
This morning I was looking over several of our project backlogs and noticed something
that really caught my attention.  In addition to user stories that addressed
the functionality we are developing, our project teams have been adding stories to
the backlog that have nothing to do with project tasks (or maybe they have everything
to do with project tasks).  The stories are about improving processes and practices,
organizational issues, team matters, and even the project structure.  
&lt;/p&gt;
        &lt;p&gt;
I was really happy to see this.  It proved beyond a shadow of a doubt that our
project teams are becoming mature agile practitioners.  They've realized that
the issues uncovered in their retrospectives are important enough to warrant being
put into a backlog.  This ensures that they won't be ignored or forgotten about
when the retrospective is over.  It puts the issues front and center and on par
with development tasks.  And, it makes sure that we are actually going to do
something about them within a time-boxed period.
&lt;/p&gt;
        &lt;p&gt;
So, what's in your backlog?  Is your backlog filled with only development tasks
or does it include stories about improving your team and your practices?  Take
a look today and consider if you need to elevate these non-development stories to
a higher level. 
&lt;/p&gt;
        &lt;img width="0" height="0" src="http://www.chrisspagnuolo.com/aggbug.ashx?id=becf6685-df21-4755-847f-04de4c0e04ca"&gt;&lt;/img&gt;
        &lt;br&gt;
        &lt;hr&gt;&lt;/hr&gt;
© Copyright 2007, ChrisSpagnuolo.com GeoScrum! by Chris Spagnuolo is licensed under
a Creative Commons Attribution 3.0 United States License. 
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=cKtTFFE"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=cKtTFFE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=v58vQeE"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=v58vQeE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=gRzj7Re"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=gRzj7Re" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=Ho6WXrE"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=Ho6WXrE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=DPUukre"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=DPUukre" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=LKdiiRE"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=LKdiiRE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=WKPNFBE"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=WKPNFBE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=bHn6S5E"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=bHn6S5E" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=FVyvpye"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=FVyvpye" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisSpagnuolosGeoscrum/~4/238261058" height="1" width="1"/&gt;</description><link>http://feeds.feedburner.com/~r/ChrisSpagnuolosGeoscrum/~3/238261058/WhatsInYourBacklog.aspx</link><pubDate>2/20/2008 8:43:47 AM</pubDate></item><item><title>Dave Bouwman :: SQL 2008 + VE: Kicking the Tires</title><description>&lt;p&gt;
I spent today doing some research on using SQL 2008 as a back end for a Virtual Earth
application. Here's a rough breakdown of the steps I took to get some stuff up and
running.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Get All the Parts and Pieces&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
First, download the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=3BF4C5CA-B905-4EBC-8901-1D4C1D1DA884&amp;amp;displaylang=en"&gt;November
CTP of SQL Server 2008&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
I originally installed the Express version, but that did not include the Management
Studio. Install the full version by downloading the DVD Image. You can mount the image
using &lt;a href="http://www.magiciso.com/download.htm"&gt;MagicISO Mounter&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
During the installation, select &lt;em&gt;everything&lt;/em&gt; to ensure that you get the Management
Studio and SQL Server Integration Services (aka "SQL Server Business Intelligence
Development Studio"). 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Connecting from Visual Studio 2005&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Download the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=e1109aef-1aa2-408d-aa0f-9df094f993bf&amp;amp;displaylang=en"&gt;Visual
Studio 2005 patch&lt;/a&gt; allows it to connect to SQL 2008
&lt;/p&gt;
&lt;p&gt;
This will allow you to connect to the database engine, and while the connection works,
Visual Studio tries to parse the queries and complains on spatial data types. You
get a message like this, and then the query proceeds.
&lt;/p&gt;
&lt;p&gt;
&lt;img height="216" alt="image" src="http://blog.davebouwman.net/content/binary/WindowsLiveWriter/WorkingwithSQL2008_8DD4/image_b43b7a81-a093-4287-bb51-c2697193a81f.png" width="311" border="0"&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Getting Started...&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I started with John O'Brien's post and code titled &lt;a href="http://www.viawindowslive.com/Articles/VirtualEarth/SQL2008Spatialafirstimpression.aspx"&gt;"Virtual
Earth and SQL 2008 Spatial - a first impression"&lt;/a&gt;. Once I got this running, I started
to experiment with my data.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Loading X,Y Data into SQL 2008 Geometry&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
My test data set has 250,000 records, with a Lat and Long stored as fields in the
table. My first hurdle was to get the table from a SQL 2005 instance to my 2008 instance.
Enter SQL Server Integration Services - Microsoft's ETL platform. This is essentially
an add-in that puts more functionality into Visual Studio. 
&lt;/p&gt;
&lt;p&gt;
I created a new Integration Services Project in Visual Studio...
&lt;/p&gt;
&lt;p&gt;
&lt;img height="344" alt="isp-project" src="http://blog.davebouwman.net/content/binary/WindowsLiveWriter/WorkingwithSQL2008_8DD4/isp-project_7bc0b5c1-4924-4962-b217-19375c04da58.jpg" width="500" border="0"&gt; 
&lt;/p&gt;
&lt;p&gt;
and added an ADO.NET Data Flow Source and an ADO.NET Data Flow Destination to the
design canvas.
&lt;/p&gt;
&lt;p&gt;
&lt;img height="543" alt="IntegrationServices" src="http://blog.davebouwman.net/content/binary/WindowsLiveWriter/WorkingwithSQL2008_8DD4/IntegrationServices_ecb1cfac-0a46-4180-bad1-878d82ad41f4.jpg" width="479" border="0"&gt; 
&lt;/p&gt;
&lt;p&gt;
When setting up the destination, I was prompted to create the table which was handy.
It's important to note that these tools do not know about the spatial data types so
I could not add the geography column until the data was transferred.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Add Geometry Column and Load&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I added the "Location" geography column did this right in SQL Management Studio 2008
- very simple. Then I used some SQL to convert the Latitude / Longitude columns into
points in the Location column:
&lt;/p&gt;
&lt;p&gt;
update&amp;nbsp; TestPoints 
&lt;br&gt;
set location = 
&lt;br&gt;
geography::STPointFromText('Point(' + CAST(Latitude as varchar(50)) + ' ' + cast(Longitude
as varchar(50)) + ')', 4326)&lt;br&gt;
from TestPoints 
&lt;br&gt;
where Latitude is not null and longitude is not null and Latitude &amp;lt;= 90 and latitude
&amp;gt;=-90 
&lt;p&gt;
The data I was working with had a few instances where the Lat and Long were reversed,
hence the where clause. 
&lt;p&gt;
&lt;strong&gt;Viewing in Virtual Earth&lt;/strong&gt; 
&lt;p&gt;
As I mentioned earlier, I used John O'Brien's sample code to get things up and running
quickly. I just had to change the connection string in his code, create some new stored
procs that used my table instead of his, and change the call in his Web Service. And
Voila...&lt;img height="537" alt="pts-in-ve" src="http://blog.davebouwman.net/content/binary/WindowsLiveWriter/WorkingwithSQL2008_8DD4/pts-in-ve_c6cbeda2-399b-44b0-a9e4-c187523e3676.jpg" width="500" border="0"&gt; 
&lt;p&gt;
&lt;strong&gt;Overall Impression&lt;/strong&gt; 
&lt;p&gt;
So this is pretty simple stuff really - show some points on the map. But most of my
effort was in getting SQL 2008 installed with all the bells and whistles, and getting
Visual Studio to talk to it. Beyond that things went really smoothly. 
&lt;p&gt;
No doubt that there are many issues left - not the least of which is actually dealing
with the 250,000 points. Luckily John has a post on &lt;a href="http://www.soulsolutions.com.au/Default.aspx?tabid=103"&gt;implementing
point clustering&lt;/a&gt;! 
&lt;p&gt;
I will also be looking at the Vector Tiling stuff as I've got some polygons that need
to be put into the map as well - but that will be another post! &lt;img width="0" height="0" src="http://blog.davebouwman.net/aggbug.ashx?id=b1cdefb6-d20a-471c-a4fc-b0ed6f26696c" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;hr&gt;
davebouwman.net weblog - copyright 2005-2007 - licensed under a &lt;a href="http://creativecommons.org/licenses/by-nc-sa/2.0/"&gt; Creative
Commons License. &lt;/a&gt;</description><link>http://blog.davebouwman.net/2008/02/14/SQL2008VEKickingTheTires.aspx</link><pubDate>2/13/2008 10:49:55 PM</pubDate></item><item><title>Dave Bouwman :: 2008 ESRI Developer Survey...</title><description>&lt;p&gt;
&lt;img style="margin: 0px 5px 5px 0px" height="100" alt="893383_megafone" src="http://blog.davebouwman.net/content/binary/WindowsLiveWriter/2008ESRIDeveloperSurvey_7A19/893383_megafone_8b083db0-16ca-4c77-bee1-06ce19a18ddd.jpg" width="99" align="left" border="0"&gt;When
I got in this morning I had an email from ESRI asking me to take the &lt;a href="http://surveys.esri.com/qsDisplay.cfm?QS_ID=1434&amp;amp;aprimoID=1373653153602"&gt;2008
ESRI Developer Survey&lt;/a&gt;. I asked the rest of the team and they had not gotten it
(yet?) so I thought I'd shoot the link out to everyone. The survey is a bunch of questions
related to ESRI developer resources - basically what are you using, how often to you
use it, what languages are involved. I'm not sure who all is "officially" invited
to take this, but it seems that anyone can access the survey. So - if you want to
be heard, this is a chance to let ESRI know what you think and what you want. Get
over there and &lt;a href="http://surveys.esri.com/qsDisplay.cfm?QS_ID=1434&amp;amp;aprimoID=1373653153602"&gt;take
the survey&lt;/a&gt;! 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.davebouwman.net/aggbug.ashx?id=6b147f77-7f9c-4de8-bc41-5868627995e9" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;hr&gt;
davebouwman.net weblog - copyright 2005-2007 - licensed under a &lt;a href="http://creativecommons.org/licenses/by-nc-sa/2.0/"&gt; Creative
Commons License. &lt;/a&gt;</description><link>http://blog.davebouwman.net/2008/02/13/2008ESRIDeveloperSurvey.aspx</link><pubDate>2/13/2008 3:40:52 PM</pubDate></item><item><title>Dave Bouwman :: SharpMap Attribute Queries on ShapeFiles</title><description>&lt;p&gt;
I've been doing some work with SharpMap v0.9&amp;nbsp; (from &lt;a href="http://www.codeplex.com/SharpMap"&gt;CodePlex&lt;/a&gt;)
for a windows forms based mapping tool, and while there are quite a few samples which
show how to do basic mapping stuff, it was very difficult to find out how to locate
features using an attribute query.
&lt;/p&gt;
&lt;p&gt;
While SharpMap has a very obvious method for doing spatial queries - 
&lt;/p&gt;
&lt;p&gt;
IProvider.ExecuteIntersectionQuery(Geometry, targetDataSet)
&lt;/p&gt;
&lt;p&gt;
There is no similar method for attribute queries.
&lt;/p&gt;
&lt;p&gt;
After scouring the &lt;a href="http://www.codeplex.com/SharpMap/Thread/List.aspx"&gt;SharpMap
discussions&lt;/a&gt; over at CodePlex, I initially resorted to a bit of a hack - I'd get
the FeatureDataTable from the SharpMap.Data.FeatureDataSet, cast it to a System.Data.DataTable,
and create a DataView with a filter. This worked for showing the attributes in a grid,
but I had no way to get the Features because they are not stored in the DataTable.
&lt;/p&gt;
&lt;p&gt;
I decided to put this on hold for a while and work on some other aspects of the application,
and while debugging I was stepping through the ExecuteIntersectionQuery code in the
ShapeFile provider and saw this:
&lt;/p&gt;
&lt;div style="background: white none repeat scroll 0% 50%; font-size: 10pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: courier new;"&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; i
= 0; i &amp;lt; objectlist.Count; i++)&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;{&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SharpMap.Data.&lt;span style="color: rgb(43, 145, 175);"&gt;FeatureDataRow&lt;/span&gt; fdr
= dbaseFile.GetFeature(objectlist[i], dt);&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fdr.Geometry = ReadGeometry(objectlist[i]);&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (fdr.Geometry
!= &lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (fdr.Geometry.GetBoundingBox().Intersects(bbox))&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;strong&gt;&lt;em&gt;FilterDelegate&lt;/em&gt;&lt;/strong&gt; == &lt;span style="color: blue;"&gt;null&lt;/span&gt; || &lt;strong&gt;&lt;em&gt;FilterDelegate(fdr)&lt;/em&gt;&lt;/strong&gt;)&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
dt.AddRow(fdr);&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;}&lt;/font&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
What was this FilterDelegate? A little searching in the source and found a long comment
section by &lt;a href="http://www.sharpgis.net/"&gt;Morten&lt;/a&gt; that describes how to use
delegates to filter the results returned in a DataSource. You can view the &lt;a href="http://www.koders.com/csharp/fid1DB6AD52538101077B0586E6270E07DBE47A4970.aspx?s=%22myShapeDataSource.FilterDelegate%22#L479"&gt;highlighted
source here&lt;/a&gt; (by the way Koders.com rocks for their indexing of open source code!) 
&lt;/p&gt;
&lt;p&gt;
Since this was buried, I thought I'd show a little code on how to do it. But first
- if you are not familiar with Delegates, they are essentially pointers to functions.&amp;nbsp;
Here are some resources: &lt;a href="http://en.wikipedia.org/wiki/Delegate_%28.NET%29"&gt;Wikipedia
description&lt;/a&gt;, &lt;a href="http://www.codersource.net/csharp_delegates_events.html"&gt;how
they relate to events&lt;/a&gt;, and &lt;a href="http://msdn2.microsoft.com/en-us/library/ms173171%28VS.80%29.aspx"&gt;MSDN
article&lt;/a&gt; on them.
&lt;/p&gt;
&lt;p&gt;
Here's how the filter works: 
&lt;/p&gt;
&lt;p&gt;
As the ExecuteIntersectionQuery is looping over the dataset, it will pass the current
row into the delegate and add the row to the results if the delegate returned true.
Once you dig into the source code, it's actually pretty clear what's going on, but
it would have been nice for this to be exposed in a more obvious manner.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Implementing A Filter&lt;/strong&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
The straight-forward way to do this is create a static method that do the evaluation
and assign that method to the SharpMap.Data.Providers.ShapeFile.FilterMethod . The
code snippet below shows the IsOwnerNameSet filter being used.&amp;nbsp; 
&lt;/p&gt;
&lt;div style="background: white none repeat scroll 0% 50%; font-size: 10pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: courier new;"&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font size="1"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; DoFilter()&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//you
will need to get the vectorLayer from somewhere...&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
SharpMap.Data.Providers.&lt;span style="color: rgb(43, 145, 175);"&gt;ShapeFile&lt;/span&gt; shapeProvider
= (SharpMap.Data.Providers.&lt;span style="color: rgb(43, 145, 175);"&gt;ShapeFile&lt;/span&gt;)vectorLayer.DataSource;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
shapeProvider.FilterDelegate = IsOwnerNameSet;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
SharpMap.Data.&lt;span style="color: rgb(43, 145, 175);"&gt;FeatureDataSet&lt;/span&gt; ds = &lt;span style="color: blue;"&gt;new&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt; SharpMap.Data.FeatureDataSet&lt;/span&gt;();&lt;/font&gt; 
&lt;br&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
vectorLayer.DataSource.ExecuteIntersectionQuery(vectorLayer.Envelope, ds);&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
vectorLayer.DataSource.Close();&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//Be
sure to clear the filter delegate our you won't get anything to draw!&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
shapeProvider.FilterDelegate = &lt;span style="color: blue;"&gt;null&lt;/span&gt;;&amp;nbsp; &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; IsOwnerNameSet(SharpMap.Data.&lt;span style="color: rgb(43, 145, 175);"&gt;FeatureDataRow&lt;/span&gt;&lt;/font&gt; row)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (row[&lt;span style="color: rgb(163, 21, 21);"&gt;"OWNER"&lt;/span&gt;]
!= &lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
This works pretty well if your filter criteria are static - like "is the ownername
set?" But what if your criteria are changing? Since you can't pass additional arguments
to the delegate, the other option is to create static member variables that the delegate
will use to determine that match. This has a bit of a code-smell to me, so I ended
up using Anonymous methods. In the code snippet below I am creating the anonymous
method, and at the same time defining the value it is checking against. In this case
I'm searching for a parcel by owner.
&lt;/p&gt;
&lt;div style="background: white none repeat scroll 0% 50%; font-size: 10pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: courier new;"&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; SelectParcelByOwner(&lt;span style="color: blue;"&gt;string&lt;/span&gt; owner)&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;{&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//Create a delegate&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp; SharpMap.Data.Providers.&lt;span style="color: rgb(43, 145, 175);"&gt;ShapeFile&lt;/span&gt;.&lt;span style="color: rgb(43, 145, 175);"&gt;FilterMethod&lt;/span&gt; filter
= &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;new&lt;/span&gt; SharpMap.Data.Providers.&lt;span style="color: rgb(43, 145, 175);"&gt;ShapeFile&lt;/span&gt;.&lt;span style="color: rgb(43, 145, 175);"&gt;FilterMethod&lt;/span&gt;(&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;delegate&lt;/span&gt;(SharpMap.Data.&lt;span style="color: rgb(43, 145, 175);"&gt;FeatureDataRow&lt;/span&gt; row) &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;(row["OWNER1"&lt;/span&gt;].ToString().ToLower().Contains(owner.ToLower()));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp; );&lt;/font&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
This allows you to specify the value (owner) without resorting to static members. 
&lt;/p&gt;
&lt;p&gt;
Hope this helps people just jumping into SharpMap
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.davebouwman.net/aggbug.ashx?id=ace7ba64-93b5-4529-a705-ccf515ee9a34" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;hr&gt;
davebouwman.net weblog - copyright 2005-2007 - licensed under a &lt;a href="http://creativecommons.org/licenses/by-nc-sa/2.0/"&gt; Creative
Commons License. &lt;/a&gt;</description><link>http://blog.davebouwman.net/2008/02/13/SharpMapAttributeQueriesOnShapeFiles.aspx</link><pubDate>2/12/2008 7:42:51 PM</pubDate></item><item><title>Dave Bouwman :: Castle Windsor: Configuration Candy</title><description>&lt;p&gt;
&lt;img style="margin: 0px 10px 0px 0px" height="123" alt="windsor_rawlogo" src="http://blog.davebouwman.net/content/binary/WindowsLiveWriter/CastleWindsorandDependencyInjection_1412F/windsor_rawlogo_ecbd5566-c327-4d74-b6cc-39ede28fe1e5.gif" width="191" align="left" border="0"&gt; While
it's main purpose is to provide an &lt;a href="http://martinfowler.com/articles/injection.html"&gt;Inversion
of Control container&lt;/a&gt;, and allow you to develop applications that are highly cohesive
yet loosely coupled, a secondary benefit of using the Castle Windsor container is
how it simplifies dealing with configuration files.
&lt;/p&gt;
&lt;p&gt;
Typically if you need to have some external configuration, you'd put this into your
own custom configuration section and write a class which either implemented &lt;a href="http://msdn2.microsoft.com/en-us/library/system.configuration.iconfigurationsectionhandler.aspx"&gt;IConfigurationSectionHandler&lt;/a&gt; or
inherited from &lt;a href="http://msdn2.microsoft.com/en-us/library/system.configuration.configurationsection.aspx"&gt;ConfigurationSection&lt;/a&gt;.
If you needed to change the configuration, you'd need to change these handler classes.
While this is unspeakably better than parsing .ini files, it's still pretty brittle
- especially if you are being agile and refactoring your code to any great extent.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;What is Castle Windsor?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
It's a container that figures out how to create classes, along with all their dependencies,
on the fly, from a configuration file. Somewhat like Configuration Section Handlers,
but it's an awful lot more. For example...
&lt;/p&gt;
&lt;p&gt;
&amp;lt;component id="VirtualEarthTileServiceManager"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
type="ArcDeveloper.TileServer.Core.VirtualEarthTileServiceManager, ArcDeveloper.TileServer.Core"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;parameters&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;services&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dictionary&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;item
key="colorado"&amp;gt;${ColoradoVETileService}&amp;lt;/item&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;item
key="tahoe"&amp;gt;${TahoeVETileService}&amp;lt;/item&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/dictionary&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/services&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/parameters&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/component&amp;gt;
&lt;/p&gt;
&lt;p&gt;
This little snippet of XML defines how the VirtualEarthTileServiceManager should be
created. Basically the type is instantiated, and an IDictionary containing the keys
and items it depends upon is passed into the constructor. The ${somename} notation
refers to other classes in the same configuration - and they use similar syntax to
have their dependencies injected at instantiation.
&lt;/p&gt;
&lt;p&gt;
To actually get a VirtualEarthTileServiceManager, you just use this code...
&lt;/p&gt;
&lt;p&gt;
IWindsorContainer container = new WindsorContainer(new XmlInterpreter());&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
VirtualEarthTileServiceManager veTileManager = container.Resolve&amp;lt;VirtualEarthTileServiceManager&amp;gt;(); 
&lt;p&gt;
The container.Resolve call looks up the name (VirtualEarthTileServiceManager in this
case) and creates the class, with all of it's dependencies.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Learning More&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
This post has just scratched the surface, so I recommend checking out some more information
on Castle Windsor. There are quite a few articles on how Windsor works, but the best
I found are a series of 4 written by Simone Busoli, and you can read them here: &lt;a href="http://dotnetslackers.com/articles/designpatterns/InversionOfControlAndDependencyInjectionWithCastleWindsorContainerPart1.aspx"&gt;Part
1&lt;/a&gt;, &lt;a href="http://dotnetslackers.com/articles/designpatterns/InversionOfControlAndDependencyInjectionWithCastleWindsorContainerPart2.aspx"&gt;Part
2&lt;/a&gt;, &lt;a href="http://dotnetslackers.com/articles/designpatterns/InversionOfControlAndDependencyInjectionWithCastleWindsorContainerPart3.aspx"&gt;Part
3&lt;/a&gt;, and &lt;a href="http://dotnetslackers.com/articles/designpatterns/InversionOfControlAndDependencyInjectionWithCastleWindsorContainerPart4.aspx"&gt;Part
4&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Since I'm also a fan of Scott Hanselman, give a listen to this &lt;a href="http://www.hanselman.com/blog/HanselminutesPodcast32MockObjects.aspx"&gt;podcast
on Mock Objects&lt;/a&gt;, and this one on &lt;a href="http://www.hanselman.com/blog/HanselminutesPodcast55MonoRailAsAlternativeASPNET.aspx"&gt;MonoRail
and the Windsor container&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
For more on the Virtual Earth Tile Service, see this &lt;a href="http://blog.davebouwman.net/2008/02/03/ArcGISServerVirtualEarthTileServerV01ReleaseNotes.aspx"&gt;previous
post&lt;/a&gt;, or check out the &lt;a href="http://www.assembla.com/wiki/show/arcdeveloper"&gt;ArcDeveloper
project&lt;/a&gt; at Assembla.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.davebouwman.net/aggbug.ashx?id=1fb82983-704c-47dc-8206-56f7f6ef66c3" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;hr&gt;
davebouwman.net weblog - copyright 2005-2007 - licensed under a &lt;a href="http://creativecommons.org/licenses/by-nc-sa/2.0/"&gt; Creative
Commons License. &lt;/a&gt;</description><link>http://blog.davebouwman.net/2008/02/12/CastleWindsorConfigurationCandy.aspx</link><pubDate>2/12/2008 3:26:21 PM</pubDate></item><item><title>Raba Shani :: Me moving toward using the C#3.0 features (Linq features, Expression trees &amp;amp; Lambda expressions)</title><description>&lt;p&gt;
I've tried to write a simple code today &lt;em&gt;&lt;strong&gt;GetEverythingButTheFirstElement()&lt;/strong&gt;&lt;/em&gt; -&amp;gt;
a code that get the all elements but the first one.
&lt;/p&gt;
&lt;p&gt;
of course I've started with the old fashioned way:
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 1: &lt;/span&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt;[] firstOne = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;[args.Count()
- 1];&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 2: &lt;/span&gt;&lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i
= 1; i &amp;lt; args.Count(); i++)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 3: &lt;/span&gt;{&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 4: &lt;/span&gt;&amp;#160;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 5: &lt;/span&gt; firstOne[i - 1] = args[i];&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 6: &lt;/span&gt;&amp;#160;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 7: &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
Now I've start refactoring it to something more C#3.0-able and it looks like this
one:
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 1: &lt;/span&gt;&lt;span class="rem"&gt;// The method to use as the predicate
for the where&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 2: &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; GetAllElementsButTheFirstOne(&lt;span class="kwrd"&gt;string&lt;/span&gt; s, &lt;span class="kwrd"&gt;int&lt;/span&gt; i)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 3: &lt;/span&gt;{&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 4: &lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (i == 0)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 5: &lt;/span&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 6: &lt;/span&gt;&amp;#160;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 7: &lt;/span&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 8: &lt;/span&gt;}&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 9: &lt;/span&gt;&amp;#160;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 10: &lt;/span&gt;&lt;span class="rem"&gt;//The usage at my code&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 11: &lt;/span&gt;IEnumerable&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;
secondTemp = args.Where(GetAllElementsButTheFirstOne);&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
Here happen something strange, the secondTemp do not hold objects in it, looks strange?
no! it uses a lazy load thanks to the Linq defaults, so I've added this line at the
end:
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 12: &lt;/span&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt;[] secondOne =
secondTemp.ToArray&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
So I decided to refactor this code a little bit more, I didn't like the string that
the &lt;strong&gt;&lt;em&gt;Where()&lt;/em&gt;&lt;/strong&gt; force me to write, so I've added my own Where:
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 1: &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Extensions&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 2: &lt;/span&gt;{&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 3: &lt;/span&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; IEnumerable&amp;lt;TSource&amp;gt;
Where&amp;lt;TSource&amp;gt;(&lt;span class="kwrd"&gt;this&lt;/span&gt; IEnumerable&amp;lt;TSource&amp;gt; source,
Func&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;, &lt;span class="kwrd"&gt;bool&lt;/span&gt;&amp;gt; predicate)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 4: &lt;/span&gt; &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 5: &lt;/span&gt; {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 6: &lt;/span&gt; &lt;span class="kwrd"&gt;for&lt;/span&gt;(&lt;span class="kwrd"&gt;int&lt;/span&gt; i=0;
i &amp;lt; source.Count(); i++)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 7: &lt;/span&gt; {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 8: &lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (predicate(i))&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 9: &lt;/span&gt; &lt;span class="kwrd"&gt;yield&lt;/span&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt; source.ElementAt(i);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 10: &lt;/span&gt; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 11: &lt;/span&gt; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 12: &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
This looks awesome now I can write it just like this:
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 1: &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; GetAllElementsButTheFirstOne(&lt;span class="kwrd"&gt;int&lt;/span&gt; i)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 2: &lt;/span&gt;{&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 3: &lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (i == 0)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 4: &lt;/span&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 5: &lt;/span&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 6: &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
But Hey, what do you think about this code?
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 1: &lt;/span&gt;IEnumerable&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;
thirdTemp = args.Where((&lt;span class="kwrd"&gt;int&lt;/span&gt; i) =&amp;gt; { &lt;span class="kwrd"&gt;return&lt;/span&gt; i
&amp;gt; 0; });&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
Haaa, now it looks good.
&lt;/p&gt;
&lt;p&gt;
This is not the first time I am writing lambda expression but I still thinking to
my self how much I should read&amp;amp;code so this will be my natural way of thinking...
for now it take me more time to write it than in the casual way.
&lt;/p&gt;
&lt;p&gt;
Cheers.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.human-debugger.net/aggbug.ashx?id=5b6889f5-4715-4bee-bf38-b3931c385e29" /&gt;</description><link>http://www.human-debugger.net/MeMovingTowardUsingTheC30FeaturesLinqFeaturesExpressionTreesAmpLambdaExpressions.aspx</link><pubDate>2/11/2008 3:32:49 PM</pubDate></item><item><title>Raba Shani :: Load config file dynamically (AGX)</title><description>&lt;p&gt;
We are using the ArcGis Explorer as our 3d-Browser, and we would like to create a
task.config file for each task. You can read more at my last post about &lt;em&gt;Load config
file dynamically&lt;/em&gt; (&lt;a href="http://www.human-debugger.net/LoadConfigFileDynamically.aspx"&gt;here&lt;/a&gt;).
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;u&gt;Why this Architecture good for us?&lt;/u&gt;&lt;/strong&gt; 
&lt;br /&gt;
Every one can install its explorer on his computer without any problem, we would like
to add our own Task-Specific configurations for example: server-names to connect to,
task-screen-size, links to web sites etc. 
&lt;br /&gt;
first, such details you cannot be save to the AGX-installation directory because it
already installed. second, we would like to send them again and again every time the
task will be updated and downloaded.
&lt;/p&gt;
&lt;p&gt;
Any way, after reading this we still have two questions to answer:
&lt;/p&gt;
&lt;p&gt;
1) how to get to the tasks directory 
&lt;br /&gt;
2) how to find our specific task
&lt;/p&gt;
&lt;p&gt;
The answers for those questions are pretty simple: 
&lt;br /&gt;
1) To get to the task directory you should use this parameters:
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 1: &lt;/span&gt;Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
+ &lt;span class="str"&gt;@&amp;quot;\ESRI\ArcGIS Explorer\Tasks&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
This answer will solve you the &amp;quot;how to found the tasks directory programmatically&amp;quot;
but you'll still have to find the specific task directory that is interesting you. 
&lt;br /&gt;
Anyway, this is good but not good enough. I would like the E2 API to give me its Environment
parameters and not to force me to code it by myself. It smell like something that
can be change... and I'll be glad if the people at the ArcGis Explorer will create
something like: &lt;em&gt;public static class E2Environemnt&lt;/em&gt; which will implement such
property. For now: we implement our own Environment extensions.
&lt;/p&gt;
&lt;p&gt;
2) To Find the specific task you should dig the black box of E2 and you will find
this cool factory:
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 1: &lt;/span&gt;ESRI.ArcGIS.E2API.E2TaskFactory factory = &lt;span class="kwrd"&gt;new&lt;/span&gt; ESRI.ArcGIS.E2API.E2TaskFactory();&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 2: &lt;/span&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; taskDirectoryName
= factory.GetTaskSubfolderNameFromAssemblyName(currentTask); &lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
So What's the catch I've asked? This is an internal implementation, ESRI don't like
you if you'll use it... (you can read more about &lt;a href="http://forums.esri.com/Thread.asp?c=184&amp;amp;f=2208&amp;amp;t=244117&amp;amp;mc=1"&gt;my
question in the AGX forum&lt;/a&gt;). And I will ask just one simple question, why?! why
not to make it internal or even private class. why we should read it at the XML comments?!
&lt;/p&gt;
&lt;p&gt;
And here is my preferred solution (as Rob answered in the ArcGis Explorer forum),
it make the job for me right now and it is the simple way to do it:
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 1: &lt;/span&gt;System.Reflection.Assembly.GetExecutingAssembly().Location;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
Enjoy.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.human-debugger.net/aggbug.ashx?id=bc09b9b7-1c75-4fb0-8a85-5b611b843717" /&gt;</description><link>http://www.human-debugger.net/LoadConfigFileDynamicallyAGX.aspx</link><pubDate>2/11/2008 10:10:38 AM</pubDate></item><item><title>Raba Shani :: Load config file dynamically</title><description>&lt;p&gt;
There are time you would like to load your configuration data from a specific config
file or maybe even from the config file but not from the main one, I'll explain it
using an example from the real world (last week refactoring). 
&lt;br /&gt;
We have many client which run the ArcGis Explorer (AGX) client (Geographic application
like Google Earth), this client can be installed on each and every client, and it
has its own configuration files. Within our team we write tasks that running on that
AGX. while opening the application it will download to your profile directory the
relevant DLL's for running those tasks. but hey those DLL's will be in a separate
directory, neither in the GAC nor in the AGX executable directory. You can find many
examples for such scenarios.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.human-debugger.net/SiteData/EsriImages/e2dir_and_taskdir.png" /&gt; 
&lt;br /&gt;
&lt;em&gt;Here you can see the two different directories: one for the E2.exe and its config
file, and the specific task DLL's and its config file (Sample.dll.config)&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
All we wanted to make is a Task specific configuration. so we would like it to work
on every other task we will create. 
&lt;br /&gt;
First you might know this bunch of code, this will help you load the Sample.dll.config
file from the wanted directory (The Task directory).
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 1: &lt;/span&gt;&lt;span class="rem"&gt;// Get the application configuration
file path.&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 2: &lt;/span&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; exeFilePath = &lt;span class="str"&gt;@&amp;quot;C:\ShaniData\Projects2008\ConfigHandlerDemo\Sample.dll.config&amp;quot;&lt;/span&gt;; &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 3: &lt;/span&gt;&amp;#160;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 4: &lt;/span&gt;&lt;span class="rem"&gt;// Map to the application configuration
file.&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 5: &lt;/span&gt;ExeConfigurationFileMap configFile = &lt;span class="kwrd"&gt;new&lt;/span&gt; ExeConfigurationFileMap();&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 6: &lt;/span&gt;configFile.ExeConfigFilename = exeFilePath;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 7: &lt;/span&gt;System.Configuration.Configuration config =&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 8: &lt;/span&gt;ConfigurationManager.OpenMappedExeConfiguration(configFile,&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 9: &lt;/span&gt;ConfigurationUserLevel.None);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 10: &lt;/span&gt; &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 11: &lt;/span&gt;ConfigurationSection sec = config.GetSection(&lt;span class="str"&gt;&amp;quot;MailManagerConfiguration&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
In this situation we should use the .Net default ConfigurationSection implementations
(for example: the ApplicationSettingsSection). Those of you who think of using the
DictionarySectionHandler or NameValueSectionHandler will found it returning the DefaultSection
instead.
&lt;/p&gt;
&lt;p&gt;
Pay also attention that your code is running from the AGX installation directory so
if you'll write your own section it won't work unless it was installed on the given
computer (in GAC or in the AGX installation directory).
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.human-debugger.net/aggbug.ashx?id=3c95c06f-d735-4922-bc7a-613b14e1fe24" /&gt;</description><link>http://www.human-debugger.net/LoadConfigFileDynamically.aspx</link><pubDate>2/11/2008 7:38:38 AM</pubDate></item><item><title>Dave Bouwman :: DocProject: .NET Code Documentation Made Easier...</title><description>&lt;p&gt;
If you are a .NET developer I recommend checking out &lt;a href="http://www.codeplex.com/docproject"&gt;DocProject&lt;/a&gt;.
It's an open source front end for the &lt;a href="http://blogs.msdn.com/sandcastle/"&gt;SandCastle&lt;/a&gt; documentation
engine. Sandcastle picks up where NDoc left off, and is a Microsoft open source project
that provides services for creating MSDN style HTML and compiled help. Unfortunately
it's a bit of a bear to work with (lots of Xml configuration files, batch files etc). 
&lt;/p&gt;
&lt;p&gt;
This is where DocProject comes in. The basic process is to add a "DocProject" or "DocSite"
to your solution, and then add references to all the other sites/assemblies in the
solution into the DocProject. Then during a build, DocProject actually runs Sandcastle
to create the doc.
&lt;/p&gt;
&lt;p&gt;
I've only just played with it a little, and it's pretty easy to get setup and running,
but the actual compilation of the help was pretty slow. It was running for &amp;gt;15&amp;nbsp;
minutes on my Core 2 Duo notebook! After digging around a little, it seemed the issue
was that I have some ArcGIS Server WebService proxies in one of the assemblies, and
it was cranking out all the help doc for that - which is substantially larger than
the actual code I was trying to document. Once done, the output is pretty good. 
&lt;/p&gt;
&lt;p&gt;
&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="384" alt="docproject-example" src="http://blog.davebouwman.net/content/binary/WindowsLiveWriter/DocProjectSandcastleDocumentationMadeEa_13857/docproject-example_3.png" width="500" border="0"&gt; 
&lt;/p&gt;
&lt;p&gt;
Combine this with &lt;a href="http://www.roland-weigelt.de/ghostdoc/"&gt;GhostDoc&lt;/a&gt;, and
there is no excuse for not having good developer API documentation for whatever you
write.
&lt;/p&gt;
&lt;p&gt;
Check it out at &lt;a href="http://www.codeplex.com/docproject"&gt;www.codeplex.com/docproject&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.davebouwman.net/aggbug.ashx?id=7a75d425-cdcc-4b32-9444-ba9b88d9ed8f" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;hr&gt;
davebouwman.net weblog - copyright 2005-2007 - licensed under a &lt;a href="http://creativecommons.org/licenses/by-nc-sa/2.0/"&gt; Creative
Commons License. &lt;/a&gt;</description><link>http://blog.davebouwman.net/2008/02/08/DocProjectNETCodeDocumentationMadeEasier.aspx</link><pubDate>2/7/2008 9:16:30 PM</pubDate></item><item><title>GeoScrum :: Town Meeting on Agile</title><description>&lt;p&gt;
          &lt;a name="LETTER.BLOCK3"&gt;
            &lt;font color="#000000"&gt;On Thursday, February 14th, 2008 (Happy
Valentine's Day!) at 11:30am EDT, Michael Mah of QSM Associates, will be hosting a &lt;/font&gt;
          &lt;/a&gt;
          &lt;font color="#000000"&gt;special
"town meeting" event&lt;/font&gt;
          &lt;font color="#000000"&gt; featuring an interview with Kim
Wheeler of Follett Software and &lt;/font&gt;
          &lt;font color="#000000"&gt;Mike Lunt&lt;/font&gt;
          &lt;font color="#000000"&gt; of
BMC Software.  &lt;/font&gt;
        &lt;/p&gt;
        &lt;p&gt;
          &lt;strong&gt;Date:&lt;/strong&gt; Thursday 14 February, 2008&lt;br&gt;&lt;strong&gt;Time:&lt;/strong&gt; 11:30 am EST (New York Time) / 8:30 am PST / 16:30 UTC/GMT&lt;br&gt;&lt;strong&gt;Location:&lt;/strong&gt; Right at your desk! Just log on from your computer.&lt;br&gt;&lt;strong&gt;Duration:&lt;/strong&gt; 60 minutes&lt;br&gt;&lt;strong&gt;Fee:&lt;/strong&gt; Complimentary. 
&lt;/p&gt;
        &lt;p&gt;
          &lt;font color="#000000"&gt;To register for the event, &lt;a href="http://rs6.net/tn.jsp?e=0016MLwP1nans6Nrur1vBiMuLVf-BrDqLZeLLTmyb4BDkpqh6ms-9ANRGOl-eyUkZl9YB7dgZ_Ldcl6nRUN-LXZ2o_IBVZA4Qptu5hBmjUmSMt7eDtYUiUuGvtdy0RjB7PI4b4dckweZTY="&gt;&lt;strong&gt;click
here&lt;/strong&gt;&lt;/a&gt;.&lt;/font&gt;
        &lt;/p&gt;
        &lt;p&gt;
          &lt;font color="#000000"&gt;
            &lt;em&gt;From the QSM Associates Announcement:&lt;/em&gt;
          &lt;/font&gt;
        &lt;/p&gt;
        &lt;blockquote&gt;
          &lt;p&gt;
Why might you care?  If you recall, both &lt;a href="http://rs6.net/tn.jsp?e=0016MLwP1nans4YIqw_fKjRifGntKcbiwdbjrPnt2xEVBH0etaOzhlgZMr-awf7-ZrX_I65CMeCt-tS4GzfcRqWMPZCr7951jPpR_Iujwccsa39Cau8c_kZF16JnSUVH9qnHvYRdoSmcfZ2-G0khwBrLTg4JiijpjzWvwq5HjBJIzY="&gt;Follett&lt;/a&gt; and &lt;a href="http://rs6.net/tn.jsp?e=0016MLwP1nans4SESL9Z697kiFdxOVgBG4QEfXV_2pEnFZYO1O9WnloKvqhBikGD7D8kWLZ-cVEfxpJ40c8wBgH6ZInwUIx4SPGBXDnwCA_mLOwN2LrNpXPE7zwnOzDCbl1gcLAy7Q-I_BCo-fQlzD5ZEl8krnG7tYJAPzWGaVcQYIFIlM_q2jKEaDfrgj2v0yP"&gt;BMC&lt;/a&gt; were
featured as "poster children" - case studies for the fastest time-to-market and lowest
defects for building software applications in two recent webinars I hosted via the
Cutter Consortium.  We measured this using the &lt;a href="http://rs6.net/tn.jsp?e=0016MLwP1nans4KVFs79gS-SV0yNu-L5KbM8FUWB5w0pwM9Yv2oThh4zzW7iTjbhYgYhpawzLaKhMPOeKXjqF6lcD5vtvj2lEQGrtewNZTZmveyxHQqsKSicg=="&gt;QSM
SLIM models&lt;/a&gt; against industry data collected worldwide from years of research. 
These two webinars were among the highest attended at Cutter, and the questions wouldn't
stop coming. so we decided to add this special session and invite you to take part. 
If your management is constantly pressing you to meet tight deadlines, or encouraging
that work just be sent offshore, then you'll want to hear how Kim and Mike dealt with
similar demands and built a world-class, industry-beating agile team.&lt;br&gt;
This event will allow you to ask Kim and Mike questions that they will answer, live
and unrehearsed about what's in their "secret sauce."  The format will be an
interactive Q&amp;amp;A session around the real-world technical and people issues they
addressed and how they "got Agile."  I get to start the session with a PBS-Charlie
Rose style chat, and then we'll open it up to the audience.
&lt;/p&gt;
        &lt;/blockquote&gt;
        &lt;img width="0" height="0" src="http://www.chrisspagnuolo.com/aggbug.ashx?id=3b6a038d-d2f9-4627-bffa-e34ceadc8771"&gt;&lt;/img&gt;
        &lt;br&gt;
        &lt;hr&gt;&lt;/hr&gt;
© Copyright 2007, ChrisSpagnuolo.com GeoScrum! by Chris Spagnuolo is licensed under
a Creative Commons Attribution 3.0 United States License. 
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=tffGLPE"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=tffGLPE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=jeKI67E"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=jeKI67E" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=027IF9e"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=027IF9e" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=rERPHJE"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=rERPHJE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=QQA96te"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=QQA96te" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=VPVBB1E"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=VPVBB1E" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=4p5WVkE"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=4p5WVkE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=L69qALE"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=L69qALE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=jpWgPee"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=jpWgPee" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisSpagnuolosGeoscrum/~4/231202396" height="1" width="1"/&gt;</description><link>http://feeds.feedburner.com/~r/ChrisSpagnuolosGeoscrum/~3/231202396/TownMeetingOnAgile.aspx</link><pubDate>2/7/2008 1:08:19 PM</pubDate></item><item><title>GeoScrum :: Survey: Agile adoption in the GIS industry</title><description>&lt;p&gt;
I've created a brief 10 question survey to gauge the level of agile adoption in the
GIS industry.  The survey takes no longer than 5 minutes to complete and doesn't
require any corporate, personal, or confidential information.  To take the survey &lt;a href="http://www.surveymonkey.com/s.aspx?sm=ZVYGPQ7Lzi61A28IU7t_2f1g_3d_3d"&gt;click
here&lt;/a&gt;.  The survey is being hosted courtesy of &lt;a href="http://www.surveymonkey.com"&gt;SurveyMonkey&lt;/a&gt;. 
I'll publish the results of the survey in the next month or so.
&lt;/p&gt;
        &lt;img width="0" height="0" src="http://www.chrisspagnuolo.com/aggbug.ashx?id=d5758e44-e812-451a-af8f-082d32834ce5"&gt;&lt;/img&gt;
        &lt;br&gt;
        &lt;hr&gt;&lt;/hr&gt;
© Copyright 2007, ChrisSpagnuolo.com GeoScrum! by Chris Spagnuolo is licensed under
a Creative Commons Attribution 3.0 United States License. 
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=tQiGiGE"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=tQiGiGE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=YcvBvsE"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=YcvBvsE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=xIMnO9e"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=xIMnO9e" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=2rLxIdE"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=2rLxIdE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=MQuy8Ee"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=MQuy8Ee" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=q73V0jE"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=q73V0jE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=qPH8PHE"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=qPH8PHE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=D37wY5E"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=D37wY5E" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=zYFRuTe"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=zYFRuTe" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisSpagnuolosGeoscrum/~4/230540523" height="1" width="1"/&gt;</description><link>http://feeds.feedburner.com/~r/ChrisSpagnuolosGeoscrum/~3/230540523/SurveyAgileAdoptionInTheGISIndustry.aspx</link><pubDate>2/6/2008 1:40:36 PM</pubDate></item><item><title>GeoScrum :: Drift happens</title><description>&lt;p&gt;
          &lt;a href="http://www.chrisspagnuolo.com/content/binary/WindowsLiveWriter/Drifthappens_A657/image_2.png"&gt;
            &lt;img style="border-right: 0px; border-top: 0px; margin: 0px 10px 0px 0px; border-left: 0px; border-bottom: 0px" height="123" alt="image" src="http://www.chrisspagnuolo.com/content/binary/WindowsLiveWriter/Drifthappens_A657/image_thumb.png" width="187" align="left" border="0"&gt;&lt;/img&gt;
          &lt;/a&gt; Over
the course of long projects (and some short ones too), the shared understanding of
the project, release, or even iteration goals can drift.  Different team members
remember or interpret project aspects differently over time.  This drift can
result in producing a final product that doesn't satisfy your client's expectations. 
So how do we counter drift throughout the life of a project?  Some say "Write
a vision statement and stick it on the wall?".  I'm not a big fan of "statements". 
I think people get lost in them, and statements, over time, can be open to interpretation
as well.  
&lt;/p&gt;
        &lt;p&gt;
Short of a unifying statement of sorts, how else can you keep your team synchronized
with the goal's of the project, release or iteration?    That's where
the beauty of agile practices comes in.  There are several practices which foster
a cohesive, shared understanding of the goals: the iteration planning meetings, the
iteration review, the retrospectives...but none more than the daily stand-up. 
I think the daily stand-up helps anchor agile teams to their goals more than anything
else.  On a daily basis, drift is kept in check by synchronizing the work underway. 
If teams treat their daily stand-ups more as a synchronization conversation rather
than a status report, I think the daily stand up can go a long way towards preventing
drift from happening.
&lt;/p&gt;
        &lt;img width="0" height="0" src="http://www.chrisspagnuolo.com/aggbug.ashx?id=e81dd68f-c6d6-4be2-aef0-7c62391d881a"&gt;&lt;/img&gt;
        &lt;br&gt;
        &lt;hr&gt;&lt;/hr&gt;
© Copyright 2007, ChrisSpagnuolo.com GeoScrum! by Chris Spagnuolo is licensed under
a Creative Commons Attribution 3.0 United States License. 
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=MmSS4xE"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=MmSS4xE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=H5mdO6E"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=H5mdO6E" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=SO75dfe"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=SO75dfe" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=VgbwrxE"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=VgbwrxE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=5IxShre"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=5IxShre" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=hGvmSOE"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=hGvmSOE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=YPviQCE"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=YPviQCE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=PMwGQ8E"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=PMwGQ8E" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?a=sOMdcZe"&gt;&lt;img src="http://feeds.feedburner.com/~f/ChrisSpagnuolosGeoscrum?i=sOMdcZe" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisSpagnuolosGeoscrum/~4/229760789" height="1" width="1"/&gt;</description><link>http://feeds.feedburner.com/~r/ChrisSpagnuolosGeoscrum/~3/229760789/DriftHappens.aspx</link><pubDate>2/5/2008 10:49:49 AM</pubDate></item><item><title>Paolo Corti's Blog :: Installing PostGIS on Ubuntu</title><description>With this post I will show how to install PostGIS 1.2.1 on Postgres 8.2.5 in Ubuntu 7.10 (but this procedure should work also for previous PostGIS/Postgres/Ubuntu versions) from repositories.
I will also show you how to load and secure GIS data and how to access them with some cool OS GIS Client (QGIS, UDig and gvSIG).
If [...]</description><link>http://www.paolocorti.net/public/wordpress/index.php/2008/01/30/installing-postgis-on-ubuntu/</link><pubDate>1/30/2008 7:29:49 AM</pubDate></item><item><title>Steve's Little world :: Tearoff databases for Mobile Phones - Java DB</title><description>Rick Hillegas
If he covers 2 way replication I will be one happy camper
JavaDB (Sun&amp;#8217;s version of Apache Derby - which is IBM&amp;#8217;s old DB)  is availale on Apache license. Runs on the CDC stack [so where is the list of CDC phones]
It is 2 meg on disk, sweet spot is embedded databases (could be embedded [...]</description><link>http://thesteve0.wordpress.com/2008/01/24/tearoff-databases-for-mobile-phones-java-db/</link><pubDate>1/24/2008 4:37:34 PM</pubDate></item><item><title>Steve's Little world :: Afternoon lighnting</title><description>Darkstar with Mobile for MMPORG
Darkstar is the server infrastucture with a bunch of clients connecting to a lot of servers with some metaserves gluing it all together.
To use it with mobile you need proxy in the middle - so you end up with a 3 tier arch. This guy is working on making a HTTP [...]</description><link>http://thesteve0.wordpress.com/2008/01/24/afternoon-lighnting/</link><pubDate>1/24/2008 4:04:36 PM</pubDate></item><item><title>Steve's Little world :: See again I wasn’t the only one thinking about this</title><description>So it seems other in the blogosphere are talking about frameworks as well
Ping out to InfoQ and Bill de hÓra. I like Bill&amp;#8217;s discussion of leaky abstractions and the comments that follow. Can I please give a shout out to Eelco from Wicket. He has maintained an open mind and a great discussion in all [...]</description><link>http://thesteve0.wordpress.com/2008/01/23/see-again-i-wasnt-the-only-one-thinking-about-this/</link><pubDate>1/23/2008 9:56:54 PM</pubDate></item><item><title>Steve's Little world :: The Future of JavaME development tools</title><description>Wireless toolkit for CLDC
supports more 23 JSRs including OpenGL and SVG
There is a new JSR for J2ME for XML processing which would be good with our openLS service
Worth the price of the conference alone
watching a javaVM working on WinMo6 on the HTC TinyTC - I think it is phoneME but with just a quick browse [...]</description><link>http://thesteve0.wordpress.com/2008/01/23/the-future-of-javame-development-tools/</link><pubDate>1/23/2008 6:24:29 PM</pubDate></item><item><title>Steve's Little world :: Afternoon session</title><description>Sun Spot Talk
Great demos of what you can do with a SunSpot
SunSpot runs the squawk JVM which can run bare metal without an OS.
There is wireless communication and with the accelerometer he built a cool little remote controlled robot. It was not a hardware project - it was a software project, most importantly it was [...]</description><link>http://thesteve0.wordpress.com/2008/01/23/afternoon-session/</link><pubDate>1/23/2008 3:38:59 PM</pubDate></item><item><title>Flat out GIS :: SQL Server 2008 supported by VS 2005 (not 2008!)</title><description>After loading some spatial data into the November CTP release of SQL Server 2008 I opened up VS 2008 Server Explorer and tried to connect a database, but received the error &amp;#8220;Only server versions up to Microsoft SQL Server 2005 are supported.&amp;#8221;  I found a patch for VS 2005, but evidently you&amp;#8217;ll have to [...]</description><link>http://flatoutgis.wordpress.com/2008/01/15/sql-server-2008-supported-by-vs-2005-not-2008/</link><pubDate>1/15/2008 11:42:09 AM</pubDate></item><item><title>Paolo Corti's Blog :: Installing MapServer on Ubuntu</title><description>With this post I will show hot to install MapServer 4.10.3 in Ubuntu 7.10 (but this procedure should work also for previous Ubuntu versions) from repositories.
1) set Ubuntu sources needed for this software
Add universe ( http://archive.ubuntu.com/gutsy/universe ) and multiverse repositories to your sources (by default are not in Ubuntu)

sudo gedit /etc/apt/sources.list

and uncomment this two lines:

deb [...]</description><link>http://www.paolocorti.net/public/wordpress/index.php/2008/01/10/installing-mapserver-in-ubuntu/</link><pubDate>1/10/2008 1:51:38 AM</pubDate></item><item><title>Flat out GIS :: Virtual Earth support for SQL Server 2008?</title><description>I&amp;#8217;m comparing Google Maps versus Virtual Earth right now, and one of the deciding factors is spatial data support.  With the upcoming release of SQL Server 2008 spatial support, will VE be able to read these new WKB and WKT types natively?  I saw a news release from Microsoft indicating several partners have [...]</description><link>http://flatoutgis.wordpress.com/2008/01/03/virtual-earth-support-for-sql-server-2008/</link><pubDate>1/3/2008 12:01:40 PM</pubDate></item><item><title>Brian Flood :: Embedding Virtual Globes in ArcGIS</title><description>&lt;p&gt;Arc2Earth has always had the ability to &lt;a href="http://www.spatialdatalogic.com/CS/blogs/brian_flood/archive/2006/07/07/366.aspx"&gt;display map tiles&lt;/a&gt; from Microsoft, Yahoo and Ask.com [1] as a custom layer in your map. What is new in this beta release is the ability to directly embed the API from Microsoft and Google into ArcMap. You can drape your own data over the existing globes and then use this as an element on your Page Layout for exporting to either paper or digital copies. The process of draping your current map over the globes happens automatically and on a background thread, so its really intuitive to work with and doesn&amp;rsquo;t stall the main thread ArcMap uses for most of its own work [2]. As you change your Map contents in the TOC, the changes are reflected on the globes as well.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt; - I added a &lt;a href="http://video.msn.com/video.aspx?mkt=en-us&amp;amp;user=308755822024637680#"&gt;video here&lt;/a&gt; that shows this functionality in action&lt;/p&gt;&lt;p&gt;&lt;img height="300" src="http://www.spatialdatalogic.com/sdl/public/images/NYC_MapView_Census_sm.png" style="width: 400px; height: 300px" width="400" /&gt;&amp;nbsp;&lt;a href="http://www.spatialdatalogic.com/sdl/public/images/NYC_MapView_Census.png"&gt;larger image&lt;/a&gt;&lt;/p&gt;&lt;p&gt;General&lt;br /&gt;The embedded functionality works by creating new Custom Views for ArcMap. You can access these views from ArcMap&amp;rsquo;s View menu or more commonly, from the small buttons that appear below the main map. You&amp;rsquo;ll notice a couple extra buttons beyond those to toggle the VE/GE views. The first synchronizes the view with your current map view and the second opens the Option page for the current view. &lt;/p&gt;&lt;p&gt;&lt;img height="61" src="http://www.spatialdatalogic.com/sdl/public/images/customviewbar.png" style="width: 182px; height: 61px" width="182" /&gt;&lt;/p&gt;&lt;p&gt;Overlay Data&lt;br /&gt;There are a couple methods to overlay data on the embedded globes. The first is the automatic overlay of the active map data using background generated tiles. You can toggle its visibility and change the transparency manually but everything else is pretty much automatic. The second is to specify a KML, GeoRSS or VE Colleciton feed as an overlay. You can toggle their visibility and optionally have them load when ArcMap is started. Finally, you can overlay any tile layer that has been created for VE or GM. &lt;/p&gt;&lt;p&gt;&lt;img height="300" src="http://www.spatialdatalogic.com/sdl/public/images/VE_Options_sm.png" style="width: 260px; height: 300px" width="260" /&gt;&amp;nbsp; &lt;a href="http://www.spatialdatalogic.com/sdl/public/images/VE_Options.png"&gt;larger image&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Page Layout&lt;br /&gt;While some user may just want to display their data on screen for analysis, most others will want to create a hard copy of the results, this is of course one of the main uses of ArcMap. To accomplish this, A2E creates new menu items under the Insert menu that are only enabled when you are on the Layout View. You can drop any number of VE view elements on the layout and then resize/reposition them as needed. As frame elements, you can also use ArcMap&amp;rsquo;s build-in features to display custom frames, backgrounds or shadows. When you export or print, the higher DPI value is used when&amp;nbsp;drawing the views (see below). The 2D views will not benefit much from the higher DPI but the 3D views look incredible when printed in the higher resolution [3]&lt;/p&gt;&lt;p&gt;&lt;img height="300" src="http://www.spatialdatalogic.com/sdl/public/images/SLOSH_Layout_2_sm.png" style="width: 400px; height: 300px" width="400" /&gt;&amp;nbsp;&lt;a href="http://www.spatialdatalogic.com/sdl/public/images/SLOSH_Layout_2.png"&gt;larger image&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;img height="98" src="http://www.spatialdatalogic.com/sdl/public/images/DPI_Study_sm.png" style="width: 400px; height: 98px" width="400" /&gt;&amp;nbsp;&lt;a href="http://www.spatialdatalogic.com/sdl/public/images/DPI_Study.png"&gt;larger image&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Samples&lt;br /&gt;Here&amp;rsquo;s a sample using data compiled by A2E user Peter Black of &lt;a href="http://www.environmentaldefense.com/home.cfm"&gt;Environmental Defense&lt;/a&gt;. It shows the storm surge risk associated with different categories of hurricanes in the NYC Metropolitan area. On his layout, I added a 3D view of the tip of Manhattan in addition to the 2D map that was originally present. Since the 3D view is a layout element, it can be dragged or sized to best fit the overall design of your layout. It could be the dominant element or just a simple map surround to add context to your display.&amp;nbsp; &lt;/p&gt;&lt;p&gt;&lt;img height="309" src="http://www.spatialdatalogic.com/sdl/public/images/NYC_SLOSH_sm.png" style="width: 400px; height: 309px" width="400" /&gt;300 dpi export - &lt;a href="http://www.spatialdatalogic.com/sdl/public/images/NYC_SLOSH.png"&gt;png&lt;/a&gt;, &lt;a href="http://www.spatialdatalogic.com/sdl/public/images/NYC_SLOSH.pdf"&gt;pdf&lt;/a&gt;&lt;/p&gt;&lt;p&gt;If you are a current Arc2Earth V2 user and want to try out this beta, please feel free to contact me using the link above. All V2 users with Pro or better will get this functionality for free when its out of beta. Also, we are a Gold Sponsor at the ESRI MUG in Philadelphia (Nov 27-29th) and I&amp;rsquo;ll be demoing this functionality live at the show. Please stop by the booth if you have any questions. &lt;/p&gt;&lt;p&gt;&lt;br /&gt;[1] &amp;ndash; Google still does not allow anyone (commercial, educational or non-profit) to embed their map tiles directly into an application. I would hope they change this policy in the future and when/if they do, we will certainly turn this functionality back on for the Google tiles as well. Microsoft requires a license if you will be using thier data for commercial projects.&lt;/p&gt;&lt;p&gt;[2] &amp;ndash; this works really well on multi-core machines, the background tile generation happens independently of the regular ArcMap drawing&lt;/p&gt;&lt;p&gt;[3] &amp;ndash; The Google Earth page layout element is disabled in this beta&lt;/p&gt;&lt;p&gt;Listening To: The National &amp;ndash; Mistaken For Strangers - Boxer&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.spatialdatalogic.com/CS/aggbug.aspx?PostID=12366" width="1" height="1"&gt;</description><link>http://www.spatialdatalogic.com/CS/blogs/brian_flood/archive/2007/11/27/Embedding-Virtual-Globes-in-ArcGIS.aspx</link><pubDate>11/27/2007 5:23:00 AM</pubDate></item><item><title>Richie's Space :: Globe Text Tool for ArcGIS Desktop 9.2</title><description>&lt;p&gt;&lt;a href="http://www.esri.com/software/arcgis/extensions/3danalyst/index.html"&gt;ArcGlobe&lt;/a&gt; does not support layer labeling.  As a workaround, users can use &lt;a href="http://en.wikipedia.org/wiki/ArcMap"&gt;ArcMap&lt;/a&gt; to convert labels to a new or existing &lt;a href="http://support.esri.com/index.cfm?fa=knowledgebase.gisDictionary.search&amp;amp;searchTerm=annotation feature class"&gt;annotation feature class&lt;/a&gt;.  Annotation feature class can be displayed in ArcGlobe as flat billboarded text. &lt;p&gt;The &lt;a href="http://arcscripts.esri.com/details.asp?dbid=15338"&gt;Globe Text Tool&lt;/a&gt; for &lt;a href="http://www.esri.com/software/arcgis/about/desktop_gis.html"&gt;ArcGIS Desktop 9.2&lt;/a&gt; is a developer sample available on &lt;a href="http://arcscripts.esri.com/details.asp?dbid=15338"&gt;ArcScripts&lt;/a&gt; to generate true 3D layer labels.  The ArcScripts download includes full source code.  Below is a screenshot and a short demonstration video from &lt;a href="http://www.youtube.com/watch?v=U5N61jED7OM"&gt;YouTube&lt;/a&gt;.. &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" height=539 alt=image src="http://by1.storage.msn.com/y1pn56RqT1v0mPkMba4a747vGNWOCbMdCu3D4WpU-fha8a2EUjvUqMWQJ4qzhsmodE99HWJXu-zozr800y_vm8Bwp_1miVqcGbh?PARTNER=WRITER" width=648 border=0&gt;  &lt;p&gt; &lt;div style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px"&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-2515607892064890562&amp;page=RSS%3a+Globe+Text+Tool+for+ArcGIS+Desktop+9.2&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=mrrichie.spaces.live.com&amp;amp;GT1=MrRichie"&gt;</description><link>http://MrRichie.spaces.live.com/Blog/cns!DD16C3F34F4D913E!848.entry</link><pubDate>11/26/2007 7:22:42 PM</pubDate></item><item><title>MapWrecker :: Well Known Vs. Rational Vector Delivery - Part 3</title><description>It looks like the boys at Microsoft Research implemented my idea: tiled vectors.  Their demo makes one thing obvious, however.  Douglas-Peucker just doesn't cut it for topologies.  This becomes a non-issue with a pixel-level of detail, but just looks bad in their demo.  Their implementation doesn't seem to preserve existing points between ...</description><link>http://mapwrecker.wordpress.com/2008/02/01/well-known-vs-rational-vector-delivery-part-3/</link><pubDate /></item><item><title>MapWrecker :: LINQ vs LINQ</title><description>I'm just getting into LINQ, and experimenting with what goes on behind the scenes.  LINQ uses the idea of a "DataContext" as an interface to the database, much like the older "DataSet" acts to encapsulate multiple table structures.   One notably lacking feature of LINQ's database-derived classes is the ability to traverse many-to-many relationships ...</description><link>http://mapwrecker.wordpress.com/2007/12/19/linq-to-sql-vs-linq-to-objects/</link><pubDate /></item><item><title>Brian Flood :: Arc2Earth V2 Released</title><description>&lt;p&gt;Arc2Earth V2 was released today! &lt;/p&gt;&lt;p&gt;thanks to everyone who helped out and provided valuable feedback.&lt;/p&gt;&lt;p&gt;head on over to &lt;a href="http://www.arc2earth.com/"&gt;http://www.arc2earth.com&lt;/a&gt; to upgrade or &lt;a href="http://www.arc2earth.net/cs"&gt;http://www.arc2earth.net/cs&lt;/a&gt; to download the new Trial version.&lt;/p&gt;&lt;p&gt;Here&amp;#39;s a quick list of&amp;nbsp;What&amp;#39;s&amp;nbsp;New&amp;nbsp;&lt;/p&gt;&lt;p&gt;Exporter&lt;br /&gt;&amp;bull;&amp;nbsp;New Formats &amp;ndash; KML, KMZ, GeoRSS (Simple), GeoRSS (GML), GeoJson&lt;br /&gt;&amp;bull;&amp;nbsp;Saved target location for automated exports&lt;br /&gt;&amp;bull;&amp;nbsp;File Comments &amp;ndash; Add custom comments or copyright to every file created &lt;br /&gt;&amp;bull;&amp;nbsp;Atom Name and Link Support&lt;br /&gt;&amp;bull;&amp;nbsp;Amazon S3 Storage &amp;ndash; Store all of your exported files on S3 automatically&lt;br /&gt;&amp;bull;&amp;nbsp;KML 2.2 Schema Support&lt;br /&gt;&amp;bull;&amp;nbsp;Additional labeling options&lt;br /&gt;&amp;bull;&amp;nbsp;Field Formatting using ArcMap&amp;rsquo;s built-in support&lt;br /&gt;&amp;bull;&amp;nbsp;Custom Time Formats for KML TimeStamps&lt;br /&gt;&amp;bull;&amp;nbsp;KML Region Support&lt;br /&gt;o&amp;nbsp;Vector Data&lt;br /&gt;o&amp;nbsp;Raster Data&lt;br /&gt;o&amp;nbsp;Vector Data as raster tiles&lt;br /&gt;&amp;bull;&amp;nbsp;Extra KML &amp;ndash; Add custom KML tags to export&lt;br /&gt;o&amp;nbsp;Document&lt;br /&gt;o&amp;nbsp;Individual Layers &lt;br /&gt;&amp;bull;&amp;nbsp;Many bug fixes&lt;/p&gt;&lt;p&gt;Importer&lt;br /&gt;&amp;bull;&amp;nbsp;Completely rewritten&lt;br /&gt;&amp;bull;&amp;nbsp;Import KML, KMZ, GeoRSS (Simple), GeoRSS (GML), AtomPub&lt;br /&gt;&amp;bull;&amp;nbsp;Downloads all nested KML Network Links&lt;br /&gt;&amp;bull;&amp;nbsp;Import an entire folder of files at once&lt;br /&gt;&amp;bull;&amp;nbsp;Import Ground Overlays &amp;ndash; downloaded and georeferenced automatically&lt;br /&gt;&amp;bull;&amp;nbsp;Add/Update/Delete on an existing featureclass (PGDB or SDE)&lt;br /&gt;&amp;bull;&amp;nbsp;Import KML 2.2 Schema&lt;br /&gt;&amp;bull;&amp;nbsp;Schema Templates &amp;ndash; used to parse Placemark Description text into attribute data&lt;br /&gt;&amp;bull;&amp;nbsp;Extra AtomPub/RSS data automatically added to individual attribute fields&lt;/p&gt;&lt;p&gt;Tile Exporter&lt;br /&gt;&amp;bull;&amp;nbsp;New image formats (PNG32, PNG24, PNG8*, Jpeg)&lt;br /&gt;&amp;bull;&amp;nbsp;Advanced KML Superoverlay options&lt;br /&gt;o&amp;nbsp;Mixed image formats &lt;br /&gt;o&amp;nbsp;Mixed image sizes, final layer contains highest resolution&lt;br /&gt;o&amp;nbsp;Visibility of first and final levels is configurable&lt;br /&gt;o&amp;nbsp;Level skipping &amp;ndash; remove additional levels to optimized display&lt;br /&gt;&amp;bull;&amp;nbsp;Antialias tile drawing&lt;br /&gt;&amp;bull;&amp;nbsp;Configuration file viewer scripts location&lt;br /&gt;&amp;bull;&amp;nbsp;Updated Inclusion Mask &amp;ndash; optimized for large extents&lt;br /&gt;&amp;bull;&amp;nbsp;Many bug fixes&lt;/p&gt;&lt;p&gt;Enterprise Scheduler&lt;br /&gt;&amp;bull;&amp;nbsp;Schedule Imports, Vector Exports (KML, KMZ, GeoRSS) and Tile Exports&lt;br /&gt;&amp;bull;&amp;nbsp;Command Line options for all imports/exports&lt;br /&gt;&amp;bull;&amp;nbsp;Post job scripts&lt;br /&gt;&amp;bull;&amp;nbsp;Chained Jobs &amp;ndash; run one job after another completes (ex: import, process, export)&lt;br /&gt;&amp;bull;&amp;nbsp;Run multiple Jobs at the same time&lt;br /&gt;&amp;bull;&amp;nbsp;Many bug fixes&lt;/p&gt;&lt;p&gt;General&lt;br /&gt;&amp;bull;&amp;nbsp;New Toolbar and Menus &amp;ndash; simplified&lt;br /&gt;&amp;bull;&amp;nbsp;New License Manager &amp;ndash; Upgradeable licenses&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.spatialdatalogic.com/CS/aggbug.aspx?PostID=11259" width="1" height="1"&gt;</description><link>http://www.spatialdatalogic.com/CS/blogs/brian_flood/archive/2007/10/12/Arc2Earth-V2-Released.aspx</link><pubDate>10/12/2007 9:17:00 AM</pubDate></item><item><title>Richie's Space :: Exploiting the ESRI Projection Engine</title><description>&lt;p&gt;The &lt;a href="http://www.esri.com/"&gt;ESRI&lt;/a&gt; products &lt;a href="http://www.esri.com/software/arcgis/explorer/index.html"&gt;ArcGIS Explorer&lt;/a&gt;, &lt;a href="http://www.esri.com/software/arcgis/about/desktop_gis.html"&gt;ArcGIS Desktop&lt;/a&gt; and &lt;a href="http://www.esri.com/software/arcgis/arcgisengine/index.html"&gt;ArcGIS Engine&lt;/a&gt; ship with an extremely useful C DLL called the projection engine Library.  The projection engine is used by these products to perform geodetic (or ellipsoidal) computations. &lt;p&gt;The projection engine is fully documented in the &lt;a href="http://edndoc.esri.com/arcsde/9.2/api/capi/geometry/geometry.htm#PE"&gt;SDE C API&lt;/a&gt; and there is a &lt;a href="http://edndoc.esri.com/arcobjects/9.2/CPP_VB6_VBA_VCPP_Doc/COM_Samples_Docs/Geometry/3615c9bc-2964-4fcb-95fc-5e94a1030471.htm"&gt;sample&lt;/a&gt; VB6 wrapper for two functions on the &lt;a href="http://edn.esri.com/"&gt;EDN&lt;/a&gt; web site. &lt;p&gt;The &lt;a href="http://msdn2.microsoft.com/en-us/vbrun/default.aspx"&gt;VB6&lt;/a&gt; sample be easily ported to C# using &lt;a href="http://msdn2.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute.aspx"&gt;DLLImportAttribute&lt;/a&gt;.  However there are two disadvantages of using DLLImport. &lt;ol&gt; &lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Dynamic_link_library"&gt;DLL&lt;/a&gt;s are loaded into memory each time a function is called,  &lt;li&gt;The file and path name to the DLL is hard coded at design time.&lt;/ol&gt; &lt;p&gt;However with &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&amp;amp;displaylang=en"&gt;.NET 2.0&lt;/a&gt; a new method called &lt;a href="http://msdn2.microsoft.com/en-us/library/system.runtime.interopservices.marshal.getdelegateforfunctionpointer(vs.80).aspx"&gt;GetDelegateForFunctionPointer&lt;/a&gt; was added to the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.runtime.interopservices.marshal(VS.80).aspx"&gt;Marshal&lt;/a&gt; class to allow late binding. This meant that external DLLs could be discovered and loaded at runtime. &lt;p&gt;Below is a &lt;a href="http://msdn2.microsoft.com/en-us/vcsharp/default.aspx"&gt;C#&lt;/a&gt; wrapper to the ESRI Projection Engine.  The wrapper is developed as a singleton so that the DLL is only loaded once per application instance.  Additionally, the location of the projection engine library is discovered at runtime from the registry. &lt;p&gt;Here is a example using the projection engine singleton for ArcGIS Explorer to calculate the geodetic distance between &lt;a href="http://maps.google.com/maps?f=q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=London+&amp;amp;ie=UTF8&amp;amp;z=13&amp;amp;om=1"&gt;London&lt;/a&gt; and &lt;a href="http://maps.google.com/maps?f=q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=Paris&amp;amp;ie=UTF8&amp;amp;z=11&amp;amp;iwloc=addr&amp;amp;om=1"&gt;Paris&lt;/a&gt;.  The geodetic distance is the shortest distance between two points on the surface of an ellipsoid.&lt;pre&gt;&lt;span style="color:rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;class&lt;/span&gt; &lt;span style="color:rgb(43,145,175)"&gt;ProjectionEngineTest&lt;/span&gt;{
    &lt;span style="color:rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;void&lt;/span&gt; Main() {
        &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; distance = 0d;
        &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; azimuthForward = 0d;
        &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; azimuthBack = 0d;
        &lt;span style="color:rgb(43,145,175)"&gt;ProjectionEngine&lt;/span&gt; projectionEngine = &lt;span style="color:rgb(43,145,175)"&gt;ProjectionEngineExplorer&lt;/span&gt;.GetInstance();
        projectionEngine.GetGeodesicDistance(
            &lt;span style="color:rgb(43,145,175)"&gt;ProjectionEngine&lt;/span&gt;.GLOBERADIUS,
            0,
            &lt;span style="color:rgb(43,145,175)"&gt;ProjectionEngine&lt;/span&gt;.ToRadians(51.50d),
            &lt;span style="color:rgb(43,145,175)"&gt;ProjectionEngine&lt;/span&gt;.ToRadians(-0.12d),
            &lt;span style="color:rgb(43,145,175)"&gt;ProjectionEngine&lt;/span&gt;.ToRadians(48.86d),
            &lt;span style="color:rgb(43,145,175)"&gt;ProjectionEngine&lt;/span&gt;.ToRadians(2.35d),
            &lt;span style="color:rgb(0,0,255)"&gt;out&lt;/span&gt; distance,
            &lt;span style="color:rgb(0,0,255)"&gt;out&lt;/span&gt; azimuthForward,
            &lt;span style="color:rgb(0,0,255)"&gt;out&lt;/span&gt; azimuthBack);
        &lt;span style="color:rgb(43,145,175)"&gt;MessageBox&lt;/span&gt;.Show(&lt;span style="color:rgb(0,0,255)"&gt;string&lt;/span&gt;.Format(&lt;span style="color:rgb(163,21,21)"&gt;&amp;quot;London to Paris is {0} meters&amp;quot;&lt;/span&gt;, distance.ToString()));               
    }
}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=111 alt=image src="http://by1.storage.msn.com/y1pn56RqT1v0mNoVF21e7oyUNAyQfMKCqNjfmhBSFF_GSHK_KuCXwJMyLy89bzohwnJQpU8SDdEP-l5bOAMjcz-g56lYLGezz7z?PARTNER=WRITER" width=249 border=0&gt; 
&lt;p&gt;Here is the source code to the wrappers.
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Please note that the code and methodology used in this post is not endorsed or supported by ESRI. Use this code at your own risk.&lt;/em&gt;&lt;/strong&gt;&lt;pre&gt;&lt;span style="color:rgb(0,0,255)"&gt;using&lt;/span&gt; System;
&lt;span style="color:rgb(0,0,255)"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span style="color:rgb(0,0,255)"&gt;using&lt;/span&gt; System.IO;
&lt;span style="color:rgb(0,0,255)"&gt;using&lt;/span&gt; System.Runtime.InteropServices;
&lt;span style="color:rgb(0,0,255)"&gt;using&lt;/span&gt; System.Text;
&lt;span style="color:rgb(0,0,255)"&gt;using&lt;/span&gt; System.Windows.Forms;
&lt;span style="color:rgb(0,0,255)"&gt;using&lt;/span&gt; Microsoft.Win32;

&lt;span style="color:rgb(0,0,255)"&gt;namespace&lt;/span&gt; ESRI.ArcGIS.Sample {
    &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; Projection Engine Abstract Class
&lt;/span&gt;    &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;abstract&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;class&lt;/span&gt; &lt;span style="color:rgb(43,145,175)"&gt;ProjectionEngine&lt;/span&gt; {
        &lt;span style="color:rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;const&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; GLOBERADIUS = 6367444.65712259d;
        &lt;span style="color:rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color:rgb(43,145,175)"&gt;GeodesicDistance&lt;/span&gt; m_gd = &lt;span style="color:rgb(0,0,255)"&gt;null&lt;/span&gt;;
        &lt;span style="color:rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color:rgb(43,145,175)"&gt;GeodesicCoordinate&lt;/span&gt; m_gc = &lt;span style="color:rgb(0,0,255)"&gt;null&lt;/span&gt;;

        [&lt;span style="color:rgb(43,145,175)"&gt;DllImport&lt;/span&gt;(&lt;span style="color:rgb(163,21,21)"&gt;&amp;quot;kernel32.dll&amp;quot;&lt;/span&gt;)]
        &lt;span style="color:rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;extern&lt;/span&gt; &lt;span style="color:rgb(43,145,175)"&gt;IntPtr&lt;/span&gt; LoadLibrary(&lt;span style="color:rgb(43,145,175)"&gt;String&lt;/span&gt; dllname);

        [&lt;span style="color:rgb(43,145,175)"&gt;DllImport&lt;/span&gt;(&lt;span style="color:rgb(163,21,21)"&gt;&amp;quot;kernel32.dll&amp;quot;&lt;/span&gt;)]
        &lt;span style="color:rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;extern&lt;/span&gt; &lt;span style="color:rgb(43,145,175)"&gt;IntPtr&lt;/span&gt; GetProcAddress(&lt;span style="color:rgb(43,145,175)"&gt;IntPtr&lt;/span&gt; hModule, &lt;span style="color:rgb(43,145,175)"&gt;String&lt;/span&gt; procname);

        &lt;span style="color:rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;delegate&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;void&lt;/span&gt; &lt;span style="color:rgb(43,145,175)"&gt;GeodesicDistance&lt;/span&gt;(
            [&lt;span style="color:rgb(43,145,175)"&gt;In&lt;/span&gt;] &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; semiMajorAxis,
            [&lt;span style="color:rgb(43,145,175)"&gt;In&lt;/span&gt;] &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; eccentricity,
            [&lt;span style="color:rgb(43,145,175)"&gt;In&lt;/span&gt;] &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; longitude1,
            [&lt;span style="color:rgb(43,145,175)"&gt;In&lt;/span&gt;] &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; latitude1,
            [&lt;span style="color:rgb(43,145,175)"&gt;In&lt;/span&gt;] &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; longitude2,
            [&lt;span style="color:rgb(43,145,175)"&gt;In&lt;/span&gt;] &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; latitude2,
            [&lt;span style="color:rgb(43,145,175)"&gt;Out&lt;/span&gt;] &lt;span style="color:rgb(0,0,255)"&gt;out&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; distance,
            [&lt;span style="color:rgb(43,145,175)"&gt;Out&lt;/span&gt;] &lt;span style="color:rgb(0,0,255)"&gt;out&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; azimuthForward,
            [&lt;span style="color:rgb(43,145,175)"&gt;Out&lt;/span&gt;] &lt;span style="color:rgb(0,0,255)"&gt;out&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; azimuthBack);

        &lt;span style="color:rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;delegate&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;void&lt;/span&gt; &lt;span style="color:rgb(43,145,175)"&gt;GeodesicCoordinate&lt;/span&gt;(
            [&lt;span style="color:rgb(43,145,175)"&gt;In&lt;/span&gt;] &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; semiMajorAxis,
            [&lt;span style="color:rgb(43,145,175)"&gt;In&lt;/span&gt;] &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; eccentricity,
            [&lt;span style="color:rgb(43,145,175)"&gt;In&lt;/span&gt;] &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; longitude1,
            [&lt;span style="color:rgb(43,145,175)"&gt;In&lt;/span&gt;] &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; latitude1,
            [&lt;span style="color:rgb(43,145,175)"&gt;In&lt;/span&gt;] &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; distance,
            [&lt;span style="color:rgb(43,145,175)"&gt;In&lt;/span&gt;] &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; azimuth,
            [&lt;span style="color:rgb(43,145,175)"&gt;Out&lt;/span&gt;] &lt;span style="color:rgb(0,0,255)"&gt;out&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; longitude2,
            [&lt;span style="color:rgb(43,145,175)"&gt;Out&lt;/span&gt;] &lt;span style="color:rgb(0,0,255)"&gt;out&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; latitude2);
        &lt;span style="color:rgb(0,128,0)"&gt;//
&lt;/span&gt;        &lt;span style="color:rgb(0,128,0)"&gt;// CONSTRUCTOR
&lt;/span&gt;        &lt;span style="color:rgb(0,128,0)"&gt;//
&lt;/span&gt;        &lt;span style="color:rgb(0,0,255)"&gt;protected&lt;/span&gt; ProjectionEngine() {
            &lt;span style="color:rgb(43,145,175)"&gt;IntPtr&lt;/span&gt; pe = &lt;span style="color:rgb(43,145,175)"&gt;ProjectionEngine&lt;/span&gt;.LoadLibrary(&lt;span style="color:rgb(0,0,255)"&gt;this&lt;/span&gt;.DLLPath);
            &lt;span style="color:rgb(43,145,175)"&gt;IntPtr&lt;/span&gt; gd = &lt;span style="color:rgb(43,145,175)"&gt;ProjectionEngine&lt;/span&gt;.GetProcAddress(pe, &lt;span style="color:rgb(163,21,21)"&gt;&amp;quot;pe_geodesic_distance&amp;quot;&lt;/span&gt;);
            &lt;span style="color:rgb(43,145,175)"&gt;IntPtr&lt;/span&gt; gc = &lt;span style="color:rgb(43,145,175)"&gt;ProjectionEngine&lt;/span&gt;.GetProcAddress(pe, &lt;span style="color:rgb(163,21,21)"&gt;&amp;quot;pe_geodesic_coordinate&amp;quot;&lt;/span&gt;);

            &lt;span style="color:rgb(0,0,255)"&gt;this&lt;/span&gt;.m_gd = (&lt;span style="color:rgb(43,145,175)"&gt;GeodesicDistance&lt;/span&gt;)&lt;span style="color:rgb(43,145,175)"&gt;Marshal&lt;/span&gt;.GetDelegateForFunctionPointer(
                gd, &lt;span style="color:rgb(0,0,255)"&gt;typeof&lt;/span&gt;(&lt;span style="color:rgb(43,145,175)"&gt;GeodesicDistance&lt;/span&gt;));
            &lt;span style="color:rgb(0,0,255)"&gt;this&lt;/span&gt;.m_gc = (&lt;span style="color:rgb(43,145,175)"&gt;GeodesicCoordinate&lt;/span&gt;)&lt;span style="color:rgb(43,145,175)"&gt;Marshal&lt;/span&gt;.GetDelegateForFunctionPointer(
                gc, &lt;span style="color:rgb(0,0,255)"&gt;typeof&lt;/span&gt;(&lt;span style="color:rgb(43,145,175)"&gt;GeodesicCoordinate&lt;/span&gt;));
        }
        &lt;span style="color:rgb(0,128,0)"&gt;//
&lt;/span&gt;        &lt;span style="color:rgb(0,128,0)"&gt;// PUBLIC METHODS
&lt;/span&gt;        &lt;span style="color:rgb(0,128,0)"&gt;//
&lt;/span&gt;        &lt;span style="color:rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;abstract&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;string&lt;/span&gt; DLLPath { &lt;span style="color:rgb(0,0,255)"&gt;get&lt;/span&gt;;}
        &lt;span style="color:rgb(0,128,0)"&gt;//
&lt;/span&gt;        &lt;span style="color:rgb(0,128,0)"&gt;// PUBLIC METHODS
&lt;/span&gt;        &lt;span style="color:rgb(0,128,0)"&gt;//
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; Returns the geodestic azimuth and distance between two geographic locations.
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;param name=&amp;quot;semiMajorAxis&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt;Semi Major Axis&lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;param name=&amp;quot;eccentricity&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt;Globe Eccentricity&lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;param name=&amp;quot;longitude1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt;From Longitude (radians)&lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;param name=&amp;quot;latitude1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt;From Latitude (radians)&lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;param name=&amp;quot;longitude2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt;To Longitude (radians)&lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;param name=&amp;quot;latitude2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt;To Latitude (radians)&lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;param name=&amp;quot;distance&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt;Returned Geodetic Distance&lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;param name=&amp;quot;azimuthForward&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt;Returned Forward Azimuth (radians)&lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;param name=&amp;quot;azimuthBack&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt;Returned Reverse Azimuth (radians)&lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;void&lt;/span&gt; GetGeodesicDistance(
            &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; semiMajorAxis,
            &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; eccentricity,
            &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; longitude1,
            &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; latitude1,
            &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; longitude2,
            &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; latitude2,
            &lt;span style="color:rgb(0,0,255)"&gt;out&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; distance,
            &lt;span style="color:rgb(0,0,255)"&gt;out&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; azimuthForward,
            &lt;span style="color:rgb(0,0,255)"&gt;out&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; azimuthBack) {
            &lt;span style="color:rgb(0,0,255)"&gt;this&lt;/span&gt;.m_gd(
                semiMajorAxis,
                eccentricity,
                longitude1,
                latitude1,
                longitude2,
                latitude2,
                &lt;span style="color:rgb(0,0,255)"&gt;out&lt;/span&gt; distance,
                &lt;span style="color:rgb(0,0,255)"&gt;out&lt;/span&gt; azimuthForward,
                &lt;span style="color:rgb(0,0,255)"&gt;out&lt;/span&gt; azimuthBack);
        }
        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; Returns the geographic location based on the azimuth and distance from another geographic location
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;param name=&amp;quot;semiMajorAxis&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt;Semi Major Axis&lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;param name=&amp;quot;eccentricity&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt;Globe Eccentricity&lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;param name=&amp;quot;longitude1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt;From Longitude (radians)&lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;param name=&amp;quot;latitude1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt;From Latitude (radians)&lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;param name=&amp;quot;distance&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt;Distance from &amp;quot;From Location&amp;quot;&lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;param name=&amp;quot;azimuth&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt;Azimuth from &amp;quot;From Location&amp;quot;&lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;param name=&amp;quot;longitude2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt;Out Logitude (in radians)&lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;param name=&amp;quot;latitude2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt;Out Latitude (in radians)&lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;void&lt;/span&gt; GetGeodesicCoordinate(
            &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; semiMajorAxis,
            &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; eccentricity,
            &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; longitude1,
            &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; latitude1,
            &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; distance,
            &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; azimuth,
            &lt;span style="color:rgb(0,0,255)"&gt;out&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; longitude2,
            &lt;span style="color:rgb(0,0,255)"&gt;out&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; latitude2) {
            &lt;span style="color:rgb(0,0,255)"&gt;this&lt;/span&gt;.m_gc(
                semiMajorAxis,
                eccentricity,
                longitude1,
                latitude1,
                distance,
                azimuth,
                &lt;span style="color:rgb(0,0,255)"&gt;out&lt;/span&gt; longitude2,
                &lt;span style="color:rgb(0,0,255)"&gt;out&lt;/span&gt; latitude2);
        }
        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; Converts Radians to Decimal Degrees.
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;param name=&amp;quot;degrees&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt;In angle in decimal degrees.&lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt;Returns angle in radians.&lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/returns&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; ToRadians(&lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; degrees) { &lt;span style="color:rgb(0,0,255)"&gt;return&lt;/span&gt; degrees * (&lt;span style="color:rgb(43,145,175)"&gt;Math&lt;/span&gt;.PI / 180d); }
        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; Converts Radians to Decimal Degrees.
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;param name=&amp;quot;radians&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt;In angle in radians.&lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt;Returns angle in decimal degrees.&lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/returns&amp;gt;
&lt;/span&gt;        &lt;span style="color:rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; ToDegrees(&lt;span style="color:rgb(0,0,255)"&gt;double&lt;/span&gt; radians) { &lt;span style="color:rgb(0,0,255)"&gt;return&lt;/span&gt; radians * (180d / &lt;span style="color:rgb(43,145,175)"&gt;Math&lt;/span&gt;.PI); }
    }
    &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; Projection Engine Singleton for ArcGIS Explorer
&lt;/span&gt;    &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;sealed&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;class&lt;/span&gt; &lt;span style="color:rgb(43,145,175)"&gt;ProjectionEngineExplorer&lt;/span&gt; : &lt;span style="color:rgb(43,145,175)"&gt;ProjectionEngine&lt;/span&gt; {
        &lt;span style="color:rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color:rgb(43,145,175)"&gt;ProjectionEngineExplorer&lt;/span&gt; projectionEngine;
        &lt;span style="color:rgb(0,128,0)"&gt;//
&lt;/span&gt;        &lt;span style="color:rgb(0,128,0)"&gt;// PUBLIC METHODS
&lt;/span&gt;        &lt;span style="color:rgb(0,128,0)"&gt;//
&lt;/span&gt;        &lt;span style="color:rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color:rgb(43,145,175)"&gt;ProjectionEngineExplorer&lt;/span&gt; GetInstance() {
            &lt;span style="color:rgb(0,0,255)"&gt;if&lt;/span&gt; (projectionEngine == &lt;span style="color:rgb(0,0,255)"&gt;null&lt;/span&gt;) {
                projectionEngine = &lt;span style="color:rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color:rgb(43,145,175)"&gt;ProjectionEngineExplorer&lt;/span&gt;();
            }
            &lt;span style="color:rgb(0,0,255)"&gt;return&lt;/span&gt; projectionEngine;
        }
        &lt;span style="color:rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;override&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;string&lt;/span&gt; DLLPath {
            &lt;span style="color:rgb(0,0,255)"&gt;get&lt;/span&gt; {
                &lt;span style="color:rgb(43,145,175)"&gt;RegistryKey&lt;/span&gt; coreRuntime = &lt;span style="color:rgb(43,145,175)"&gt;Registry&lt;/span&gt;.LocalMachine.OpenSubKey(
                    &lt;span style="color:rgb(163,21,21)"&gt;@&amp;quot;SOFTWARE\ESRI\E2\CoreRuntime&amp;quot;&lt;/span&gt;, &lt;span style="color:rgb(0,0,255)"&gt;false&lt;/span&gt;);
                &lt;span style="color:rgb(0,0,255)"&gt;object&lt;/span&gt; installDir = coreRuntime.GetValue(&lt;span style="color:rgb(163,21,21)"&gt;&amp;quot;InstallDir&amp;quot;&lt;/span&gt;, &lt;span style="color:rgb(0,0,255)"&gt;null&lt;/span&gt;);
                coreRuntime.Close();
                &lt;span style="color:rgb(0,0,255)"&gt;string&lt;/span&gt; folder = installDir.ToString();
                &lt;span style="color:rgb(0,0,255)"&gt;string&lt;/span&gt; bin = &lt;span style="color:rgb(43,145,175)"&gt;Path&lt;/span&gt;.Combine(folder, &lt;span style="color:rgb(163,21,21)"&gt;&amp;quot;bin&amp;quot;&lt;/span&gt;);
                &lt;span style="color:rgb(0,0,255)"&gt;string&lt;/span&gt; pedll = &lt;span style="color:rgb(43,145,175)"&gt;Path&lt;/span&gt;.Combine(bin, &lt;span style="color:rgb(163,21,21)"&gt;&amp;quot;pe.dll&amp;quot;&lt;/span&gt;);
                &lt;span style="color:rgb(0,0,255)"&gt;return&lt;/span&gt; pedll;
            }
        }
    }
    &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; Projection Engine Singleton for ArcGIS Desktop
&lt;/span&gt;    &lt;span style="color:rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color:rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(128,128,128)"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;    &lt;span style="color:rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;sealed&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;class&lt;/span&gt; &lt;span style="color:rgb(43,145,175)"&gt;ProjectionEngineDesktop&lt;/span&gt; : &lt;span style="color:rgb(43,145,175)"&gt;ProjectionEngine&lt;/span&gt; {
        &lt;span style="color:rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color:rgb(43,145,175)"&gt;ProjectionEngineDesktop&lt;/span&gt; projectionEngine;
        &lt;span style="color:rgb(0,128,0)"&gt;//
&lt;/span&gt;        &lt;span style="color:rgb(0,128,0)"&gt;// PUBLIC METHODS
&lt;/span&gt;        &lt;span style="color:rgb(0,128,0)"&gt;//
&lt;/span&gt;        &lt;span style="color:rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color:rgb(43,145,175)"&gt;ProjectionEngineDesktop&lt;/span&gt; GetInstance() {
            &lt;span style="color:rgb(0,0,255)"&gt;if&lt;/span&gt; (projectionEngine == &lt;span style="color:rgb(0,0,255)"&gt;null&lt;/span&gt;) {
                projectionEngine = &lt;span style="color:rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color:rgb(43,145,175)"&gt;ProjectionEngineDesktop&lt;/span&gt;();
            }
            &lt;span style="color:rgb(0,0,255)"&gt;return&lt;/span&gt; projectionEngine;
        }
        &lt;span style="color:rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;override&lt;/span&gt; &lt;span style="color:rgb(0,0,255)"&gt;string&lt;/span&gt; DLLPath {
            &lt;span style="color:rgb(0,0,255)"&gt;get&lt;/span&gt; {
                &lt;span style="color:rgb(43,145,175)"&gt;RegistryKey&lt;/span&gt; coreRuntime = &lt;span style="color:rgb(43,145,175)"&gt;Registry&lt;/span&gt;.LocalMachine.OpenSubKey(
                    &lt;span style="color:rgb(163,21,21)"&gt;@&amp;quot;SOFTWARE\ESRI\CoreRuntime&amp;quot;&lt;/span&gt;, &lt;span style="color:rgb(0,0,255)"&gt;false&lt;/span&gt;);
                &lt;span style="color:rgb(0,0,255)"&gt;object&lt;/span&gt; installDir = coreRuntime.GetValue(&lt;span style="color:rgb(163,21,21)"&gt;&amp;quot;InstallDir&amp;quot;&lt;/span&gt;, &lt;span style="color:rgb(0,0,255)"&gt;null&lt;/span&gt;);
                coreRuntime.Close();
                &lt;span style="color:rgb(0,0,255)"&gt;string&lt;/span&gt; folder = installDir.ToString();
                &lt;span style="color:rgb(0,0,255)"&gt;string&lt;/span&gt; bin = &lt;span style="color:rgb(43,145,175)"&gt;Path&lt;/span&gt;.Combine(folder, &lt;span style="color:rgb(163,21,21)"&gt;&amp;quot;bin&amp;quot;&lt;/span&gt;);
                &lt;span style="color:rgb(0,0,255)"&gt;string&lt;/span&gt; pedll = &lt;span style="color:rgb(43,145,175)"&gt;Path&lt;/span&gt;.Combine(bin, &lt;span style="color:rgb(163,21,21)"&gt;&amp;quot;pe.dll&amp;quot;&lt;/span&gt;);
                &lt;span style="color:rgb(0,0,255)"&gt;return&lt;/span&gt; pedll;
            }
        }
    }
}
&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-2515607892064890562&amp;page=RSS%3a+Exploiting+the+ESRI+Projection+Engine&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=mrrichie.spaces.live.com&amp;amp;GT1=MrRichie"&gt;</description><link>http://MrRichie.spaces.live.com/Blog/cns!DD16C3F34F4D913E!806.entry</link><pubDate>9/27/2007 6:55:45 PM</pubDate></item><item><title>ADC Developer Blog :: ESRI.ArcGIS.Geoprocessor 9.2 SP3 syntax changes</title><description>&lt;table border="0" width="100%"&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td class="postMessage" colspan="2"&gt;
			&lt;p&gt;
			In testing out some of the methods in the new 9.2 managed Geoprocessor assembly, I stumbled a bit with the parameter syntax.&amp;nbsp; I was testing in a SP2 environment and enountered the error described below.&amp;nbsp;&amp;nbsp;Having&amp;nbsp;found this doc and applied SP3, my testing now works as expected and I can code with some consistency.&amp;nbsp; &amp;nbsp; 
			&lt;/p&gt;
			&lt;p&gt;
			&lt;strong&gt;&lt;a href="http://support.esri.com/index.cfm?fa=knowledgebase.techarticles.articleShow&amp;amp;d=33441"&gt;http://support.esri.com/index.cfm?fa=knowledgebase.techarticles.articleShow&amp;amp;d=33441&lt;/a&gt;&lt;/strong&gt;
			&lt;/p&gt;
			&lt;p&gt;
			&lt;strong&gt;FAQ: &amp;nbsp;What are the changes in the ESRI.ArcGIS.Geoprocessor assembly in ArcGIS 9.2 Service Pack 3?&lt;/strong&gt;
			&lt;/p&gt;
			&lt;p&gt;
			&lt;table border="0" class="docMeta"&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;th valign="top"&gt;Article ID:&lt;/th&gt;
						&lt;td valign="top"&gt;33441&lt;/td&gt;
					&lt;/tr&gt;
					&lt;tr&gt;
						&lt;th valign="top"&gt;Software:&lt;/th&gt;
						&lt;td valign="top"&gt;&amp;nbsp;&lt;strong&gt;ArcGIS - ArcEditor&lt;/strong&gt; 9.2&amp;nbsp;&lt;strong&gt;ArcGIS - ArcInfo&lt;/strong&gt; 9.2&amp;nbsp;&lt;strong&gt;ArcGIS - ArcView&lt;/strong&gt; 9.2&amp;nbsp;&lt;strong&gt;ArcGIS Engine Developer Kit&lt;/strong&gt; 9.2&amp;nbsp;&lt;strong&gt;ArcGIS Engine Runtime&lt;/strong&gt; 9.2&amp;nbsp;&lt;strong&gt;ArcGIS Server&lt;/strong&gt; 9.2&lt;/td&gt;
					&lt;/tr&gt;
					&lt;tr&gt;
						&lt;th valign="top"&gt;Platforms:&lt;/th&gt;
						&lt;td valign="top"&gt;&amp;nbsp;&lt;strong&gt;Windows&lt;/strong&gt; 2000, XP, 2003Server&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
			&lt;/p&gt;
			&lt;h4&gt;Question&lt;/h4&gt;
			&lt;div&gt;
			What are the changes in the ESRI.ArcGIS.Geoprocessor assembly in ArcGIS 9.2 Service Pack 3?
			&lt;/div&gt;
			&lt;p&gt;
			&lt;strong&gt;Answer&lt;/strong&gt;
			&lt;/p&gt;
			&lt;div&gt;
			ArcGIS 9.2 includes a new .NET assembly called the ESRI.ArcGIS.Geoprocessor. This assembly contains a managed class called the Geoprocessor. Each toolbox provided by ESRI is also represented by a managed assembly. In each toolbox assembly there are classes representing each geoprocessing tool. Tool classes are used to set up and run a tool with the Geoprocessor. &lt;br /&gt;
			&lt;br /&gt;
			Prior to Service Pack 3 for ArcGIS 9.2, the software had a bug with any .NET tool class containing a property that represented a Boolean parameter. The tool to be executed expects a string representing a valid keyword rather than &amp;#39;true&amp;#39; or &amp;#39;false&amp;#39;. For instance, the values for the Location property on the Near class are &amp;#39;LOCATION&amp;#39; and &amp;#39;NO_LOCATION&amp;#39;. Since the property type was Boolean, only &amp;#39;true&amp;#39; or &amp;#39;false&amp;#39; could be set. The result was that the tool failed to execute, displaying the error message, &amp;quot;The input parameter to location is not within the domain.&amp;quot; &lt;br /&gt;
			&lt;br /&gt;
			The workaround was to execute the tool by name using a Variant Array as shown here: &lt;br /&gt;
			&lt;br /&gt;
			&lt;div style="width: 500px; font-family: courier; background-color: whitesmoke; border: #cccccc 2px solid; padding: 0.5em"&gt;
			&lt;pre style="margin: 0px; padding: 0px"&gt;
			           // Initialize the Geoprocessor
			Geoprocessor GP = new Geoprocessor();
			// Generate the array of parameters.
			IVariantArray parameters = new VarArrayClass();
			parameters.Add(@&amp;quot;C:\redlands.mdb\allInOneWGS84\control_WGS84&amp;quot;);
			parameters.Add(@&amp;quot;C:\redlands.mdb\rdlsControl\control&amp;quot;);
			parameters.Add(&amp;quot;500 METTER&amp;quot;);
			parameters.Add(&amp;quot;LOCATION&amp;quot;);
			// Execute Near by name.
			GP.Execute(&amp;quot;Near&amp;quot;, parameters, null);
			if (GP.MessageCount &amp;gt; 0)
			{
			for (int Count = 0; Count &amp;lt;= GP.MessageCount - 1; Count++)
			{
			Console.WriteLine(GP.GetMessage(Count));
			}
			}
			&lt;/pre&gt;
			&lt;/div&gt;
			&lt;br /&gt;
			&lt;br /&gt;
			&lt;br /&gt;
			Some tools allowed the user to enter &amp;#39;false&amp;#39; as the property value and the code compiled successfully, such as Feature Class To Coverage. In ArcGIS 9.2 Service Pack 3, the fix required the keyword for all Boolean parameters. If a user sets &amp;#39;false&amp;#39; as the property value, the .NET program fails to compile. In this situation, previously compiled code results in a runtime error. The valid code for Service Pack 3 is now written like this: &lt;br /&gt;
			&lt;br /&gt;
			&lt;br /&gt;
			&lt;div style="width: 500px; font-family: courier; background-color: whitesmoke; border: #cccccc 2px solid; padding: 0.5em"&gt;
			&lt;pre style="margin: 0px; padding: 0px"&gt;
			           // Initialize the Geoprocessor
			Geoprocessor GP = new Geoprocessor();
			// Initialize the Near tool
			Near neartool = new Near();
			neartool.input_features = (@&amp;quot;C:\redlands.mdb\allInOneWGS84\control_WGS84&amp;quot;);
			neartool.near_features = (@&amp;quot;C:\redlands.mdb\rdlsControl\control&amp;quot;);
			neartool.search_radius = &amp;quot;500 METERS&amp;quot;;
			neartool.Location = &amp;quot;LOCATION&amp;quot;;
			GP.Execute(neartool, null):
			&lt;/pre&gt;
			&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;</description><link>http://www.adcomaha.com/ADCBlog/post/ESRIArcGISGeoprocessor-92-SP3-syntax-changes-.aspx</link><pubDate>9/21/2007 12:20:00 PM</pubDate></item><item><title>MapWrecker :: Well Known Vs. Rational Vector Delivery - Part 2</title><description>Today I coded up a little toy application.  It limits the number of vertices displayed according to zoom level.  Very simple.  Its the pre-game to tiled vector datasets. 



Winners:  NetTopologySuite and SharpMap.  They let me write this in under 80 lines of code.

Losers: Me!  I skipped out on rock-climbing, a movie, and beer ...</description><link>http://mapwrecker.wordpress.com/2007/08/24/rational-vector-delivery-pre-game/</link><pubDate /></item><item><title>Flat out GIS :: Firefox tabs for ArcGIS Server Dev</title><description>When I start developing I know I&amp;#8217;m automatically going to be visiting several reference web sites.  After a while, I got annoyed that I was repeatedly opening the same sites every day.   So I figured out a way to eliminate the extra mouse moves and keyboard strokes.  I&amp;#8217;m a big proponent [...]</description><link>http://flatoutgis.wordpress.com/2007/11/06/firefox-tabs-for-arcgis-server-dev/</link><pubDate>11/6/2007 8:23:43 PM</pubDate></item><item><title>Richie's Space :: Introducing Time Navigator for ArcGIS Explorer</title><description>&lt;p&gt;&lt;a href="http://www.esri.com/software/arcgis/explorer/index.html"&gt;ArcGIS Explorer&lt;/a&gt; is a free 3D viewer by &lt;a href="http://www.esri.com"&gt;ESRI&lt;/a&gt;.  Time Navigator extends ArcGIS Explorer by allow users to playback of historic data. &lt;p&gt;Time Navigator can animate any ESRI &lt;a href="http://en.wikipedia.org/wiki/Shapefile"&gt;Shapefile&lt;/a&gt; with &lt;a href="http://en.wikipedia.org/wiki/Point_(geometry)"&gt;point&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Geometry"&gt;geometry&lt;/a&gt; and a timestamp field.  The timestamp fields can be date, numeric or textual. Time Navigator is developed as a &lt;a href="http://edndoc.esri.com/arcobjects/9.2/Explorer/webframe.html"&gt;custom task&lt;/a&gt; for ArcGIS Explorer &lt;a href="http://gisupdates.esri.com/ArcGISExplorer/Build410/ArcGISExplorerDownload.exe"&gt;build 410&lt;/a&gt; and can be downloaded from downloaded from &lt;a href="http://arcscripts.esri.com/details.asp?dbid=15271"&gt;ArcScripts&lt;/a&gt; (source code is included). &lt;p&gt;Below is a brief video demonstrating showing Time Navigator animating and comparing Atlantic hurricanes from 1971 and 1981. &lt;p&gt; &lt;div style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px"&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt; &lt;div style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/ArcGIS Explorer" rel=tag&gt;ArcGIS Explorer&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Time Navigator" rel=tag&gt;Time Navigator&lt;/a&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-2515607892064890562&amp;page=RSS%3a+Introducing+Time+Navigator+for+ArcGIS+Explorer&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=mrrichie.spaces.live.com&amp;amp;GT1=MrRichie"&gt;</description><link>http://MrRichie.spaces.live.com/Blog/cns!DD16C3F34F4D913E!819.entry</link><pubDate>10/4/2007 5:18:23 PM</pubDate></item><item><title>MapWrecker :: Well Known Vs. Rational Vector Delivery</title><description>I am in love with MapShaper. Go play with it right now. The "Simplification Level" slider on the bottom lets us get a great feel for what fast vector simplification algorithms can do. Watching Brazil drop from 33,000 vertices to a few hundred in n*log(n) time is simply sexy.

For those ...</description><link>http://mapwrecker.wordpress.com/2007/07/17/well-know-vs-rational-vector-delivery/</link><pubDate /></item><item><title>ADC Developer Blog :: ArcGIS 9.2 Service Pack 4: .NET library problem continues</title><description>&lt;p&gt;
In a post on &lt;a name="Blog post: Problem with ArcGIS Desktop 9.2 Service Pack 3 and .NET projects" href="/ADCBlog/post/Problem-with-ArcGIS-Desktop-92-Service-Pack-3-and-NET-projects.aspx" title="Blog post: Problem with ArcGIS Desktop 9.2 Service Pack 3 and .NET projects"&gt;1 August 2007&lt;/a&gt;, I reported the problem we had when installing Service Pack 3 for ArcGIS 9.2, in which a .NET development project that was written using Service Pack 2 triggered all kinds of incompatibility errors and would not compile after the installation of SP3. For those who don&amp;#39;t want to follow the link, the workaround was: 
&lt;/p&gt;
&lt;blockquote&gt;
	For all your old projects that will migrate to SP 3, open the .vbproj files in a text editor, do a search for &amp;#39;9.2.0.1324&amp;#39; and replace it with &amp;#39;9.2.3.1380. 
&lt;/blockquote&gt;
&lt;p&gt;
Steve Bowley of TomTom said Service Pack 4 has the same problem, according to his &lt;a name="ESRI Support Forum link" href="http://forums.esri.com/Thread.asp?c=93&amp;amp;f=993&amp;amp;t=229737#730670" title="ESRI Support Forum link"&gt;22 November post&lt;/a&gt; on the ESRI Support Center&amp;#39;s ArcGIS Desktop - ArcObjects General forum.
&lt;/p&gt;
&lt;p&gt;
I&amp;#39;m not sure ESRI knows about this problem; at the time we discovered the SP 3 problem, I didn&amp;#39;t have the time to open a support incident on it. We don&amp;#39;t have a reason to move to SP 4 right now in our shop. If someone does, they should open a support incident to let ESRI commit some resources to eliminating this problem. 
&lt;/p&gt;</description><link>http://www.adcomaha.com/ADCBlog/post/ArcGIS-92-Service-Pack-4-NET-library-problem-continues.aspx</link><pubDate>11/26/2007 12:42:00 PM</pubDate></item><item><title>ADC Developer Blog :: Gotcha: Updating an EDN server license for ArcSDE</title><description>&lt;p&gt;
I&amp;#39;m not fond of using command-line utilities when a GUI is available. I find it pointless to have to look up what codes and keywords mean when I can just fill out a form. To me, that&amp;#39;s what the software is for: to help me do what I need to do quickly and correctly. I also can&amp;#39;t stand having to retype commands because of a simple typo. But GUIs don&amp;#39;t always work and software doesn&amp;#39;t always work as it should. Today I encountered a perfect example of that.
&lt;/p&gt;
&lt;p&gt;
Our EDN licenses timed out last night and we&amp;#39;d put off getting our renewal license in place. Actually, the web site that ESRI has for registering and downloading didn&amp;#39;t work right for some reason. We registered, and tried to download the license files, but it just kept telling us we had to register. We finally got our licenses a day or two ago, but we were too busy to do it. And after all, everything was working, so...
&lt;/p&gt;
&lt;p&gt;
So today they weren&amp;#39;t working. I checked the license on a development server I was using and got the new license. Expecting ESRI&amp;#39;s authorization tools to work, I ran the ArcSDE Post-Installation for Oracle10g and pointed to the new authorization file. The program read the file, then spat out an error message &amp;quot;Error authorizing ArcSDE.&amp;quot; Assuming something was wrong with the license file, we tried some other license files. All gave the same result. I tried to start the service using the Windows services applet, but it wouldn&amp;#39;t start. I even typed the command to start a service: 
&lt;/p&gt;
&lt;pre&gt;
&lt;font size="2"&gt;NET START esri_sde&lt;/font&gt;
&lt;/pre&gt;
&lt;pre&gt;
&amp;nbsp;
&lt;/pre&gt;
&lt;p&gt;
Didn&amp;#39;t work.
&lt;/p&gt;
&lt;p&gt;
A call to customer service just got me a new license file for products I wasn&amp;#39;t trying to authorize. When that file didn&amp;#39;t work I was told that it was because I needed to order a license for Server, because there isn&amp;#39;t any ArcSDE at 9.2. I gave the phone to someone else.
&lt;/p&gt;
&lt;p&gt;
Then I called tech support, who told me to use the SDE command line:
&lt;/p&gt;
&lt;pre&gt;
&lt;font size="2"&gt;sdemon -o update_key -d ORACLE10G -l &amp;lt;full path to license file&amp;gt;&lt;/font&gt;
&lt;/pre&gt;
&lt;pre&gt;
&lt;font size="2"&gt;&amp;nbsp;&lt;/font&gt;
&lt;/pre&gt;
&lt;p&gt;
That did work, so I tried to start the service in the Windows Services applet. It didn&amp;#39;t work, and neither did the NET START command. Instead, I had to use the SDE command:
&lt;/p&gt;
&lt;pre&gt;
&lt;font size="2"&gt;sdemon -o start&lt;/font&gt;
&lt;/pre&gt;
&lt;pre&gt;
&amp;nbsp;
&lt;/pre&gt;
&lt;p&gt;
So, to summarize: if you update your license file (annually with EDN), ESRI&amp;#39;s GUI won&amp;#39;t be able to update the license; you have to use the command line (even though you would assume the GUI just gets the parameters and passes them to the same programs called by the command line. 
&lt;/p&gt;
&lt;p&gt;
Then, after you do update the license, your OS can&amp;#39;t start the SDE instance; only the SDE command line can. 
&lt;/p&gt;</description><link>http://www.adcomaha.com/ADCBlog/post/Gotcha-Updating-an-EDN-server-license-for-ArcSDE.aspx</link><pubDate>9/28/2007 11:20:00 AM</pubDate></item><item><title>Richie's Space :: ArcGIS Diagrammer - Managing Metadata</title><description>&lt;p&gt;&lt;a href="http://arcscripts.esri.com/details.asp?dbid=15166"&gt;ArcGIS Diagrammer&lt;/a&gt; has the capability to view and edit &lt;a href="http://en.wikipedia.org/wiki/Metadata"&gt;metadata&lt;/a&gt;. &lt;p&gt;When exporting geodatabase schema to an &lt;a href="http://www.esri.com/software/arcgis/geodatabase/about/xml.html"&gt;XML workspace document&lt;/a&gt; using &lt;a href="http://www.esri.com/software/arcgis/about/desktop_gis.html"&gt;ArcCatalog&lt;/a&gt;, ensure that you have the &lt;em&gt;Export Metadata&lt;/em&gt; option checked.  This option is enabled by default. &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" alt=image src="http://byfiles.storage.msn.com/y1pAMsmPKi81IaNpnjVQ30U7haJJ2LRMQk7BOK3vEBnAt5EQEql3LGnX-8iQtKZjUCUqCO5DKKnQOk" border=0&gt; &lt;p&gt;To view metadata for a geodatabase object in ArcGIS Diagrammer, simply right click and select &lt;em&gt;View Metadata&lt;/em&gt; as shown below.  Please note that not all geodatabase objects support metadata, for example, domains and subtypes do not have metadata. &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" alt=image src="http://byfiles.storage.msn.com/y1pAMsmPKi81IY97-VZuGVln6wZ4fqMjfViXey_fkrbfI0gNLJmnrJYZqinDmtFrxag0lBQ45fxb6o" border=0&gt; &lt;p&gt;After clicking View Metadata, a new tab is added to ArcGIS Diagrammer.  By default the raw metadata XML is displayed. &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" alt=image src="http://byfiles.storage.msn.com/y1pAMsmPKi81Ia0YRkFSE9Pdb1ytQ6rLP6gtr97YJPDICOqxUpbTiRjVYh-N7h0ewcJrZYNE5H1z2o" border=0&gt; &lt;p&gt;In the Properties Window, you can select one of the ArcGIS Desktop metadata stylesheets as shown below.  These stylesheets translate raw metadata XML into readable HTML. &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" alt=image src="http://byfiles.storage.msn.com/y1pAMsmPKi81Ibkqc48GD8nIfz38-4iHkoCrcU8Ysx4pBjwB9Y2dqyNT9ZPMUXejgf2qOwI5hUqsEo" border=0&gt; &lt;p&gt;This is what the Parcels feature class metadata looks like with the ISO metadata stylesheet. &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" alt=image src="http://byfiles.storage.msn.com/y1pAMsmPKi81Ib_IzTle6NrjT9rPEmxXHrS719g3TtN_VF7Qk_hhrU52u6K6caUKA1M9IDJI2eqRNk" border=0&gt; &lt;p&gt;To edit metadata of a geodatabase object select the object in the diagram and click the ellipse button next to the Metadata property in the Properties Window. &lt;p&gt;&lt;img alt=image src="http://byfiles.storage.msn.com/y1pAMsmPKi81Ibfsa70Je87ddqPAzXeNxrkkFxhXIrjH2QKiqjEut8c17q68-IVPShYmJPoRToEcuU"&gt;  &lt;p&gt;The ellipse button will launch the ESRI ISO Metadata Wizard. &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" alt=image src="http://byfiles.storage.msn.com/y1pAMsmPKi81IbWK5rb5urAyKCsNn5SpYiqOpGbc4W5dthSOfwc84uBr-fdL3SRoNQYQZlrxfAhFNU" border=0&gt; &lt;p&gt;  &lt;div style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/ArcGIS Diagrammer" rel=tag&gt;ArcGIS Diagrammer&lt;/a&gt;, &lt;a href="http://technorati.com/tags/ArcGIS Desktop" rel=tag&gt;ArcGIS Desktop&lt;/a&gt;, &lt;a href="http://technorati.com/tags/ESRI" rel=tag&gt;ESRI&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Geodatabase" rel=tag&gt;Geodatabase&lt;/a&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-2515607892064890562&amp;page=RSS%3a+ArcGIS+Diagrammer+-+Managing+Metadata&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=mrrichie.spaces.live.com&amp;amp;GT1=MrRichie"&gt;</description><link>http://MrRichie.spaces.live.com/Blog/cns!DD16C3F34F4D913E!796.entry</link><pubDate>8/31/2007 6:32:03 PM</pubDate></item><item><title>Richie's Space :: ArcGIS Diagrammer - Reverse Engineering a Geodatabase to a Diagram</title><description>&lt;p&gt;This post will describe how to create a ready-to-print diagram of your geodatabase in four easy steps. &lt;p&gt;This exercise will use &lt;a href="http://arcscripts.esri.com/details.asp?dbid=15166"&gt;ArcGIS Diagrammer&lt;/a&gt; (free) which is available from &lt;a href="http://arcscripts.esri.com"&gt;ArcScripts&lt;/a&gt;.  Prerequisites for ArcGIS Diagrammer include &lt;a href="http://www.esri.com/software/arcgis/about/desktop_gis.html"&gt;ArcGIS Desktop&lt;/a&gt; 9.2 and &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&amp;amp;displaylang=en"&gt;Microsoft .NET Framework 2.0&lt;/a&gt;. &lt;p&gt;&lt;strong&gt;Step 1: Export an existing geodatabase to an ESRI XML Workspace Document&lt;/strong&gt; &lt;p&gt;Right click on a personal geodatabase, file geodatabase or an SDE connection. Select &lt;em&gt;Export &amp;gt; XML Workspace Document...&lt;/em&gt; &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" alt=image src="http://by1.storage.msn.com/y1pn56RqT1v0mM-SM-yyVFst4FpdbUOecuNvjjTsgRw56ccBp80_tahtr_bgFM3A4JPk4D645D_vs3yK_T0EXi6gpkaJO1BLtIT" border=0&gt; &lt;p&gt;Select &lt;em&gt;Schema Only&lt;/em&gt; and enter an output file name.  For example &lt;em&gt;C:\Temp\Montgomery.xml&lt;/em&gt;. Click &lt;em&gt;Next&lt;/em&gt;. &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" alt=image src="http://by1.storage.msn.com/y1pn56RqT1v0mMZZdOAm7XlYlDZQO6Yrk8RtyfcDLIQpHu2woWCpA_nge6Gm2IM-WXfZ9Vgb2VbvgKVfVU8MP78DTPZm9n-cYXl" border=0&gt; &lt;p&gt;Click &lt;em&gt;Finish&lt;/em&gt; to start the export. &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" alt=image src="http://by1.storage.msn.com/y1pn56RqT1v0mNk-ob13GR0lbWh03-KSLAtPSYVCcjta3a5bsEeodbFAONfGYnOjbR_GuY9zijPXB4dFj-CmCuELmUdGogG3XrC" border=0&gt; &lt;p&gt;&lt;strong&gt;Step 2: Load the XML Workspace Document into ArcGIS Diagrammer&lt;/strong&gt; &lt;p&gt;Start ArcGIS Diagrammer by clicking:&lt;br&gt;&lt;em&gt;START &amp;gt; All Programs &amp;gt; ArcGIS &amp;gt; ArcGIS Diagrammer &amp;gt; ArcGIS Diagrammer&lt;/em&gt; &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" height=294 alt="clip_image002" src="http://by1.storage.msn.com/y1pn56RqT1v0mMG0ae0BM4DEoXmmQlR1uesCXOcmvIRToKgW2piTw9KIjdx0K-Ecm8knMM-bngA18-UeZYvlIR0nJrjLzsE-YAE" width=336 border=0&gt; &lt;p&gt;Drag and drop the XML file created by ArcCatalog into the ArcGIS Diagrammer canvas. &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" alt=image src="http://by1.storage.msn.com/y1pn56RqT1v0mNyJWl1vvjRdq9bi7TZDCFCPeGywDZRTQBhUrBGETsHLYrckXRx3stoxHA7xVB2qBr7GzKDCSj3VeCcVi3DVTl5" border=0&gt; &lt;p&gt;ArcGIS Diagrammer will render all the geodatabase objects and associations.  You may want to change the diagram scale, for example, to change the zooming scale to 25% click &lt;em&gt;View &amp;gt; Zoom &amp;gt; 25%&lt;/em&gt;. &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" alt=image src="http://by1.storage.msn.com/y1pn56RqT1v0mOJmIPXlVfXTf3gQh9ayCDcFowawI6LMiLfK1efNbOrN7dTi3Hl89cYGpJNlxZiD0vrn_Gb6OKTFqgelguL0Zb-" border=0&gt;  &lt;p&gt;&lt;strong&gt;Step 3: Arrange geodatabase objects&lt;/strong&gt; &lt;p&gt;All geodatabase objects can be re-arranged to suit your needs.  Also, some objects like subtypes, domains and feature classes can be expanded to reveal additional details. &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" height=431 alt=image src="http://by1.storage.msn.com/y1pn56RqT1v0mOj5fyPlPj4xarCPQscjwq1uVAgPajmRG0VFhf2XYwKG2srZ_kLcjwgTboj5iOpWC4-b7eFOgSJ3_BWQZ2zzudP" width=559 border=0&gt; &lt;p&gt;&lt;strong&gt;Step 4: Print the Diagram&lt;/strong&gt; &lt;p&gt;Before printing or plotting the diagram you may want to specify a printer/plotter and paper size.  Click &lt;em&gt;File &amp;gt; Print Setup...&lt;/em&gt; &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" alt=image src="http://by1.storage.msn.com/y1pn56RqT1v0mM8r_Kd1hEBi9VEXeddoiH54OQu4_a0Zmp4hOJ2AhfLjC8smFnwdXi7zwPUwxZ_xZmKU-fXWeTvt5zz1UqxydaX" border=0&gt; &lt;p&gt;In the Printer Setup dialog select a printer and paper size. &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" alt=image src="http://by1.storage.msn.com/y1pn56RqT1v0mNXpyRkluN4qHH1PjaXjM948qwHVM1gga1_FMrs2ZxAj7P6yeTAil5EDDNbqsKEosdbTcs9ho_iwljzJ8tPStVi" border=0&gt;  &lt;p&gt;Finally, click &lt;em&gt;File &amp;gt; Print&lt;/em&gt; to send the diagram for printing/plotting. &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" alt=image src="http://by1.storage.msn.com/y1pn56RqT1v0mPkz-XrcL4gnqdKovuB5oPSrSaFoR7WZHyqrg6jMfAKesoUYL74ErodejijOEwDIR3OSdzCU3hK3RVCdo8AWqu4" border=0&gt;  &lt;div style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/ArcGIS Diagrammer" rel=tag&gt;ArcGIS Diagrammer&lt;/a&gt;, &lt;a href="http://technorati.com/tags/ArcGIS Desktop" rel=tag&gt;ArcGIS Desktop&lt;/a&gt;, &lt;a href="http://technorati.com/tags/ESRI" rel=tag&gt;ESRI&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Geodatabase" rel=tag&gt;Geodatabase&lt;/a&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-2515607892064890562&amp;page=RSS%3a+ArcGIS+Diagrammer+-+Reverse+Engineering+a+Geodatabase+to+a+Diagram&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=mrrichie.spaces.live.com&amp;amp;GT1=MrRichie"&gt;</description><link>http://MrRichie.spaces.live.com/Blog/cns!DD16C3F34F4D913E!788.entry</link><pubDate>8/31/2007 6:03:37 PM</pubDate></item><item><title>ADC Developer Blog :: .NET toolbars in ArcGIS Desktop on Richie's Space</title><description>Richie posted about &lt;a href="http://mrrichie.spaces.live.com/Blog/cns!DD16C3F34F4D913E!754.entry"&gt;How to create an attractive (and functional) toolbar for ArcGIS Desktop&lt;/a&gt;. Looks like a good way to build UIs that can be used in ArcGIS and non-ArcGIS apps.</description><link>http://www.adcomaha.com/ADCBlog/post/NET-toolbars-in-ArcGIS-Desktop-on-Richie's-Space.aspx</link><pubDate>8/29/2007 11:22:00 AM</pubDate></item><item><title>ADC Developer Blog :: Uninstall causes error when starting Outlook: Outlook is not installed for the current user</title><description>&lt;p&gt;
We have a customer who&amp;#39;s run into a problem when upgrading to ArcGIS 9.2. We developed an application in ArcGIS 9.1 and Visual Basic.NET 2003 that includes an ArcMap extension and several standalone .NET applications. In preparation for a port to 9.2, they uninstalled our app and ArcGIS 9.1 on a test tablet PC. After installing ArcGIS 9.2, Office applications don&amp;#39;t work anymore.
&lt;/p&gt;
&lt;p&gt;
When Outlook starts, it shows this error message: &amp;quot;Microsoft Outlook has not been installed for the current user. Please run setup to install the application.&amp;quot; Outlook then closes. Word shows about 5 or 6 messages concerning a macro that is trying to run and can&amp;#39;t be found. Then Word pops up the &amp;quot;not installed for current user&amp;quot; error and closes. 
&lt;/p&gt;
&lt;p&gt;
ESRI support said something to the effect of &amp;quot;you can&amp;#39;t have .NET 3.0 and ArcGIS 9.2 on the same system,&amp;quot; which seems unlikely since ArcGIS and Office are both COM applications. Our deployment installs Office Primary Interop Assemblies from Microsoft&amp;#39;s redistributable PIA kit for Office 2003, but that shouldn&amp;#39;t cause Office problems since Office doesn&amp;#39;t run in .NET. I don&amp;#39;t know if the customer has any add-ins installed, but I doubt it. 
&lt;/p&gt;
&lt;p&gt;
The customer fixed the problem by restoring an image of the computer hard drive, but we still want to get this resolved. As far as I know, the &amp;quot;Not installed for current user&amp;quot; means either the user&amp;#39;s Office profile or Office folder permissions have been corrupted, or some hidden files in the MSOCache have been deleted. The Word macro messages make me suspect something went wrong with VBA when ArcGIS was uninstalled/reinstalled. 
&lt;/p&gt;
&lt;p&gt;
Has anyone else seen this issue with Office - with either their own application uninstalls, or with ArcGIS uninstalls? 
&lt;/p&gt;</description><link>http://www.adcomaha.com/ADCBlog/post/Uninstall-causes-error-when-starting-Outlook-Outlook-is-not-installed-for-the-current-user.aspx</link><pubDate>8/29/2007 10:54:00 AM</pubDate></item><item><title>Brian Flood :: More on KML Vector Regions</title><description>&lt;p&gt;Frank (&lt;a href="http://www.gearthblog.com/blog/archives/2007/08/news_roundup_arc2ear.html"&gt;Google Earth Blog&lt;/a&gt;) &lt;a href="http://www.gearthblog.com/blog/archives/2007/08/news_roundup_arc2ear.html"&gt;points out&lt;/a&gt; an important fact when selecting placemarks in GE. Point data is no problem but lines and polygons are usually harder to click on, especially with no visual feedback when the mouse cursor hovers over them. However, as he points out, if you hold down the CTRL key and left click on the globe, you can select polygons without too many problems. If your view is tilted, sometimes GE does not select the placemark you intended but for the most part, this is great functionality that many users don&amp;#39;t even know exists.&lt;/p&gt;&lt;p&gt;Next, a couple of people have asked about how we create vector regions and if 3D extruded data can be used. The answer is yes, the clipping does not affect the extrusion of polygons so the end visual result is the same as if your data was exported without regions. &lt;/p&gt;&lt;p&gt;Lastly, someone asked if they could use Amazon S3 to host their KML exports. Yes, V2 will (optionally) publish all your KML/KMZ data to S3. The samples on &lt;a href="http://www.spatialdatalogic.com/CS/blogs/brian_flood/archive/2007/08/07/Arc2Earth-V2-and-KML.aspx"&gt;the previous post&lt;/a&gt; and the sample below are all hosted on S3.&lt;/p&gt;&lt;p&gt;I created another example to show both of these features. The export includes both land parcels and buildings for all of Somerset County, NJ. Attribute data is available when you click on the land parcels, use the CTRL-left click trick to make the selection. Next, if you watch closely as you pan around, you will see the clipped 3D buildings stream into view. When a region directly next to an already visible region is loaded, the 3D buildings become whole again.&lt;/p&gt;&lt;p&gt;&lt;a href="http://s3.amazonaws.com/arc2earth1533176949/Somerset_ParcelsBuildings/Somerset_ParcelsBuildings_nl.kmz"&gt;Somerset County Parcels and Buildings Example Link&lt;/a&gt;&lt;/p&gt;&lt;p&gt;1) Turn on the &amp;ldquo;Borders&amp;rdquo; base layer in GE. After you&amp;rsquo;ve loaded the link above, you should be zoomed to the full extent of Somerset County. &lt;br /&gt;2) Zoom into any area within Somerset County to see both land parcels and buildings&lt;br /&gt;3) You can also search for an address in the Search area (ex: 270 Davidson Ave, Somerset, NJ)&lt;/p&gt;&lt;p&gt;&lt;img height="253" src="http://www.spatialdatalogic.com/sdl/public/images/Somerset_GE_1%20copy.png" style="width:350px;height:253px;" width="350" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img height="253" src="http://www.spatialdatalogic.com/sdl/public/images/Somerset_GE_2%20copy.png" style="width:350px;height:253px;" width="350" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img height="253" src="http://www.spatialdatalogic.com/sdl/public/images/Somerset_GE_3%20copy.png" style="width:350px;height:253px;" width="350" /&gt;&lt;/p&gt;&lt;p&gt;Listening To:&amp;nbsp; New Order - True Faith - Substance&lt;/p&gt;&lt;img src="http://www.spatialdatalogic.com/CS/aggbug.aspx?PostID=9808" width="1" height="1"&gt;</description><link>http://www.spatialdatalogic.com/CS/blogs/brian_flood/archive/2007/08/09/More-on-KML-Vector-Regions.aspx</link><pubDate>8/9/2007 7:53:00 AM</pubDate></item><item><title>Brian Flood :: Arc2Earth V2 and KML</title><description>&lt;p&gt;&lt;a href="http://www.arc2earth.com"&gt;Arc2Earth&lt;/a&gt; V2 is slated for release in about a month. We hope we&amp;rsquo;ve accomplished our goals of fixing/adding to existing functionality while also including lots of new features as well. For this post, I&amp;rsquo;m going to stick to some of the new features we added in relation to Google Earth/KML and how they can be used together to automate the process of publishing your larger sets of data to Google Earth. For a discussion on how this relates to Google&amp;#39;s new Enterprise tools, &lt;a href="http://www.ogleearth.com/2007/07/google_earth_en_3.html"&gt;you can look here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Vector Regions&lt;br /&gt;KML Regions were added to Google Earth some time ago but remain one of the most underused features in the entire KML spec. The Region design&amp;nbsp;is extremely flexible and as such, leave most of the complex settings to the KML creator instead of providing an existing framework that we can all hang our data on. This makes sense from a Google perspective but it also leaves many in the community scratching their heads when decided how to use Regions to help with their data exports. The main goal of Regions from a GIS data perspective is to allow your layers to act like the base data in GE. That is, allow it to stream down in chunks and to make it visible based on the altitude of viewer (scale based rendering). A2E automates this process for each of your layers.&lt;/p&gt;&lt;p&gt;KML purists will immediately see an issue with the output of our vector regions: all data is clipped to the region extent. In a perfect world, GE would support Placemarks belonging to multiple regions but at this time (and in the beta KML 2.2 spec), it only allows for a single region per placemark. With point data, this is a non issue but with polyline and polygon data the issue is quite important, especially with layers containing variable polygon sizes that may span multiple regions (think of a polyline that represents a long river, it will almost certainly span regions). There is no good choice for which region will contain a placemark and by arbitrarily picking a region, you end up with placemarks turning on/off when they shouldn&amp;rsquo;t (or worse, never displaying at all until you hit the one region that contains the data). You could export the data so that each feature belongs to the region that fully contains it&amp;rsquo;s extent but this just causes larger features to &amp;ldquo;pop&amp;rdquo; into view well before the rest of the features in the layer (and well before you even wanted them to display). What you end up with is a patchwork instead of the traditional scale based approach common in GIS packages. We felt this was not what the user expected when compared to their desktop software and coincidently, with how the base vector data in GE works.&lt;/p&gt;&lt;p&gt;As a compromise, we decided the best way to ensure universal zoom activation was to clip the features instead of deciding what region they would reside in. Unfortunately, once this happens, the data is really only good for visualization purposes since its relative topology has been utterly destroyed. What you&amp;nbsp;get for this tradeoff is the clean, scale dependent streaming of your vector data into GE. In practice, I think this is acceptable since one of the main goals of GE has always been the fast visualization of data. Analysis can be left to alternate feeds or backend server processing.&lt;/p&gt;&lt;p&gt;&lt;a href="http://s3.amazonaws.com/arc2earth1533176949/Census_109Congress/Census_109Congress_nl.kmz"&gt;Here&amp;rsquo;s a sample for US Census data&lt;/a&gt;, zoom in until you see the data appear. When you pan or zoom to another location, you will see the data streamed into GE in&amp;nbsp;predictable region chunks. Since these are vector placemarks and not raster groundoverlays, you can display labels and info balloons as well.&lt;/p&gt;&lt;p&gt;&lt;img height="253" src="http://www.spatialdatalogic.com/sdl/public/images/GE_Census_Vector%20copy.png" style="width:350px;height:253px;" width="350" /&gt;&lt;/p&gt;&lt;p&gt;Next, our implementation of regions has always been a little different than others, by using a uniform grid we can update portions of the whole at any time (say, a parcel subdivision in a state wide layer). A2E uses &amp;quot;Universal Regions&amp;quot; (akin to the tile structure in Google Maps) so we can schedule &amp;quot;updates&amp;quot; to vector tiles just like in the GM/VE tile exporter. A universal grid gives you concrete names for all regions and files and allows you to update only portions of the extent. The A2E Enterprise Masks then allow you to schedule updates for inclusion/exclusion in the masks and then only these areas would be exported. &lt;/p&gt;&lt;p&gt;Here&amp;#39;s are some other examples showing &lt;a href="http://s3.amazonaws.com/arc2earth1533176949/SLOSH_GE/SLOSH_GE_nl.kmz"&gt;Hurricane data for the NYC area&lt;/a&gt; and &lt;a href="http://s3.amazonaws.com/arc2earth1533176949/Census_Pop/Census_Pop_nl.kmz"&gt;Census Blocks for Florida&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;img height="253" src="http://www.spatialdatalogic.com/sdl/public/images/GE_SLOSH_Vector%20copy.png" style="width:350px;height:253px;" width="350" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img height="253" src="http://www.spatialdatalogic.com/sdl/public/images/GE_Census_Block_Vector%20copy.png" style="width:350px;height:253px;" width="350" /&gt;&lt;/p&gt;&lt;p&gt;It should also be noted that we added many new options and optimizations for creating raster regions (or superoverlays) in V2 as well. Mixed image format, variable image size depending on level, optimized LOD settings and several other enhancements should really help in speeding up your raster regions in GE.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Scheduler&lt;br /&gt;The A2E Scheduler was introduced in a previous version to export Google Maps or MS Virtual Earth tiles and publish them automatically on a time schedule. In V2, this same functionality is available when exporting KML documents as well, including KML documents that have layers with regions. This may seem as a small change but in practice, this provides the vital &amp;ldquo;automation&amp;rdquo; portion of the framework mentioned above. Unlike using something Windows Scheduled Tasks, the A2E Scheduler runs pre and post operations on export jobs. For instance, prior to a job start the current time can be used to calculate HTTP expires headers for anything published to Amazon S3. Likewise, scripts can be run to either prepare data before or to perhaps copy data to another server when the export is done.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;KML Shared Documents&lt;br /&gt;This is a relatively simple addition to A2E that will provide a lot of functionality for users exporting large KML documents that need to be updated frequently. A shared KML document is essentially a KML file A2E manages that contains NetworkLinks to any other documents you have created. For instance, you could export&amp;nbsp; Zoning, Block and Parcels layers to separate KML files (or more then likely, separate Region aware caches) and then reference them all from the top level, shared document. Nothing revolutionary here, this is done all the time by many KML users but this functionality will both automate the process and provide publishing for the document as well (Amazon S3 or local server). You can add or remove from the documents using a simple interface and the Scheduler also has post processing to add/remove from them as well (e.g. a time series exported daily would add links to the shared document automatically). The obvious benefit is the ability to update only portions of your shared KML document&amp;rsquo;s content when only small changes occur. This is very different from the all or nothing approach used the A2E V1 KML Exporter.&lt;/p&gt;&lt;p&gt;Putting it All Together&lt;br /&gt;Given the three features described above, you can setup a system that fully automates exporting, publishing and maintaining very large amounts of vector and raster data in KML format. Use A2E to set export options for each of your layers and save the option file. Optionally assign Inclusion/Exclusion masks to tell A2E what areas of your data to update. Use Scheduler to program the frequency of the updates. Finally, use a top level, shared KML document as the link to give all of your users. The Network Links contained in the shared document will ensure they always have the latest data. &lt;a href="http://www.ogleearth.com/2007/07/kmls_region_ama.html"&gt;As has been mentioned in other places&lt;/a&gt;, batch export to read only caches can be far more efficient then serving data dynamically from server software. How often does your data actually change? Can it wait up to a minute, an hour, a day? Many corporate reporting systems rely heavily on batch processed databases for analysis and visualization. Perhaps this is something that can be applied to geospatial data as well.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;AtomPub + KML&lt;br /&gt;While this will not be a part of V2, it does represent where syndicated geospatial could go in the future and in this regard, is something that I&amp;rsquo;d like Arc2Earth to work directly with.&amp;nbsp;It has been argued that the newly released Atom Publishing Protocol (APP) is a perfect conduit for exposing KML data (or any other data) to a variety of clients in addition to providing a universal, RESTful method for updates. I won&amp;rsquo;t go into the details, mainly because &lt;a href="http://zcologia.com/news/528/atompub-kml-and-google-earth/"&gt;there are others that have a much better grasp on the subject&lt;/a&gt; but also because the discussion seems a little fluid as well. Here are some great links to get you started:&lt;/p&gt;&lt;p&gt;Gregor Rothfuss of Google posts some follow up and discussion topics &lt;a href="http://groups.google.com/group/geo-web-rest/browse_thread/thread/cd67f24b6ab5a48a"&gt;here&lt;/a&gt; and &lt;a href="http://groups.google.com/group/geo-web-rest/web/kml-gdata-ideas"&gt;here&lt;/a&gt;. In short, make Google Earth a limited APP client and Google My Maps an APP server (read, write). The latter would use GData as the store and presumably provide server functionality to process feed updates from APP clients and some limited search based on OpenSearch. In this regard, I could see Arc2Earth enabling ArcMap as a full APP client for the MyMaps APP server. Many issues to work out but a GIS client with good editing tools and bulk loading capabilities combined with a flexible, easy to use client like MyMaps seems very attractive. Multiple editors could then work on the data from both ArcMap clients and MyMaps browser clients and the entire feed would still be available to any other client to view (GE, VE, OpenLayers etc). &lt;/p&gt;&lt;p&gt;I really like the AtomPub + geospatial conenction, I&amp;rsquo;m still waiting for some additional &amp;ldquo;a-ha&amp;rdquo; moments to clarify my thoughts but I have to give credit to those who have already put this all together. In particular, &lt;a href="http://zcologia.com/news/"&gt;Sean Gilles&lt;/a&gt; who has been hammering out the RESTful geoweb for quite some time now.&lt;/p&gt;&lt;p&gt;Listening To: Gorillaz - Dare - Demon Days&lt;/p&gt;&lt;img src="http://www.spatialdatalogic.com/CS/aggbug.aspx?PostID=9733" width="1" height="1"&gt;</description><link>http://www.spatialdatalogic.com/CS/blogs/brian_flood/archive/2007/08/07/Arc2Earth-V2-and-KML.aspx</link><pubDate>8/7/2007 10:05:00 AM</pubDate></item><item><title>Geometrybag :: More than just PushPins</title><description>
I&amp;#8217;m currently going through the preliminary stages of looking to move house, this means that I seem to be coming across an awful lot of pushpin maps and Google mashups on a variety of property web sites. Most of these sites are very good at aggregating data into a simple map view displaying a number of [...]</description><link>http://geometrybag.wordpress.com/2007/07/17/more-than-just-pushpins/</link><pubDate>7/16/2007 4:32:04 PM</pubDate></item><item><title>Brian Flood :: Google Maps Draggable Routes</title><description>&lt;p&gt;this is simply amazing that I have to post about it...First, goto &lt;a href="http://maps.google.com"&gt;Google Maps&lt;/a&gt; and get some directions. You can now drag the endpoints and the route itself and it will recompute the route on the fly (using JSON request for each mouse move!!!!)&lt;/p&gt;&lt;p&gt;&lt;a href="http://maps.google.com/maps?f=d&amp;amp;hl=en&amp;amp;geocode=&amp;amp;saddr=bedminster,+nj&amp;amp;daddr=40.511711,-74.481812+to%3Anyc&amp;amp;mrcr=0,1&amp;amp;mrsp=1&amp;amp;sz=10&amp;amp;mra=dme&amp;amp;sll=40.68607,-74.32543&amp;amp;sspn=0.431123,0.791016&amp;amp;ie=UTF8&amp;amp;ll=40.584757,-74.388428&amp;amp;spn=0.431776,0.791016&amp;amp;z=10&amp;amp;om=1"&gt;Test Directions&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.spatialdatalogic.com/CS/aggbug.aspx?PostID=8837" width="1" height="1"&gt;</description><link>http://www.spatialdatalogic.com/CS/blogs/brian_flood/archive/2007/06/28/Google-Maps-Draggable-Routes.aspx</link><pubDate>6/28/2007 12:08:00 PM</pubDate></item><item><title>Geometrybag :: On Location mashup*</title><description>
I happened to be working in Canary Wharf on Tuesday, so on the way home I made a last minute decision to detour to the mashup* event which was themed &amp;#8216;On Location&amp;#8217;.  I&amp;#8217;d made a mental note of it a while ago, but then completely forgotten, anyway I&amp;#8217;m glad I  went as it was pretty interesting.  There was a [...]</description><link>http://geometrybag.wordpress.com/2007/06/21/on-location-mashup/</link><pubDate>6/20/2007 4:25:01 PM</pubDate></item><item><title>Geometrybag :: OpenStreetMap Data in ArcGIS</title><description>
***Update*** 
I should probably point out at this point that the tool currently linked from here does not work with the  current xml format of openstreetmap.  I will post a new script soon that does, although you can probably tell from how long ago the format changed that I have had a few othe real-life things get [...]</description><link>http://geometrybag.wordpress.com/2007/06/18/openstreetmap-data-in-arcgis/</link><pubDate>6/18/2007 10:55:53 AM</pubDate></item><item><title>Geometrybag :: Build your own touchtable</title><description>
I was lucky enough recently to see a great demo of the giant TouchTable, and I had forgotten since seeing it 3 years ago at the user conference, what a very very cool piece of kit it is.  With microsoft recently announcing their forthcoming Surface platform, I got to wondering what would be involved if i wanted [...]</description><link>http://geometrybag.wordpress.com/2007/06/15/build-your-own-touchtable/</link><pubDate>6/15/2007 10:25:31 AM</pubDate></item><item><title>Flat out GIS :: GeoCommons and Disruptive Technologies</title><description>A parallel to Dave&amp;#8217;s disruptive technology concept in reference to the GeoCommons squabbling is what&amp;#8217;s happened to the survey industry.  There you have a complex science of geodesy and measurement technologies like RTK GPS.  Then Garmin and others came out with their handhelds and the surveying industry threw a fit (and still is). [...]</description><link>http://flatoutgis.wordpress.com/2007/06/08/geocommons-and-disruptive-technologies/</link><pubDate>6/8/2007 9:22:39 AM</pubDate></item><item><title>MapWrecker :: ArcGIS Server Virtual Earth Tile Server vs. ArcIMS</title><description>Time to change the name Dave.


     

using System; 
using System.Text; 
using ArcDeveloper.TileServer.Interfaces; 
using System.Net; 
using System.IO; 
using System.Xml; 
using System.Drawing; 
using System.Drawing.Imaging;   

namespace ArcDeveloper.TileServer.ArcIMS 
{ 
    public class ArcImsTileProvider : ITileProvider 
    { 
     ...</description><link>http://mapwrecker.wordpress.com/2008/02/04/arcgis-server-virtual-earth-tile-server-vs-arcims/</link><pubDate /></item><item><title>ArcGIS Server Team :: The ArcGIS Server Development Blog has moved</title><description>&lt;p&gt;The ArcGIS Server Development Blog has moved to the ESRI blogs home at &lt;a href="http://blogs.esri.com/arcgisserver"&gt;http://blogs.esri.com/arcgisserver&lt;/a&gt;. Please update your bookmarks and RSS feeds to reference the new location.&lt;/p&gt;&lt;p&gt;As part of the move, any current accounts you&amp;rsquo;ve created on this blog will be unavailable on the new site. Instead, you can use your &lt;a href="https://webaccounts.esri.com/CAS/index.cfm"&gt;ESRI Global Account&lt;/a&gt;&amp;nbsp;if you wish to sign in to the new site. Creating an ESRI Global Account is free and available to everyone.&lt;/p&gt;&lt;p&gt;The blog will still be written by the ArcGIS Server development team, and you&amp;rsquo;ll be able to see all previous posts and comments. We apologize for any inconvenience caused by this move, and look forward to your continued support and readership.&lt;/p&gt;&lt;img src="http://serverx.esri.com/ESRIBlogs/aggbug.aspx?PostID=209" width="1" height="1"&gt;</description><link>http://serverx.esri.com/ESRIBlogs/blogs/arcgisserver/archive/2007/05/09/The-ArcGIS-Server-Development-Blog-has-moved.aspx</link><pubDate>5/9/2007 9:00:00 AM</pubDate></item><item><title>ArcGIS Server Team :: Follow-up to Extending the QueryAttributes Task: Zooming to selected features</title><description>&lt;p&gt;From Bryan Baker, a&amp;nbsp;product engineer&amp;nbsp;working on the .NET SDK:&amp;nbsp;&lt;/p&gt;&lt;p&gt;I wrote an &lt;a href="http://serverx.esri.com/ESRIBlogs/blogs/arcgisserver/archive/2007/02/12/Extending-the-QueryAttributesTask-to-highlight-selected-features.aspx"&gt;earlier post&lt;/a&gt; that showed how to extend the QueryAttributes task so that all features are immediately highlighted. Several users have asked about also zooming to the selected features. I&amp;#39;ll show that here, though keep in mind that the user can also zoom to the selected features by right-clicking on the node for the layer (Cities in the graphic at the top of the earlier post) and choosing to zoom to selected features.&lt;/p&gt;&lt;p&gt;It turns out that it&amp;#39;s a little more difficult to zoom to the features than I originally thought, because the FullExtent property of the graphics layer is null for queries like this. Instead, we have to construct our own envelope around all the features by looping through them. This isn&amp;#39;t that difficult, though of course it does require more processing.&lt;/p&gt;&lt;p&gt;I&amp;rsquo;ve included code below that does the zooming. This code should be added to near the bottom of the existing code in the earlier post. If for some reason you didn&amp;rsquo;t want to highlight all the features, you could omit or comment out the line in the loop that sets the selectedCol to true.&lt;/p&gt;&lt;p&gt;The code below first creates an envelope to use, then in the existing loop that selects each feature, it widens the envelope to surround each feature. Once it has the envelope, it gets a reference to the Map control so it can set the Map&amp;rsquo;s extent. This takes some work, since the task itself has no reference to the Map. We have to get the ID of the Map and then search the page&amp;rsquo;s control tree. Since the Map control could be nested within another control, such as in a FloatingPanel, we search for it recursively using a custom function (found at the bottom of this listing).&lt;/p&gt;&lt;p&gt;One more thing before we zoom the map: the task could be querying a point layer, and if only one point is found, the &amp;ldquo;envelope&amp;rdquo; around all features is a point. We can&amp;rsquo;t zoom to a point, so instead we set the envelope to a percentage of the full extent of the Map (five percent&amp;mdash;this value is hard-coded here, and you can change it depending on tightly you want to zoom in this one-point case).&lt;/p&gt;&lt;p&gt;Finally, we&amp;rsquo;ve got an envelope that will work, and we set the Map to this extent, refresh the Map, and copy its CallbackResults to the task&amp;rsquo;s CallbackResults. This last step is necessary because a callback only works with one control (the task in this case), and we need to tell another control (the Map) to update its contents.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;&amp;#39; Set up the items to hold the extent of all features&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; geom &lt;span style="color:blue;"&gt;As&lt;/span&gt; ESRI.ArcGIS.ADF.Web.Geometry.Geometry&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; layerEnv &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;New&lt;/span&gt; _&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ESRI.ArcGIS.ADF.Web.Geometry.Envelope( _&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Double&lt;/span&gt;.MaxValue, &lt;span style="color:blue;"&gt;Double&lt;/span&gt;.MaxValue, _&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Double&lt;/span&gt;.MinValue, &lt;span style="color:blue;"&gt;Double&lt;/span&gt;.MinValue)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;&amp;#39; Set each feature to selected (this loop is&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;&amp;#39; at the end the code in my previous blog post)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;For&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;Each&lt;/span&gt; row &lt;span style="color:blue;"&gt;As&lt;/span&gt; DataRow &lt;span style="color:blue;"&gt;In&lt;/span&gt; graphicsLayer.Rows&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;row(selectedCol) = &lt;span style="color:blue;"&gt;True&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;&amp;#39; Enlarge the overall envelope to &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;&amp;#39;&lt;span&gt;&amp;nbsp; &lt;/span&gt;include the current feature&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;geom = graphicsLayer.GeometryFromRow(row)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;layerEnv.Union(geom)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;Next&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;&amp;#39; If any records found, zoom to them&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;If&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; graphicsLayer.Rows.Count &amp;gt; 0 &lt;span style="color:blue;"&gt;Then&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;&amp;#39; Get a reference to the Map - have to search the Page since&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;&amp;#39; &lt;span&gt;&amp;nbsp;&lt;/span&gt;task itself has no direct reference to the Map&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;&amp;#39; (the task&amp;#39;s TaskResults does have the ID of the map)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; mapCtrl &lt;span style="color:blue;"&gt;As&lt;/span&gt; Map = &lt;span style="color:blue;"&gt;Nothing&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; taskResultsId &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;String&lt;/span&gt; = &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Me&lt;/span&gt;.TaskResultsContainers(0).Name&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; taskResults &lt;span style="color:blue;"&gt;As&lt;/span&gt; TaskResults = _&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;CType&lt;/span&gt;(FindControlRecursive( _&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Me&lt;/span&gt;.Page, taskResultsId), TaskResults)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;If&lt;/span&gt; &lt;span style="color:blue;"&gt;Not&lt;/span&gt; TaskResults &lt;span style="color:blue;"&gt;Is&lt;/span&gt; &lt;span style="color:blue;"&gt;Nothing&lt;/span&gt; &lt;span style="color:blue;"&gt;Then&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;mapCtrl = &lt;span style="color:blue;"&gt;CType&lt;/span&gt;(FindControlRecursive( _&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Me&lt;/span&gt;.Page, taskResults.Map), Map)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;If&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;If&lt;/span&gt; &lt;span style="color:blue;"&gt;Not&lt;/span&gt; mapCtrl &lt;span style="color:blue;"&gt;Is&lt;/span&gt; &lt;span style="color:blue;"&gt;Nothing&lt;/span&gt; &lt;span style="color:blue;"&gt;Then&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;&amp;#39; If only one point found, envelope will be a point&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;&amp;#39;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;-- set to a percentage of the full extent&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;If&lt;/span&gt; layerEnv.XMin = layerEnv.XMax &lt;span style="color:blue;"&gt;AndAlso&lt;/span&gt; _&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;layerEnv.YMin = layerEnv.YMax &lt;span style="color:blue;"&gt;AndAlso&lt;/span&gt; _&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Not&lt;/span&gt; IsNothing(mapCtrl) &lt;span style="color:blue;"&gt;Then&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;&amp;#39; Percentage of the full extent to use when zooming to point&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; zoomToPointPercentage &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Integer&lt;/span&gt; = 5&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; NewWidth &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Double&lt;/span&gt; = mapCtrl.GetFullExtent().Width _&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* (zoomToPointPercentage / 100)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; NewHeight &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Double&lt;/span&gt; = mapCtrl.GetFullExtent().Height _&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* (zoomToPointPercentage / 100)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;layerEnv.XMin -= NewWidth / 2&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;layerEnv.XMax += NewWidth / 2&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;layerEnv.YMin -= NewHeight / 2&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;layerEnv.YMax += NewHeight / 2&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;If&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;&amp;#39; Now we can zoom the map to the extent of the features&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;mapCtrl.Extent = layerEnv&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;mapCtrl.Refresh()&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;&amp;#39; We have to tell the client to refresh, using CallbackResults&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Me&lt;/span&gt;.CallbackResults.CopyFrom(mapCtrl.CallbackResults)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;If&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;End&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;If&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Below is the function called in the above code. This searches the page and its child controls for the control with the given ID. Put this after the end of the Execute method (End Sub), but inside the Class (before the End Class statement).&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;&amp;#39; Finds the control in the Page&amp;#39;s control tree&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Public&lt;/span&gt; &lt;span style="color:blue;"&gt;Function&lt;/span&gt; FindControlRecursive(&lt;span style="color:blue;"&gt;ByVal&lt;/span&gt; root &lt;span style="color:blue;"&gt;As&lt;/span&gt; _&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Control, &lt;span style="color:blue;"&gt;ByVal&lt;/span&gt; id &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;String&lt;/span&gt;) &lt;span style="color:blue;"&gt;As&lt;/span&gt; Control&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;If&lt;/span&gt; root.ID = id &lt;span style="color:blue;"&gt;Then&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Return&lt;/span&gt; root&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;If&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; c &lt;span style="color:blue;"&gt;As&lt;/span&gt; Control&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;For&lt;/span&gt; &lt;span style="color:blue;"&gt;Each&lt;/span&gt; c &lt;span style="color:blue;"&gt;In&lt;/span&gt; root.Controls&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; t &lt;span style="color:blue;"&gt;As&lt;/span&gt; Control = FindControlRecursive(c, id)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;If&lt;/span&gt; &lt;span style="color:blue;"&gt;Not&lt;/span&gt; t &lt;span style="color:blue;"&gt;Is&lt;/span&gt; &lt;span style="color:blue;"&gt;Nothing&lt;/span&gt; &lt;span style="color:blue;"&gt;Then&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Return&lt;/span&gt; t&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;If&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Next&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Return&lt;/span&gt; &lt;span style="color:blue;"&gt;Nothing&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;Function&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;If you add the code above to the custom task as outlined in the earlier blog post, it should automatically zoom to the extent of all features found by the task.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://serverx.esri.com/ESRIBlogs/aggbug.aspx?PostID=189" width="1" height="1"&gt;</description><link>http://serverx.esri.com/ESRIBlogs/blogs/arcgisserver/archive/2007/05/03/Follow_2D00_up-to-Extending-the-QueryAttributes-Task_3A00_-Zooming-to-selected-features.aspx</link><pubDate>5/3/2007 12:15:00 PM</pubDate></item><item><title>ArcGIS Server Team :: Customizing the Web Editor task</title><description>&lt;p&gt;&amp;nbsp;James Goodrich, a developer on the .NET Web ADF team, contributed this information about some Service Pack 2 enhancements to the Editor task:&lt;/p&gt;&lt;p&gt;&amp;nbsp;When the Editor task was released at version 9.2 of the Web ADF for the .NET Framework, a common question was &amp;quot;How can I customize the Editor task?&amp;quot;. Service Pack 2 provides an answer to this question. You can now customize the Editor task with custom tools and Editor Panels and we have added more events that allow you to hook into the Editor task. &lt;/p&gt;&lt;p&gt;In addition to these new customization options for developers, the Editor task has another key change at Service Pack 2 which it allows it to be configured with a pooled map service. You can edit non-versioned data using a pooled map service.&lt;/p&gt;&lt;p&gt;See the &lt;a href="http://edndoc.esri.com/arcobjects/9.2/NET_Server_Doc/developer/ADF/control_editortask.htm" target="_blank"&gt;Editor Task control discussion&lt;/a&gt; in the Developer Help for samples and instructions.&lt;/p&gt;&lt;p&gt;&lt;img alt="Customized Editor Task with added tools" border="1" height="370" src="http://serverx.esri.com/blogimages/may-2-2007/editor_new_tools.png" style="width:294px;height:370px;" title="Customized Editor Task with added tools" width="294" /&gt;&lt;/p&gt;&lt;img src="http://serverx.esri.com/ESRIBlogs/aggbug.aspx?PostID=184" width="1" height="1"&gt;</description><link>http://serverx.esri.com/ESRIBlogs/blogs/arcgisserver/archive/2007/05/02/Customizing-the-Web-Editor-task.aspx</link><pubDate>5/2/2007 10:30:00 AM</pubDate></item><item><title>ArcGIS Server Team :: How to track pending tiles and display a busy indicator in a Web mapping application</title><description>&lt;p&gt;Rex Hansen contributed this post about how to use some of the enhanced JavaScript in Service Pack 2 to track pending tiles and display a busy indicator (such as an animated &amp;quot;Loading&amp;quot; graphic) over the Web ADF&amp;#39;s Map control:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;As a Web ADF developer working in an asynchronous communication environment, it is often beneficial to provide an end user with some indication that a user action is being processed.   Since most Web ADF applications are centered on working with a map, the ability of an end user to effectively interact with map contents is essential.   The Web ADF has the ability to asynchronously retrieve map data from multiple sources and consolidate it in a single map control.  In general, data sources often differ in the time it takes to respond to a request.  Since the Web ADF Map control is capable of rendering map data as it is returned to the browser, it&amp;rsquo;s possible that some portion of data in the map is visible and accessible before another portion.  In this case, it will likely be important to let the end user know when the map control has finished loading map data from any and all sources.&lt;/p&gt;

&lt;p&gt;To support this capability, 9.2 service pack 2 includes an enhanced Web ADF JavaScript Map object.   The JavaScript Map object has a set of &amp;ldquo;event handlers&amp;rdquo; on the pendingTiles property.  The pendingTiles property references an array of map image tiles to be rendered.  The array is updated when the map needs new image tiles based on the current extent.   Events on the pendingTiles property are listed below:&lt;/p&gt;

&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Event&lt;/strong&gt;&lt;/td&gt;
                                                 
&lt;td&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;add_onRequestsPending&lt;/td&gt;
                                                 
&lt;td&gt;              Triggered when the number of items in the pendingTiles array changes from 0 to a higher value&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;add_onRequestsRemove&lt;/td&gt;
                                                 
&lt;td&gt;              Triggered when an item is removed from the pendingTiles array&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;add_onRequestsCompleted&lt;/td&gt;
                                                 
&lt;td&gt;         Triggered when the number of item in the pendingTiles array changes to 0&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;Use these handlers on the Map object&amp;rsquo;s pendingTiles property to register a JavaScript function with the event.  For example:&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;map.pendingTiles.add_onRequestsPending(showBusyIndicator)&lt;/span&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;where map is the Map object and showBusyIndicator is a JavaScript function to call when the number of items in the pendingTiles array changes from 0 to a higher value.&lt;/p&gt;

&lt;p&gt;The JavaScript function showBusyIndicator may appear as follows.&lt;/p&gt;


&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;function&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; showBusyIndicator(sender) {&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;showLayer(&lt;span style="color:maroon;"&gt;&amp;quot;BusyIndicator&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;
(sender!=&lt;span style="color:blue;"&gt;null&lt;/span&gt;) {&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;window.status = &lt;span style="color:maroon;"&gt;&amp;quot;Pending Tiles: &amp;quot;&lt;/span&gt; +
sender.pendingTiles.length; &lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The argument to the function is a reference to the JavaScript Map object.  This argument can be used to gain access to map properties, such as the number of map image tiles left in the pendingTiles array.  In this example, the number of pending tiles is output to the browser window&amp;rsquo;s status bar.  If the argument is null, the pendingTiles array contains 0 items.  The Web ADF includes two convenient JavaScript functions to show or hide a layer (div) based on its id, named showLayer and hideLayer, respectively.  The functions are contained in the display_common.js file which is by default embedded with the Web ADF controls. In this example, the showLayer function is used to make the contents in the div tag with an id of &amp;ldquo;BusyIndicator&amp;rdquo; visible.&lt;/p&gt;&lt;p&gt;&lt;img alt="You can show the number of pending tiles and a &amp;quot;Busy indicator&amp;quot; in your Web application" border="1" height="593" hspace="5" src="http://serverx.esri.com/blogimages/MAY-1-2007/show_loading.jpg" title="You can show the number of pending tiles and a &amp;quot;Busy indicator&amp;quot; in your Web application" width="768" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Included below is a simple Web page with a MapResourceManager, Map, and a div tag containing an image.   The JavaScript Map object events are handled after the form to let the content of the form load before interacting with it.&lt;br /&gt;
&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="background:yellow none repeat scroll 0% 50%;font-size:10pt;font-family:'Courier New';-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;@&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:maroon;"&gt;Page&lt;/span&gt; &lt;span style="color:red;"&gt;Language&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;C#&amp;quot;&lt;/span&gt;
&lt;span style="color:red;"&gt;AutoEventWireup&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:red;"&gt;CodeFile&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Default.aspx.cs&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;Inherits&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;_Default&amp;quot;&lt;/span&gt; &lt;span style="background:yellow none repeat scroll 0% 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;%&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="background:yellow none repeat scroll 0% 50%;font-size:10pt;font-family:'Courier New';-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;@&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:maroon;"&gt;Register&lt;/span&gt; &lt;span style="color:red;"&gt;Assembly&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;ESRI.ArcGIS.ADF.Web.UI.WebControls,
Version=9.2.2.1350, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="color:red;"&gt;Namespace&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;ESRI.ArcGIS.ADF.Web.UI.WebControls&amp;quot;&lt;/span&gt;
&lt;span style="color:red;"&gt;TagPrefix&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;esri&amp;quot;&lt;/span&gt;
&lt;span style="background:yellow none repeat scroll 0% 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;%&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:maroon;"&gt;DOCTYPE&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:red;"&gt;html&lt;/span&gt;
&lt;span style="color:red;"&gt;PUBLIC&lt;/span&gt; &lt;span style="color:blue;"&gt;&amp;quot;-//W3C//DTD
XHTML 1.0 Transitional//EN&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:maroon;"&gt;html&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:maroon;"&gt;head&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;server&amp;quot;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;title&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Untitled Page&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;title&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:maroon;"&gt;head&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:maroon;"&gt;body&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;form&lt;/span&gt;
&lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;form1&amp;quot;&lt;/span&gt;
&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;server&amp;quot;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;esri&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;MapResourceManager&lt;/span&gt; &lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;MapResourceManager1&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;server&amp;quot;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;ResourceItems&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;ResourceItems&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;esri&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;MapResourceManager&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;esri&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;Map&lt;/span&gt; &lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Map1&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;Height&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;453px&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;Width&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;556px&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;MapResourceManager&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;MapResourceManager1&amp;quot;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;esri&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;Map&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt; &lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;BusyIndicator&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;z-index: 1000; left: 25px; width: 100px; position:
absolute; top: 422px;height: 100px&amp;quot;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;img&lt;/span&gt; &lt;span style="color:red;"&gt;src&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;images/CircleThickbox.gif&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;form&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt;
&lt;span style="color:red;"&gt;language&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;javascript&amp;quot;&lt;/span&gt;
&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;function&lt;/span&gt;
showBusyIndicator(sender) {&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;showLayer(&lt;span style="color:maroon;"&gt;&amp;quot;BusyIndicator&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;
(sender!=&lt;span style="color:blue;"&gt;null&lt;/span&gt;) {&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;window.status = &lt;span style="color:maroon;"&gt;&amp;quot;Pending Tiles: &amp;quot;&lt;/span&gt; +
sender.pendingTiles.length; &lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;span&gt;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;function&lt;/span&gt;
showPendingTiles(sender) {&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;
(sender!=&lt;span style="color:blue;"&gt;null&lt;/span&gt;) {&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;window.status = &lt;span style="color:maroon;"&gt;&amp;quot;Pending Tiles: &amp;quot;&lt;/span&gt; +
sender.pendingTiles.length; &lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;span&gt;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;function&lt;/span&gt;
hideBusyIndicator(sender) {&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;hideLayer(&lt;span style="color:maroon;"&gt;&amp;quot;BusyIndicator&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;
(sender!=&lt;span style="color:blue;"&gt;null&lt;/span&gt;) {&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;window.status = &lt;span style="color:maroon;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;; &lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;span&gt;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;} &lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;// add busy
indicator functions to the map&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;map = Maps[&lt;span style="color:maroon;"&gt;&amp;quot;Map1&amp;quot;&lt;/span&gt;];&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;map.pendingTiles.add_onRequestsPending(showBusyIndicator);&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;map.pendingTiles.add_onRequestsRemove(showPendingTiles);&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;map.pendingTiles.add_onRequestsCompleted(hideBusyIndicator);&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:maroon;"&gt;body&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:maroon;"&gt;html&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://serverx.esri.com/ESRIBlogs/aggbug.aspx?PostID=181" width="1" height="1"&gt;</description><link>http://serverx.esri.com/ESRIBlogs/blogs/arcgisserver/archive/2007/05/01/How-to-track-pending-tiles-and-display-a-busy-indicator-in-a-Web-mapping-application.aspx</link><pubDate>5/1/2007 12:05:00 PM</pubDate></item><item><title>ArcGIS Server Team :: Configuring your server to display a "Data not available" tile for empty map cache areas</title><description>&lt;p&gt;Sterling Quinn of the Server team contributed this post on configuring your web server to display custom tiles in areas where you have not yet completed your map cache.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;At the ESRI
Developer Summit, several of you asked how we displayed a &amp;ldquo;Data not available&amp;rdquo;
tile in empty areas of the ArcGIS Online services. This kind of tile can be
useful if someone pans to the edge of the map or navigates to an area that you
have not completed caching. Configuring your server to return a &amp;ldquo;Data not available&amp;rdquo;
tile can in some cases yield a better user experience than returning nothing.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;img border="1" height="497" src="http://serverx.esri.com/blogimages/APR-12-2007/data_not_available_app.JPG" width="640" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;To display
the tile, you need to create a custom error response on your virtual cache
directory for HTTP Error 404: &amp;ldquo;Not Found&amp;rdquo;. Instead of an error message, the Web
server returns the tile.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Following
are steps for this process in IIS. Before you perform these steps, you should
put the blank or &amp;ldquo;Data not available&amp;rdquo; tile in your cache directory. The tile
you use must have the same dimensions and image format as the other tiles in
the cache. &lt;/span&gt;



&lt;/p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&lt;/span&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;1. In IIS
Manager, right-click the Virtual Directory for the specific cache and select
Properties. &lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;img border="1" height="451" src="http://serverx.esri.com/blogimages/APR-12-2007/virtual_directory_properties.PNG" width="487" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;2. Click
the Custom Errors tab, scroll down, and select the 404 error code.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;3. Click
the Edit button. In the URL box, specify the tile that IIS should return
whenever a tile is missing. It is important to use a URL and not just a path to
a file.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;4. Click
OK. Your dialog should look similar to the one below. Click OK again to return
to IIS Manager.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img border="1" height="447" src="http://serverx.esri.com/blogimages/APR-12-2007/custom_error_iis.PNG" width="472" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;You can download a sample, &amp;quot;Map data not yet available&amp;quot; tile (512 X 512 JPG) that you can use &lt;a href="http://serverx.esri.com/blogimages/APR-12-2007/data_not_avail.jpg" target="_blank"&gt;here&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://serverx.esri.com/ESRIBlogs/aggbug.aspx?PostID=177" width="1" height="1"&gt;</description><link>http://serverx.esri.com/ESRIBlogs/blogs/arcgisserver/archive/2007/04/12/Configuring-your-server-to-display-a-_2200_Data-not-available_2200_-tile-for-empty-map-cache-areas.aspx</link><pubDate>4/12/2007 9:00:00 AM</pubDate></item><item><title>Geometrybag :: GIS Tech 2007 Agenda Online.</title><description>
The Agenda for GIS Tech is up on the website The green tracks are the more technically oriented sessions, mostly being given by people from the consultancy group.  There&amp;#8217;s some good AGS talks, particularly on the second day, I&amp;#8217;ve had a preview of some of the demo&amp;#8217;s that Matt and Dan are doing in their Ajax\Web [...]</description><link>http://geometrybag.wordpress.com/2007/04/09/gis-tech-2007-agenda-online/</link><pubDate>4/9/2007 2:08:30 PM</pubDate></item><item><title>Paolo Corti's Blog :: Union of two geometries in PostGIS</title><description>For people not familiar with the Spatial SQL, I post this quick sample showing its beauty and simplicity at the same time.
We will go using PostGIS, but this could be performed in a similiar way with any GIS Database compliant with OGC Simple Feature Access - SQL Option.
The geomunion function
The geomunion Open GIS function make [...]</description><link>http://www.paolocorti.net/public/wordpress/index.php/2007/03/30/union-of-two-geometries-in-postgis/</link><pubDate>3/30/2007 8:49:01 AM</pubDate></item><item><title>Paolo Corti's Blog :: zigGis 1.2 released</title><description>zigGIS 1.2, the Open Source ArcGis Desktop&amp;#039;s connector to PostGIS, has just been released and you can download it here.

This is a major release, as far it implements new important features like selections and rendering. At this time editing is still not supported (so it is still a read only connector).
Also ArcMap documents persistence is [...]</description><link>http://www.paolocorti.net/public/wordpress/index.php/2007/03/21/ziggis-12-released/</link><pubDate>3/21/2007 10:44:23 AM</pubDate></item><item><title>Jeff Germain :: Managing Icons and Bitmaps in Your ArcGIS and Windows Applications</title><description>Something I wanted to streamline for my development team was icon and bitmap management; or rather taking as much of the decision making process out of the equation. The strategies I have taken have the following benefits.
Time / Efficiency

I don’t want developers spending any time digging around for or capturing an icon/bitmap. Period.
I don’t want [...]</description><link>http://jeffgermain.wordpress.com/2007/03/05/managing-icons-and-bitmaps-in-your-arcgis-and-windows-applications/</link><pubDate>3/5/2007 7:03:40 AM</pubDate></item><item><title>Jeff Germain :: Source Code Documentation in VB.NET</title><description>I recently discovered GhostDoc which is a free add-in for Visual Studio .NET (2003 &amp;#38; 2005). It&amp;#8217;s a handy tool that generates XML documentation comments. This tool was written for C# developers but has extended beta support for VB.NET. What&amp;#8217;s nice about it is that it reinforces the idea of using full descriptive names when [...]</description><link>http://jeffgermain.wordpress.com/2007/02/14/source-code-documentation-in-vbnet/</link><pubDate>2/14/2007 7:44:37 AM</pubDate></item><item><title>Jeff Germain :: Debugging Custom ArcGIS 9.1 Components in Visual Studio .NET 2003</title><description>If you have both the .NET 1.1 and 2.0 Frameworks installed on your development machine you will run into troubles when trying to debug ArcGIS 9.1 components written on the .NET 1.1 Framework. This is because ArcMap is an unmanaged application and as such when it initializes it loads the most current .NET Framework installed [...]</description><link>http://jeffgermain.wordpress.com/2007/02/14/debugging-custom-arcgis-91-components-in-visual-studio-net-2003/</link><pubDate>2/13/2007 1:38:05 PM</pubDate></item><item><title>Jeff Germain :: Task Manager Missing Tabs</title><description>I&amp;#8217;ve had an annoying problem for a while now and finally got around to looking into it. My Task Manager was missing all it&amp;#8217;s tabs. In fact, it was getting displayed without being hosted within its usual Windows Form. I had know idea what I did to  deserve this. See below.

Anyways, it&amp;#8217;s an easy fix. [...]</description><link>http://jeffgermain.wordpress.com/2007/02/02/task-manager-missing-tabs/</link><pubDate>2/2/2007 8:39:10 AM</pubDate></item></channel></rss>

