<?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 xmlns:a10="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Box Shaped World Feed</title><link>http://www.boxshapedworld.com/Blog/Syndication</link><description>The syndication feed for boxshapedworld.com</description><lastBuildDate>Sat, 16 Aug 2008 20:13:00 -0700</lastBuildDate><a10:id>boxshapedworldfeed</a10:id><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/YetAnotherGisBlog" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="yetanothergisblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item xml:base="http://www.boxshapedworlp.com/Blog/Post/125"><guid isPermaLink="false">125</guid><title>Don't Let SOPA or PIPA pass</title><description>&lt;p&gt;Assuming I set this up right, this sitE should not be available tomorrow in protest of PIPA and SOPA.  If you have not heard of either of these, and you live in the United States, then check out this link: &lt;a href="http://sopacountdown.com/"&gt;SOPA Countdown&lt;/a&gt;  Or to easily contact your representatives in government:  &lt;a href="http://sopastrike.com/strike"&gt;Strike&lt;/a&gt;.  Hopefully when you contact them it will be about opposing these ridiculous bills. &lt;/p&gt;</description><pubDate>Tue, 17 Jan 2012 00:00:00 -0800</pubDate><a10:updated>2012-01-17T00:00:00-08:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/124"><guid isPermaLink="false">124</guid><title>CDC Web Application</title><description>&lt;p&gt;I'm getting faster at these maps.  This is an interactive map that uses the CDC's Behavioral Risk Factor Surveillance System (BRFSS) dataset for 2008-2010.  It is a massive amount of data.  However &lt;a href="http://apps.nccd.cdc.gov/gisbrfss/default.aspx" target="_blank"&gt;their&lt;/a&gt; maps seemed a bit archaic to me, and tedious to use.  So this is my attempt at a more user-friendly/faster version of their data.  This isn't a criticism of their efforts though.&lt;/p&gt;&lt;p&gt;To do this, I started by downloading their data.  You probably notice that the data has that geography teacher's nightmare, Alaska and Hawaii where Mexico should be.  On a side note, I remember looking at mental maps drawn by US students.  They were required to draw a map of the US from memory.  Some put Alasak and Hawaii in Mexico...Instead I used state boundary data from &lt;a href="http://www.naturalearthdata.com/" target="_blank"&gt;Natural Earth.&lt;/a&gt;  This data was perfect because it was generalized and looked good.  The second step was to convert the data to a KML file which Google Fusion Tables allow you to import.  By using the Simple Field tags in the KML file, fusion tables can use this information to populate the columns as well as pull the geometry information.  Pretty slick.  I tried this using QGIS but for some reason the simple fields were miss aligned, so I wrote my own converter using C# and DotSpatial.  This allowed me to also create the classifications I needed to make a choropleth map.  I chose to use Natural Breaks with 5 classifications (fusion tables only allow five classfications, which is sufficient for most things).  Luckily Oren Gal was nice enough to post&lt;a href="http://www.gal-systems.com/2011/08/calculating-jenks-natural-breaks-in.html" target="_blank"&gt; his code&lt;/a&gt; for this, and I didn't need to make any modfications.&lt;/p&gt;&lt;p&gt;My main goal was speed, so to do this I stored all the fusion table queries and styles in a "metadata" table.  I'm pretty amazed at the speed in which the data renders through the Fusion Tables and Google Maps.  I think this has little to do with any of my own programming skills.  Although setting up everything beforehand helps a little...I hope.&lt;/p&gt;&lt;p&gt;Here is the &lt;a href="http://www.boxshapedworld.com/CDCHealtApp.html"&gt;interactive map&lt;/a&gt;.  If you want acess to the data it is available in public fusion tables.  For 2010:  &lt;a href="http://www.google.com/fusiontables/DataSource?dsrcid=1658142"&gt;data&lt;/a&gt; and &lt;a href="http://www.google.com/fusiontables/DataSource?dsrcid=1661781"&gt;metadata&lt;/a&gt;.  For 2009:  &lt;a href="http://www.google.com/fusiontables/DataSource?dsrcid=1660642"&gt;data&lt;/a&gt; and &lt;a href="http://www.google.com/fusiontables/DataSource?dsrcid=1662324"&gt;metadata&lt;/a&gt;.  For 2008:  &lt;a href="http://www.google.com/fusiontables/DataSource?dsrcid=1662299"&gt;data&lt;/a&gt; and &lt;a href="http://www.google.com/fusiontables/DataSource?dsrcid=1662550"&gt;metadata&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 29 Sep 2011 00:00:00 -0700</pubDate><a10:updated>2011-09-29T00:00:00-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/123"><guid isPermaLink="false">123</guid><title>Congress Web Application</title><description>&lt;p&gt;I've been working on this project for a few months now and think it has finally reached a point worth sharing.  I think like most people in the U.S. (or world) have been pretty fed up with our politicians and inability to make simple decisions without arguing and causing undo stress on the economy.  That might be my take on the situation.  Part of keeping our pols in check is knowing what they are up to, so this project is my (non-partisan) attempt at doing that.  I say non-partisan with the understanding that inherit bias is enitrely impossible to eliminate.&lt;/p&gt;So what is it?  It is a simple interactive map, that allows the user to select their congressional district (or search for their address) then find out basic information about their representative - party affiliation, age, what they look like, their vote record, twitter activity, and campaing finances.  There is a lot of information out their at a lot of different websites, so this is my attempt to consolidate some of that and make it easier for the user to get this information.  It is only for the 112th Congress, so no historic information.&lt;/p&gt;&lt;p&gt;How was this done?  I used a number of different javascript libraries.  The map functionality is provided by Polymaps.  Which as the slogan says, it's for beautiful maps.  The interface functionality uses Dojo.  I know people have a tendency to bash Dojo, but I found it easy to get started with, and had a lot of controls that didn't require plugins to.  I also used Knockout for its MVVM functionality and binding.  I used Knockout's templating which also required JQuery unfortunately.  If I had to go back, I think I would have just used JQuery instead of Dojo, or figured out Dojo's templating/MVVM framework.  Finally I had to use Google's javascript api to geocode people's addresses.  Unfortunately, their web based one did not work.  For the data, district boundaries, I got that from National Atlas, which the data is kind of crummy, but manageable.  I used &lt;a href="http://mapshaper.org/"&gt;mapshaper&lt;/a&gt; to simplify the data and uploaded it to a google fusion table.  To upload I used Google's python API and GDAL/OGR to convert the geometry to GeoJSON/KML/WKT and stored each as separate fields/columns.  On the backend I used ASP.NET and NetTopology suite to clip out the GeoJson tiles I needed to display in the polymaps map.  I cached this data in another fusion table &lt;a href="http://www.google.com/fusiontables/DataSource?dsrcid=656916"&gt;here&lt;/a&gt;.  All the tiles are publicly available, but unlisted.  I also use ASP.NET caching to try and speed up the download speeds.  The background map was created with cloudmade data.  Frankly I'm still having problems with the speed, and I think it has to do with polymaps drawing out the polygons.  Finally, data about the representative is collected from the NY times congress api, OpenSecrets.org, Govtrack, Twitter, and Votesmart (see the web app about button for links).&lt;/p&gt;&lt;p&gt;Here is the link to the &lt;a href="http://www.boxshapedworld.com/congressmashup.htm"&gt;web application&lt;/a&gt;.  It should work fine with Google Chrome, Firefox, Safari, and possibly with IE 8 or later.  Enjoy, hopefully too many users will not break the app.&lt;/p&gt;</description><pubDate>Fri, 16 Sep 2011 00:00:00 -0700</pubDate><a10:updated>2011-09-16T00:00:00-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/122"><guid isPermaLink="false">122</guid><title>Polymaps problems</title><description>&lt;p&gt; I'm generating geojson tiles for use in &lt;a href="http://polymaps.org/"&gt;Polymaps&lt;/a&gt;.  To clip my geometry I'm using a .net library called &lt;a href="http://code.google.com/p/tf-net/"&gt;Topology Framework&lt;/a&gt;.  I'm calculating the bounds of the tile using the zoom, x colum, and y row, which gives me my clipping bounds.  For example for zoom = 3, x=2 and y = 2, I calculate upper left longitude as -90, latitude as 66.5132604431119.  Then for the lower right longitude -45 and latitude 40.9798980696201.  To confirm these numbers I use polymap's function map.coordinateLocation(c).  That gives me the same exact numbers minus a slight rounding difference.&lt;/p&gt;&lt;p&gt; Unfortunately when I go to render the tiles on a map, the tile boundaries are clearly visible.  Comparing their examples &lt;a href="http://polymaps.org/ex/statehood.html"&gt;statehood&lt;/a&gt; and &lt;a href="http://polymaps.org/ex/population.html"&gt;population density&lt;/a&gt; their tile bounds are different from mine and those returned from the coordinateLocation function.  Go to their json server &lt;a href="http://polymaps.appspot.com/state/3/2/2.json"&gt;http://polymaps.appspot.com/state/3/2/2.json&lt;/a&gt; for example and the min longitude comes out as -90.449996 instead of -90 and their min latitude comes out as 40.639290 instead of 40.97...I could understand the discrepancy if the map.coordinateLocation function didn't return the same values as I was getting.  Anyone have any ideas?&lt;/p&gt;</description><pubDate>Wed, 11 May 2011 00:00:00 -0700</pubDate><a10:updated>2011-05-11T00:00:00-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/121"><guid isPermaLink="false">121</guid><title>Google Fusion Table Mashup</title><description>&lt;p&gt;I noticed an interesting yet controversial visualisation via &lt;a href="http://flowingdata.com/2011/03/21/history-of-the-world-in-100-seconds-according-to-wikipedia/"&gt;@flowingdata&lt;/a&gt; called &lt;a href="http://www.ragtag.info/2011/feb/2/history-world-100-seconds/"&gt;"A History of the World in 100 Seconds"&lt;/a&gt; (note the "A" implying a non-singularity of history).  Basically it shows flashes for events in history, accumulating over time.  By the end, the distinctive shapes of the world are visible.  The data was scraped from Wikipedia identifying location and time, with a total of ~14k events identified.  The visualization has been praised and ridiculed. The criticism mostly spawns from the euro-centric result, most likely coming from the fact that the data came from the English language version of the website.  Is that really a valid criticism?  Yes and no, but I think if people have a criticism like that why not put the time and effort into scraping the non-english language versions of wikipedia to make something more balanced?&lt;/p&gt;&lt;p&gt;What was most interesting to me was the creator has generously made his data available to the public.  The amount of effort it probably took to create the data makes me impressed the creator would make it available.  Also of interest is it is a spatio temporal dataset available in a Google Fusion Table.  I been seeing fusion tables pop up a lot lately.  A handy feature of a fusion table is it can be geocoded and loaded directly, and rather quickly, into a Google Map.&lt;/p&gt;&lt;p&gt;So I took it upon myself as a learning activity to map the wikipedia data.  I initially looked into &lt;a href="http://code.google.com/p/timemap/"&gt;timemap.js&lt;/a&gt;.  While this is a nice little library to link up a map and timeline, the amount of data overpowered it.  So instead I created a little timeline from scratch by using the essence of timemap, the protovis javascript library (particularly the focus+context example), and the Google Maps API v3.  This was actually pretty easy to set up once I got my Google Fusion Tables API queries set up correctly.  JQuery filled in some of the gaps of shaping the data into simple objects to be used by protovis.  Here is the &lt;a href="http://www.boxshapedworld.com/timeline/protovistimeline.htm"&gt;page&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;To use the experiment, you simply drag the red box on the context timeline and the points are updated on the focus timeline and map.  Click on a point on the map to get detailed info, or click on a timeline point to zoom to the location on the map.  Is this really useful?  Not really, but it is interesting.  You can probably note that written (western) history is biased towards the 18, 19, and 20th century.  There are some random points in time like 1616 AD when apparently a ton of history happened.  No for the bad news.  I am not sure what happened but between 400BC and 1000AD the fusion table query breaks.  The query works in the gui version of fusiont tables but not through the API.  Any comments?&lt;/p&gt;</description><pubDate>Tue, 29 Mar 2011 00:00:00 -0700</pubDate><a10:updated>2011-03-29T00:00:00-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/120"><guid isPermaLink="false">120</guid><title>ESRI Silverlight API and MVVM Part III</title><description>&lt;p&gt;In the&lt;a href="http://www.boxshapedworld.com/Blog/Post/118"&gt; previous post&lt;/a&gt; we established the basics of our MVVM pattern and connected our client application with our service.  In this post we will move on to the mapping part using ESRI's Silverlight API.&lt;/p&gt;
&lt;p&gt;Sorry for the delay on getting this final lesson complete.  I hit a few snags as I attempted a few new tricks I hadn't tried before.  Also I hadn't attempted this process with the same amount of geometry as was in this dataset.  This was probably the biggest problem, and I came up with some non viable workarounds.  Also, this series was written using ESRI ArcGIS Silverlight 2.1, and they have just released a beta 2.2.  I haven't looked at it yet, but presumably they will have changed some of the binding limitations in 2.1, so this tutorial might be useless sooner than later.&lt;/p&gt;
&lt;p&gt;To me there are two approaches to getting our geometry (spatial data) into a format that is useable by ESRI's API.  Unfortunately the geometry in the MS SQL Server database is not the same as the geometry in ESRI's API.  We need some way to convert between the two (if you want to change data in some way).  I see at least two general ways to do this:  handle the conversion server side, and handle the conversion client side.  &lt;a href="http://www.gisbelowsealevel.nl/Blog/post/Spatial-Web-Services-in-Silverlight.aspx"&gt;GIS Below Sea Level&lt;/a&gt; shows a Well-Known-Text approach, and &lt;a href="http://blogs.esri.com/Dev/blogs/silverlightwpf/archive/2010/03/11/Sending-geometry-between-Silverlight-and-the-server-using-WCF.aspx"&gt;Morten Nielson&lt;/a&gt; shows an approach of transporting ESRI geometry through a WCF service.  I can see advantages to both.  On the one hand you are not relying on the client's processing power, but on the other hand you don't have to send massive amounts of data across the interwebs.  And as I found out with this solution it can fail with large amounts of polygon data (e.g. the Alaska district).  However, this is still the method I chose for this tutorial.  To compensate for the large amounts of data I used the .Reduce() SQL spatial command to simplify the polygons.  Why is this poor form?  Because Reduce treats each piece of geometry separately, ignoring their topology.  If you want to use this method for your own data, and you have a lot of data, you might look into &lt;a href="http://topologylite.codeplex.com/wikipage?title=ProduceTopology&amp;referringTitle=Documentation"&gt;ToplogyLite&lt;/a&gt; to create a new simpler version of your data, and perhaps arrange your simplified data according to scale so you only load the least amount of data as possible.  I haven't tried the WKT method, but I imagine this would reduce the size of the data being transferred as an alternative.&lt;/p&gt;
&lt;p&gt;Let's start by adding a class that can handle the conversion from SQL server geometry (actually geography in our case) to ESRI geometry, then create a service to distribute the geometry.  We'll also want an intermediary POCO to help with the serialization.&lt;/p&gt;
&lt;p&gt;Start by adding a reference to the ESRI.ArcGIS.Client assembly to our server project (congressDistrict.web).  Make sure it is the assembly for WPF and not Silverlight 4.  Next add a reference to the Microsoft.SQLServer.Types.    This *.dll file will be found in ..\Program Files\Microsoft SQL Server\100\SDK\Assemblies.  You might be thinking, why don't we send the SQLServer data types to the client and parse there, well unfortunately you can't load that *.dll into your Silverlight projects.  Finally create a new class in our Helper folder called geomHelper.&lt;/p&gt;
&lt;p&gt;The geomHelper class will take a byte array and convert it to our ESRI geometry.  Since we are only working with our polygons, that is all we will implement.  Polygons are the most time consuming of the SQL Server spatial types to convert so you should be able to modify the code to handle the other types easily enough.&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; BinaryToESRIGeom(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; geom() &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Byte&lt;/span&gt;) &lt;span class="kwrd"&gt;As&lt;/span&gt; ESRI.ArcGIS.Client.Geometry.Geometry
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; sqlGeom &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; SqlGeometry
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; sqlGeog &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; SqlGeography

        Using stream &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; System.IO.MemoryStream(geom)
            Using reader &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; System.IO.BinaryReader(stream)
                sqlGeog.Read(reader)
                sqlGeom = SqlGeometry.STGeomFromWKB(sqlGeog.STAsBinary, sqlGeog.STSrid)

                &lt;span class="kwrd"&gt;Select&lt;/span&gt; &lt;span class="kwrd"&gt;Case&lt;/span&gt; sqlGeom.STGeometryType
                    &lt;span class="kwrd"&gt;Case&lt;/span&gt; &lt;span class="kwrd"&gt;Is&lt;/span&gt; = Microsoft.SqlServer.Types.OpenGisGeometryType.Polygon.ToString

                        &lt;span class="kwrd"&gt;Return&lt;/span&gt; SQLplygnGeomToESRIGeom(sqlGeom)
                &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Select&lt;/span&gt;
            &lt;span class="kwrd"&gt;End&lt;/span&gt; Using
        &lt;span class="kwrd"&gt;End&lt;/span&gt; Using
        &lt;span class="kwrd"&gt;Return&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt;

    &lt;span class="kwrd"&gt;End&lt;/span&gt; Function&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;This shared function accepts the byte array and then identifies the type of geometry sending it to the correct converter, returning ESRI geometry.  If you remember from the first lesson you converted our spatial data to binary in SQL server so we could use it in a LINQ query.  I regret using the geography data type, as I found it seemed to have some strange behaviors, and the documentation was error prone.  I convert from geography to geometry to simplify things.  This of course introduces potential errors in the geometry.&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; SQLplygnGeomToESRIGeom(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; sqlGeom &lt;span class="kwrd"&gt;As&lt;/span&gt; Microsoft.SqlServer.Types.SqlGeometry) &lt;span class="kwrd"&gt;As&lt;/span&gt; ESRI.ArcGIS.Client.Geometry.Polygon
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; valid &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Boolean&lt;/span&gt; = sqlGeom.STIsValid()
        &lt;span class="kwrd"&gt;If&lt;/span&gt; valid &lt;span class="kwrd"&gt;Then&lt;/span&gt;

            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; esriPoly &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; ESRI.ArcGIS.Client.Geometry.Polygon


            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; esriPC &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; ESRI.ArcGIS.Client.Geometry.PointCollection
            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; ext &lt;span class="kwrd"&gt;As&lt;/span&gt; SqlGeometry = sqlGeom.STExteriorRing
            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; stpnt &lt;span class="kwrd"&gt;As&lt;/span&gt; SqlGeometry = ext.STStartPoint
            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; i &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt; = 1
            &lt;span class="kwrd"&gt;Do&lt;/span&gt; &lt;span class="kwrd"&gt;Until&lt;/span&gt; stpnt.IsNull()

                stpnt = ext.STPointN(i)

                &lt;span class="kwrd"&gt;If&lt;/span&gt; &lt;span class="kwrd"&gt;Not&lt;/span&gt; stpnt.IsNull &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; x &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Double&lt;/span&gt; = stpnt.STX
                    esriPC.Add(&lt;span class="kwrd"&gt;New&lt;/span&gt; ESRI.ArcGIS.Client.Geometry.MapPoint(stpnt.STX, stpnt.STY))
                &lt;span class="kwrd"&gt;Else&lt;/span&gt;
                    &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Do&lt;/span&gt;
                &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;

                i += 1
            &lt;span class="kwrd"&gt;Loop&lt;/span&gt;
            esriPoly.Rings.Add(esriPC)
            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; int &lt;span class="kwrd"&gt;As&lt;/span&gt; SqlGeometry = sqlGeom.STInteriorRingN(1)
            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; j &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt; = 2

            &lt;span class="kwrd"&gt;Do&lt;/span&gt; &lt;span class="kwrd"&gt;Until&lt;/span&gt; int.IsNull()
                int = sqlGeom.STInteriorRingN(j)
                i = 1
                esriPC = &lt;span class="kwrd"&gt;New&lt;/span&gt; ESRI.ArcGIS.Client.Geometry.PointCollection
                &lt;span class="kwrd"&gt;Do&lt;/span&gt; &lt;span class="kwrd"&gt;Until&lt;/span&gt; stpnt.IsNull()
                    stpnt = ext.STPointN(i)
                    &lt;span class="kwrd"&gt;If&lt;/span&gt; &lt;span class="kwrd"&gt;Not&lt;/span&gt; stpnt.IsNull &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                        esriPC.Add(&lt;span class="kwrd"&gt;New&lt;/span&gt; ESRI.ArcGIS.Client.Geometry.MapPoint(stpnt.STX, stpnt.STY))
                    &lt;span class="kwrd"&gt;Else&lt;/span&gt;
                        &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Do&lt;/span&gt;
                    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;

                    i += 1
                &lt;span class="kwrd"&gt;Loop&lt;/span&gt;
                esriPoly.Rings.Add(esriPC)
                j += 1
            &lt;span class="kwrd"&gt;Loop&lt;/span&gt;
            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; str &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = esriPoly.Extent.ToString
            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; wkid &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt; = sqlGeom.STSrid

            esriPoly.SpatialReference = &lt;span class="kwrd"&gt;New&lt;/span&gt; SpatialReference(wkid)


            &lt;span class="kwrd"&gt;Return&lt;/span&gt; esriPoly

        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
        &lt;span class="kwrd"&gt;Return&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt;

    &lt;span class="kwrd"&gt;End&lt;/span&gt; Function&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;For the polygon converter function, we have to loop through each of the interior rings and then place them into ESRI's rings as point collections.  I'm presuming a bit of previous experience working with Geocomputation concepts.&lt;/p&gt;
&lt;p&gt;For the next part, I would like to digress slightly.  As was mentioned earlier, our workaround of sending binary data instead of geometry allows us to retrieve our geometry columns but still does not allow use to use the sql spatial in LINQ.  Again, we have a couple of options to getting these to work.  One is to forget LINQ all together and use a SQL connection to send a SQL command back to the database.  I originally did this in one of my test projects, and when you see the alternative you'll understand why I'm not showing that example.  I saved myself about 20 lines of code and the headache associated. The alternative is to use a stored procedure in our database and use that to mimic the SQL Spatial commands. This works particularly well if you now ahead of time the type of spatial queries you will be using.&lt;/p&gt;
&lt;p&gt;Open up SQL Server Management Studio and load up our working database.  Under Programmability, Right-Click on Stored Procedures and pick New Stored Procedure.  Change &lt;Procedure_Name, sysname,ProcedureName&gt; to SelectByIntersect.  Delete the auto-generated
parameters and add these instead.&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;USE&lt;/span&gt; [congressdistricts]
&lt;span class="kwrd"&gt;GO&lt;/span&gt;
/****** &lt;span class="kwrd"&gt;Object&lt;/span&gt;:  StoredProcedure [dbo].[SelectByIntersect]    Script &lt;span class="kwrd"&gt;Date&lt;/span&gt;: 03/22/2011 08:43:12 ******/
&lt;span class="kwrd"&gt;SET&lt;/span&gt; ANSI_NULLS &lt;span class="kwrd"&gt;ON&lt;/span&gt;
&lt;span class="kwrd"&gt;GO&lt;/span&gt;
&lt;span class="kwrd"&gt;SET&lt;/span&gt; QUOTED_IDENTIFIER &lt;span class="kwrd"&gt;ON&lt;/span&gt;
&lt;span class="kwrd"&gt;GO&lt;/span&gt;
&lt;span class="rem"&gt;-- =============================================&lt;/span&gt;
&lt;span class="rem"&gt;-- Author:        &amp;lt;Author,,Name&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;-- Create date: &amp;lt;Create Date,,&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;-- Description:    &amp;lt;Description,,&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;-- =============================================&lt;/span&gt;
&lt;span class="kwrd"&gt;ALTER&lt;/span&gt; &lt;span class="kwrd"&gt;PROCEDURE&lt;/span&gt; [dbo].[SelectByIntersect] 
    &lt;span class="rem"&gt;-- Add the parameters for the stored procedure here&lt;/span&gt;
       @extents &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(&lt;span class="kwrd"&gt;max&lt;/span&gt;),
       @epsg &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(10)
&lt;span class="kwrd"&gt;AS&lt;/span&gt;
&lt;span class="kwrd"&gt;BEGIN&lt;/span&gt;
    &lt;span class="rem"&gt;-- SET NOCOUNT ON added to prevent extra result sets from&lt;/span&gt;
    &lt;span class="rem"&gt;-- interfering with SELECT statements.&lt;/span&gt;
    &lt;span class="kwrd"&gt;SET&lt;/span&gt; NOCOUNT &lt;span class="kwrd"&gt;ON&lt;/span&gt;;

    &lt;span class="rem"&gt;-- Insert statements for procedure here&lt;/span&gt;
    &lt;span class="kwrd"&gt;Declare&lt;/span&gt; @mapExt geography
    &lt;span class="kwrd"&gt;SET&lt;/span&gt; @mapExt = Geography::STGeomFromText(@extents, @epsg)
    &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; pk_id, ID, CONG_DIST, NAME, PARTY_AFF, URL, &lt;span class="kwrd"&gt;STATE&lt;/span&gt;, STATE_FIPS, SENATOR_1, SENATOR_2, SEN_1_URL, SEN_2_URL, &lt;span class="kwrd"&gt;CAST&lt;/span&gt;(geom.Reduce(50) &lt;span class="kwrd"&gt;AS&lt;/span&gt; VARBINARY(&lt;span class="kwrd"&gt;MAX&lt;/span&gt;)) &lt;span class="kwrd"&gt;AS&lt;/span&gt; geom, api_id 
    &lt;span class="kwrd"&gt;FROM&lt;/span&gt; cgd111p020 
    &lt;span class="kwrd"&gt;where&lt;/span&gt; geom.STIntersects(@mapExt) = 1 &lt;span class="kwrd"&gt;AND&lt;/span&gt;  pk_id &lt;span class="kwrd"&gt;in&lt;/span&gt; (&lt;span class="kwrd"&gt;select&lt;/span&gt; &lt;span class="kwrd"&gt;distinct&lt;/span&gt; pk_id 
                                                                &lt;span class="kwrd"&gt;from&lt;/span&gt; cgd111p020 &lt;span class="kwrd"&gt;as&lt;/span&gt; t2
                                                                &lt;span class="kwrd"&gt;where&lt;/span&gt; geom.STArea() = (&lt;span class="kwrd"&gt;Select&lt;/span&gt; &lt;span class="kwrd"&gt;MAX&lt;/span&gt;(geom.STArea()) &lt;span class="kwrd"&gt;from&lt;/span&gt; cgd111p020 &lt;span class="kwrd"&gt;as&lt;/span&gt; t3 &lt;span class="kwrd"&gt;WHERE&lt;/span&gt; t3.ID = t2.ID ))
END&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;The procedure accepts two arguments, a &lt;a href="http://en.wikipedia.org/wiki/Well-known_text"&gt;Well-Known Text&lt;/a&gt; string o, and the SRID/EPSG code of the WKT.  The WKT is meant to be the bounds of the area of interest, and the EPSG should be the same as our data and map.  For the actual procedure, we start by creating some temproary geometry from the WKT string.  Once that is done, we can perform the STIntersects to capture our geometry.  As you can see there are also a lot of subqueries.  I'm admittedly not a SQL expert, so these might not be the most efficient commands.  Any recommendations can be left in the comments.  What they are for is to reduce the amount of geometry sent back from the intersection query.  We start by looking for the geometry with the largest area to send back for each unique congress district ID.  If you have looked through the data already, you'll see a lot of districts have duplicated rows.  I clearly didn't normalize this dataset.  Basically I'm tossing out any of the districts that have a lot of little islands that aren't really necessary.  Then I call the Reduce command dynamically to simplify the geometry further.  I recommend setting up your data so that it is "lighter".  This tutorial is just to show you some techniques to use with the MVVM pattern.  I've
structured the result to be the same as our view, and you'll see why next.  Finally execute (run) the SQL so that it can be added to the database.&lt;/p&gt;
&lt;p&gt;Head back over to our solution in visual studio, and go to our Entities.  Double click on cdEntities.edmx and go to View --&gt; Other Windows --&gt; Entity Data Model Browser.  You should have something like this:&lt;/p&gt;
&lt;p&gt;&lt;a href=http://www.boxshapedworld.com/Blog/GetFile/esrimvvm_3_2.png&gt;&lt;img src= http://www.boxshapedworld.com/Blog/GetFile/esrimvvm_3_2.png width=200 height=200/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Update your model and make sure that you choose to add the stored procedure that was just added.  In the Model Browser expand the Stored Procedure and right click SelectByIntersect to add as a function.  In the Add Function Import, select properties and then choose Entities fromt he options.  In the drop-down select view_CongressDistrict.  Click on ok and a function should be added.  Now we are ready to use that function.&lt;/p&gt;
&lt;p&gt;&lt;a href=http://www.boxshapedworld.com/Blog/GetFile/esrimvvm_3_3.png&gt;&lt;img src= http://www.boxshapedworld.com/Blog/GetFile/esrimvvm_3_3.png width=200 height=200/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In order to send our geometry out to our client, we need to wrap it up in a little POCO package.  You can't simply return the the geometry because the service won't serialize it.  At least that is the problem I had, but when you put it in a simple object as a property it serializes fine.  Create a new Class in the Model folder called DistrictGeom, and add three properties called DistrictID, APIId, and ESRIGeometry.  See below for the complete code: &lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; ESRI.ArcGIS.Client.Geometry
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; System.Runtime.Serialization

&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; DistrictGeom
    &lt;span class="kwrd"&gt;Private&lt;/span&gt; _ident &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;

    &amp;lt;DataMember()&amp;gt; _
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt; DistrictID() &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;
        &lt;span class="kwrd"&gt;Get&lt;/span&gt;
            &lt;span class="kwrd"&gt;Return&lt;/span&gt; _ident
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Get&lt;/span&gt;
        &lt;span class="kwrd"&gt;Set&lt;/span&gt;(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; value &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;)
            _ident = value
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Set&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt;


    &lt;span class="kwrd"&gt;Private&lt;/span&gt; _geometry &lt;span class="kwrd"&gt;As&lt;/span&gt; Geometry
    &amp;lt;DataMember()&amp;gt; _
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt; EsriGeometry() &lt;span class="kwrd"&gt;As&lt;/span&gt; Geometry
        &lt;span class="kwrd"&gt;Get&lt;/span&gt;
            &lt;span class="kwrd"&gt;Return&lt;/span&gt; _geometry
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Get&lt;/span&gt;
        &lt;span class="kwrd"&gt;Set&lt;/span&gt;(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; value &lt;span class="kwrd"&gt;As&lt;/span&gt; Geometry)
            _geometry = value
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Set&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt;


    &lt;span class="kwrd"&gt;Private&lt;/span&gt; _apiID &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;
    &amp;lt;DataMember()&amp;gt; _
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt; APIId() &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;
        &lt;span class="kwrd"&gt;Get&lt;/span&gt;
            &lt;span class="kwrd"&gt;Return&lt;/span&gt; _apiID
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Get&lt;/span&gt;
        &lt;span class="kwrd"&gt;Set&lt;/span&gt;(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; value &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;)
            _apiID = value
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Set&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt;


&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt;
&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;Now we can finally add our Congress Districts geometry service.  Start  by going to the IcdService and adding a new function.  We want this function to accept a type of ESRI envelope geometry so that we can filter our results only to the viewable area, and reduce the amount of data that is sent for each of our service transactions.&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;

    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; GetDistricts(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; mapExt &lt;span class="kwrd"&gt;As&lt;/span&gt; ESRI.ArcGIS.Client.Geometry.Envelope) &lt;span class="kwrd"&gt;As&lt;/span&gt; IEnumerable(Of DistrictGeom) &lt;span class="kwrd"&gt;Implements&lt;/span&gt; IcdService.GetDistricts
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; gb &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; SqlGeographyBuilder
        gb.SetSrid(4269)
        gb.BeginGeography(OpenGisGeographyType.Polygon)
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; str1 &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = &lt;span class="kwrd"&gt;String&lt;/span&gt;.Format(&lt;span class="str"&gt;"{0} {1}, {2} {3}, {4} {5},{6} {7}, {8} {9}"&lt;/span&gt;, mapExt.YMin, mapExt.XMin, mapExt.YMax, mapExt.XMin, mapExt.YMax, mapExt.XMax, mapExt.YMin, mapExt.XMax, mapExt.YMin, mapExt.XMin)
        gb.BeginFigure(mapExt.YMin, mapExt.XMin)
        gb.AddLine(mapExt.YMin, mapExt.XMax)
        gb.AddLine(mapExt.YMax, mapExt.XMax)
        gb.AddLine(mapExt.YMax, mapExt.XMin)
        gb.AddLine(mapExt.YMin, mapExt.XMin)
        gb.EndFigure()
        gb.EndGeography()
        str1 = gb.ConstructedGeography.ToString()
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; views &lt;span class="kwrd"&gt;As&lt;/span&gt; List(Of view_CongressDistrict) = _cdDB.SelectByIntersect(gb.ConstructedGeography.ToString, gb.ConstructedGeography.STSrid.ToString).ToList
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; districts &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; ObservableCollection(Of DistrictGeom)
        &lt;span class="kwrd"&gt;For&lt;/span&gt; &lt;span class="kwrd"&gt;Each&lt;/span&gt; v &lt;span class="kwrd"&gt;As&lt;/span&gt; view_congressDistrict &lt;span class="kwrd"&gt;In&lt;/span&gt; views
            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; g &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; DistrictGeom &lt;span class="kwrd"&gt;With&lt;/span&gt; {.APIId = v.api_id, .DistrictID = v.CONG_DIST, .EsriGeometry = geomHelper.BinaryToESRIGeom(v.geom)}
            districts.Add(g)
        &lt;span class="kwrd"&gt;Next&lt;/span&gt;
        &lt;span class="kwrd"&gt;Return&lt;/span&gt; districts.AsEnumerable

    &lt;span class="kwrd"&gt;End&lt;/span&gt; Function&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;This function starts by converting our envelope from ESRI geometry to SQL geometry.  I'm doing this because it's easy to get a WKT string from it, and since it is just an envelope it is a relatively simple shape to work with.  Don't be fooled by the geographyBuilder documentation, the order that you add parameters is important and goes Latitude, Longitude.  I feel this is counterintuitive and should follow x,y as with the geoemtryBuilder.  Since we have added or stored procedure as a function, we can simply call it from our instantiated model _cdDB.  Presuming our query worked, the next step reshapes our view into our DistrictGeom class.  We pass the binary data to our geomHelper class which processes it into the ESRI geometry format. That's "all" there is to getting the service setup.  Rebuild your web project.  You can test your service again, by right-clicking on it and choosing view in browser.&lt;/p&gt;
&lt;p&gt;now we are ready to get to the heart of the matter, trying to use the ESRI Silverlight API with our MVVM pattern.  There is no way to do this as a "pure" MVVM pattern without letting our viewmodels now a little about our views.  This might upset MVVM pattern purists, but you gotta do what you gotta do.  Switch over to the silverlight project, and update the congressDistrictService.  This will bring in our GetDistricts and districtGeom class for use in the project.&lt;/p&gt;
&lt;p&gt;We're just going to start in the common folder to get everything setup and then move on from there.  Open up the ICongressDistrictService and add this new sub and event.&lt;/p&gt;
&lt;code&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
    &lt;span class="kwrd"&gt;Sub&lt;/span&gt; GetGeometryByExtent(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; extent &lt;span class="kwrd"&gt;As&lt;/span&gt; Envelope)
    &lt;span class="kwrd"&gt;Event&lt;/span&gt; GetGeometryByExtentComplete &lt;span class="kwrd"&gt;As&lt;/span&gt; EventHandler(Of EntityResultsArgs(Of DistrictGeom))
&lt;/pre&gt;&lt;/code&gt;
&lt;p&gt;This is the sub routine that will interact with our WCF service and then raise the event.  Next open up the ViewModelTypes class.&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Const&lt;/span&gt; MAP_VIEW_MODEL = &lt;span class="str"&gt;"MapViewModel"&lt;/span&gt;&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;I'm just setting this up now for when we add our view, and can distinguish it from our list view.  Next open the CongressDistrictsModel so that we can implement our new sub routine.&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; GetGeometryByExtent(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; extent &lt;span class="kwrd"&gt;As&lt;/span&gt; Envelope) &lt;span class="kwrd"&gt;Implements&lt;/span&gt; ICongressDistrictService.GetGeometryByExtent
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; client &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; congressDistrictService.IcdServiceClient
        &lt;span class="kwrd"&gt;AddHandler&lt;/span&gt; client.GetDistrictsCompleted, &lt;span class="kwrd"&gt;AddressOf&lt;/span&gt; HandleGetGeometry
        client.GetDistrictsAsync(extent)

    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;

    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; HandleGetGeometry(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; sender &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Object&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; e &lt;span class="kwrd"&gt;As&lt;/span&gt; congressDistrictService.GetDistrictsCompletedEventArgs)

        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; x &lt;span class="kwrd"&gt;As&lt;/span&gt; IEnumerable(Of congressDistrictService.DistrictGeom) = &lt;span class="kwrd"&gt;DirectCast&lt;/span&gt;(e.Result, IEnumerable(Of congressDistrictService.DistrictGeom))
        &lt;span class="kwrd"&gt;RaiseEvent&lt;/span&gt; GetGeometryByExtentComplete(&lt;span class="kwrd"&gt;Me&lt;/span&gt;, &lt;span class="kwrd"&gt;New&lt;/span&gt; EntityResultsArgs(Of congressDistrictService.DistrictGeom)(x))
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Event&lt;/span&gt; GetGeometryByExtentComplete(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; sender &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Object&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; e &lt;span class="kwrd"&gt;As&lt;/span&gt; EntityResultsArgs(Of congressDistrictService.DistrictGeom)) &lt;span class="kwrd"&gt;Implements&lt;/span&gt; ICongressDistrictService.GetGeometryByExtentComplete
&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;This pretty much just follows what we did previously.  Make a call to that service, handle the returned data and raise an event for whatever viewmodel is listening.  Next, add a class to the ViewModel folder calld MapViewModel.  Here we go:&lt;/p&gt;
&lt;p&gt;Add the imports that are needed:&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; System.ComponentModel.Composition
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; ESRI.ArcGIS.Client.Geometry
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; GalaSoft.MvvmLight.Command
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; ESRI.ArcGIS.Client
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; GalaSoft.MvvmLight.Messaging&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;Set up the MEF stuff so that we can export our model as the MapViewModel type, and inherit from the MainViewModel:&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&amp;lt;PartCreationPolicy(CreationPolicy.NonShared)&amp;gt; _
&amp;lt;Export(ViewModelTypes.MAP_VIEW_MODEL)&amp;gt; _
&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; MapViewModel
    &lt;span class="kwrd"&gt;Inherits&lt;/span&gt; MainViewModel&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;

    &lt;span class="kwrd"&gt;Private&lt;/span&gt; _model &lt;span class="kwrd"&gt;As&lt;/span&gt; ICongressDistrictService

    &amp;lt;ImportingConstructor()&amp;gt; _
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt;(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; theModel &lt;span class="kwrd"&gt;As&lt;/span&gt; ICongressDistrictService)
        &lt;span class="kwrd"&gt;Me&lt;/span&gt;._model = theModel

    &lt;span class="kwrd"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;Now we've implemented our constructor so that it will import the same CongressDistrictsModel as our list.  It doesn't do anything, but at least it is there :).  Next, add  a new silverlight user control to the views folder called MapView.&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;UserControl&lt;/span&gt; &lt;span class="attr"&gt;x:Class&lt;/span&gt;&lt;span class="kwrd"&gt;="congressDistrict.client.MapView"&lt;/span&gt;
    &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt;
    &lt;span class="attr"&gt;xmlns:x&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;
    &lt;span class="attr"&gt;xmlns:d&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/expression/blend/2008"&lt;/span&gt;
    &lt;span class="attr"&gt;xmlns:mc&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.openxmlformats.org/markup-compatibility/2006"&lt;/span&gt;
    &lt;span class="attr"&gt;mc:Ignorable&lt;/span&gt;&lt;span class="kwrd"&gt;="d"&lt;/span&gt;
    &lt;span class="attr"&gt;d:DesignHeight&lt;/span&gt;&lt;span class="kwrd"&gt;="300"&lt;/span&gt; &lt;span class="attr"&gt;d:DesignWidth&lt;/span&gt;&lt;span class="kwrd"&gt;="400"&lt;/span&gt;    &lt;span class="attr"&gt;xmlns:esri&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.esri.com/arcgis/client/2009"&lt;/span&gt;
    &lt;span class="attr"&gt;xmlns:local&lt;/span&gt;&lt;span class="kwrd"&gt;="clr-namespace:congressDistrict.client"&lt;/span&gt;
    &lt;span class="attr"&gt;xmlns:i&lt;/span&gt;&lt;span class="kwrd"&gt;="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"&lt;/span&gt;
    &lt;span class="attr"&gt;xmlns:cmd&lt;/span&gt;&lt;span class="kwrd"&gt;="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.SL4"&lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="LayoutRoot"&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid.Resources&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;esri:SimpleRenderer&lt;/span&gt; &lt;span class="attr"&gt;x:Key&lt;/span&gt;&lt;span class="kwrd"&gt;="RedFillSymbol"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;esri:SimpleRenderer.Symbol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

                        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;esri:SimpleFillSymbol&lt;/span&gt; &lt;span class="attr"&gt;Fill&lt;/span&gt;&lt;span class="kwrd"&gt;="#66FF0000"&lt;/span&gt; &lt;span class="attr"&gt;BorderBrush&lt;/span&gt;&lt;span class="kwrd"&gt;="Red"&lt;/span&gt; &lt;span class="attr"&gt;BorderThickness&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

                        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;esri:SimpleFillSymbol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;esri:SimpleRenderer.Symbol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;esri:SimpleRenderer&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid.Resources&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;esri:Map&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="congressMap"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            


            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;esri:Map.Extent&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;esri:Envelope&lt;/span&gt; &lt;span class="attr"&gt;XMin&lt;/span&gt;&lt;span class="kwrd"&gt;="-150"&lt;/span&gt; &lt;span class="attr"&gt;YMin&lt;/span&gt;&lt;span class="kwrd"&gt;="22"&lt;/span&gt; &lt;span class="attr"&gt;XMax&lt;/span&gt;&lt;span class="kwrd"&gt;="-60"&lt;/span&gt; &lt;span class="attr"&gt;YMax&lt;/span&gt;&lt;span class="kwrd"&gt;="80"&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;esri:Envelope.SpatialReference&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;esri:SpatialReference&lt;/span&gt; &lt;span class="attr"&gt;WKID&lt;/span&gt;&lt;span class="kwrd"&gt;="4269"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;esri:Envelope.SpatialReference&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;esri:Envelope&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;esri:Map.Extent&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;esri:ArcGISDynamicMapServiceLayer&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="BaseLayer"&lt;/span&gt;
                &lt;span class="attr"&gt;Url&lt;/span&gt;&lt;span class="kwrd"&gt;="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;esri:GraphicsLayer&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="CongressDistricts"&lt;/span&gt; &lt;span class="attr"&gt;Renderer&lt;/span&gt;&lt;span class="kwrd"&gt;="{StaticResource RedFillSymbol}"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;esri:Map&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;UserControl&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;Make sure you have all the assemblies that this is using (e.g. the interactivity and mvvmlight ones).  I won't go into too much detail about this because you can find plenty of documentation on the ESRI Silverlight site about this stuff.  Basically I've added a renderer to the grid resources to color our districts as a red color with some transparency.  Then I've added the map setting the EPSG code to be the same as our SQL server data.  The extent is set to match that of the US including Alaska.  I've set the background map as a dynamiclayer so that it will come in and match our projection.  The background is just a free ESRI ArcGIS Server service.  Finally I've set up our base graphics layer that will hold the congress districts.  This is set to use our renderer as the default for all the graphics.&lt;/p&gt;
&lt;p&gt;Be sure to go into the code behind and import our MapViewModel:&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
 &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt;()
        InitializeComponent()
        &lt;span class="kwrd"&gt;If&lt;/span&gt; MainViewModel.IsInDesignModeStatic = &lt;span class="kwrd"&gt;False&lt;/span&gt; &lt;span class="kwrd"&gt;Then&lt;/span&gt;
            CompositionInitializer.SatisfyImports(&lt;span class="kwrd"&gt;Me&lt;/span&gt;)
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;

    &amp;lt;Import(ViewModelTypes.MAP_VIEW_MODEL)&amp;gt; _
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;WriteOnly&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt; ViewModel() &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Object&lt;/span&gt;
        &lt;span class="kwrd"&gt;Set&lt;/span&gt;(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; value &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Object&lt;/span&gt;)
            &lt;span class="kwrd"&gt;Me&lt;/span&gt;.DataContext = value
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Set&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt;
&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;Unfortunately, the ESRI Silverlight API lacks the ability to bind to most of its properties, making following the MVVM pattern more difficult, but still possible.  The workaround is to create attached/dependency properties.  These function as an intermediary between our ViewModel and View.  Add a new class to the ViewModel folder calld MapDependencyObjects.  This class will inherit from DependencyObject&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; ESRI.ArcGIS.Client.Geometry
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; ESRI.ArcGIS.Client

&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; MapDependencyObjects
    &lt;span class="kwrd"&gt;Inherits&lt;/span&gt; DependencyObject

    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;ReadOnly&lt;/span&gt; DistrictLayerProperty &lt;span class="kwrd"&gt;As&lt;/span&gt; DependencyProperty = DependencyProperty.RegisterAttached( _
        &lt;span class="str"&gt;"DistrictLayer"&lt;/span&gt;, &lt;span class="kwrd"&gt;GetType&lt;/span&gt;(GraphicCollection), &lt;span class="kwrd"&gt;GetType&lt;/span&gt;(MapDependencyObjects), &lt;span class="kwrd"&gt;New&lt;/span&gt; PropertyMetadata(&lt;span class="kwrd"&gt;New&lt;/span&gt; PropertyChangedCallback(&lt;span class="kwrd"&gt;AddressOf&lt;/span&gt; OnDistrictLayerChanged)))

    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; GetDistrictLayer(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; dobj &lt;span class="kwrd"&gt;As&lt;/span&gt; DependencyObject) &lt;span class="kwrd"&gt;As&lt;/span&gt; GraphicCollection
        &lt;span class="kwrd"&gt;Return&lt;/span&gt; &lt;span class="kwrd"&gt;CType&lt;/span&gt;(dobj.GetValue(DistrictLayerProperty), GraphicCollection)
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; SetDistrictLayer(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; dobj &lt;span class="kwrd"&gt;As&lt;/span&gt; DependencyObject, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; value &lt;span class="kwrd"&gt;As&lt;/span&gt; GraphicCollection)
        dobj.SetValue(DistrictLayerProperty, value)

    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;


    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; OnDistrictLayerChanged(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; dobj &lt;span class="kwrd"&gt;As&lt;/span&gt; DependencyObject, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; e &lt;span class="kwrd"&gt;As&lt;/span&gt; DependencyPropertyChangedEventArgs)

        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; map &lt;span class="kwrd"&gt;As&lt;/span&gt; ESRI.ArcGIS.Client.Map = &lt;span class="kwrd"&gt;DirectCast&lt;/span&gt;(dobj, ESRI.ArcGIS.Client.Map)

        &lt;span class="kwrd"&gt;For&lt;/span&gt; &lt;span class="kwrd"&gt;Each&lt;/span&gt; l &lt;span class="kwrd"&gt;As&lt;/span&gt; ESRI.ArcGIS.Client.Layer &lt;span class="kwrd"&gt;In&lt;/span&gt; map.Layers
            &lt;span class="kwrd"&gt;If&lt;/span&gt; l.ID = &lt;span class="str"&gt;"CongressDistricts"&lt;/span&gt; &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                &lt;span class="kwrd"&gt;Dim&lt;/span&gt; gl &lt;span class="kwrd"&gt;As&lt;/span&gt; ESRI.ArcGIS.Client.GraphicsLayer = &lt;span class="kwrd"&gt;DirectCast&lt;/span&gt;(l, ESRI.ArcGIS.Client.GraphicsLayer)
                &lt;span class="kwrd"&gt;Dim&lt;/span&gt; gc &lt;span class="kwrd"&gt;As&lt;/span&gt; ESRI.ArcGIS.Client.GraphicCollection = &lt;span class="kwrd"&gt;DirectCast&lt;/span&gt;(e.NewValue, ESRI.ArcGIS.Client.GraphicCollection)

                gl.Graphics = gc

                &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;For&lt;/span&gt;
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
        &lt;span class="kwrd"&gt;Next&lt;/span&gt;

    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;
&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt;
&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;This attached property is used to dynamically set the geometry as a GraphicCollection to our CongressDistricts layer.  When we establish this attached  property we will use the map which is the sender, so we DirectCast it as a Map class, then we have to loop through each of the layers to find the one we are looking for (for some reason you can get the layer by name directly).  Next we sent the new value to the graphics property of our layer.  This will automatically clear what was already their and replace it with the new geometry.  Switching back to our MapView.xaml you can change our Map control to this:&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;esri:Map&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="congressMap"&lt;/span&gt;  &lt;span class="attr"&gt;local:MapDependencyObjects&lt;/span&gt;.&lt;span class="attr"&gt;DistrictLayer&lt;/span&gt;&lt;span class="kwrd"&gt;="{Binding DistrictGeometry}"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;Don't worry if it comes up with an error you might need to build the project before it can find the Dependency property.  Now we need to add a property to our viewModel called DistrictGeometry.  This is the property that will change thereby causing the dependency property's callback function to be invoked.  I really shouldn't be using Dependency Property and Attached Property interchangeably because they aren't quite the same thing, but I'm too lazy to change it now.  Add the property to the MapViewModel&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
    &lt;span class="kwrd"&gt;Private&lt;/span&gt; _DistrictsGeometry &lt;span class="kwrd"&gt;As&lt;/span&gt; GraphicCollection
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt; DistrictGeometry() &lt;span class="kwrd"&gt;As&lt;/span&gt; GraphicCollection
        &lt;span class="kwrd"&gt;Get&lt;/span&gt;
            &lt;span class="kwrd"&gt;Return&lt;/span&gt; _DistrictsGeometry
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Get&lt;/span&gt;
        &lt;span class="kwrd"&gt;Set&lt;/span&gt;(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; value &lt;span class="kwrd"&gt;As&lt;/span&gt; GraphicCollection)
            &lt;span class="kwrd"&gt;If&lt;/span&gt; _DistrictsGeometry IsNot value &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                _DistrictsGeometry = value
                RaisePropertyChanged(&lt;span class="str"&gt;"DistrictGeometry"&lt;/span&gt;)
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;

        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Set&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; Property&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;But this doesn't do anything yet either.  We only want to load geometry if it fits within a certain extent.  We can set up a relaycommand to handle this.  I find this way to be the easiest, but does require the extra dll to be packaged with your app.  This might be a concern if you already have a bloated app.  Keep in mind that you also have to bring over the ESRI and Silverlight Tools dlls as well.  Add this code under our esri:Map tag&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;i:Interaction.Triggers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;i:EventTrigger&lt;/span&gt; &lt;span class="attr"&gt;EventName&lt;/span&gt;&lt;span class="kwrd"&gt;="ExtentChanged"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;cmd:EventToCommand&lt;/span&gt; &lt;span class="attr"&gt;Command&lt;/span&gt;&lt;span class="kwrd"&gt;="{Binding ExtentChangedvm}"&lt;/span&gt; &lt;span class="attr"&gt;PassEventArgsToCommand&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;i:EventTrigger&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;i:Interaction.Triggers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;We are using this trigger to set off our relaycommand whenever the ExtentChanged map event fires.  The MVVMLight EvetToCommand allows us to pass the event arguments to our relaycommand.  Here is where we break our MVVM pattern a little, because the ViewModel is not "supposed" to know about what is going on in the view and by passing the arguments we change this.  For the relay command in our view model: &lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
    &lt;span class="kwrd"&gt;Private&lt;/span&gt; _ExtentChanged &lt;span class="kwrd"&gt;As&lt;/span&gt; RelayCommand(Of ESRI.ArcGIS.Client.ExtentEventArgs)
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;ReadOnly&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt; ExtentChangedvm() &lt;span class="kwrd"&gt;As&lt;/span&gt; RelayCommand(Of ESRI.ArcGIS.Client.ExtentEventArgs)
        &lt;span class="kwrd"&gt;Get&lt;/span&gt;
            &lt;span class="kwrd"&gt;If&lt;/span&gt; _ExtentChanged &lt;span class="kwrd"&gt;Is&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt; &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                _ExtentChanged = &lt;span class="kwrd"&gt;New&lt;/span&gt; RelayCommand(Of ESRI.ArcGIS.Client.ExtentEventArgs)(&lt;span class="kwrd"&gt;AddressOf&lt;/span&gt; GetExtentsChanged)
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
            &lt;span class="kwrd"&gt;Return&lt;/span&gt; _ExtentChanged
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Get&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; Property&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;This should be fairly self-explanatory if you are familiar with relaycommands.  This is how we bind to a command.  Note that it is receiving the ExtentEventArgs.  Now the GetExtentsChanged function:&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; GetExtentsChanged(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; e &lt;span class="kwrd"&gt;As&lt;/span&gt; ESRI.ArcGIS.Client.ExtentEventArgs)
        CurrentExtent = e.NewExtent
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; diff &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Double&lt;/span&gt; = (CurrentExtent.Extent.XMax - CurrentExtent.Extent.XMin)
        &lt;span class="kwrd"&gt;If&lt;/span&gt; diff &amp;lt; 10 &lt;span class="kwrd"&gt;And&lt;/span&gt; diff &amp;gt; 0 &lt;span class="kwrd"&gt;Then&lt;/span&gt;

            GetDistrictsByExtent()
        &lt;span class="kwrd"&gt;Else&lt;/span&gt;
            DistrictGeometry = &lt;span class="kwrd"&gt;Nothing&lt;/span&gt;
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;

    &lt;span class="kwrd"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;
    &lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;

    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; GetDistrictsByExtent()
        &lt;span class="kwrd"&gt;If&lt;/span&gt; _currentExtent IsNot &lt;span class="kwrd"&gt;Nothing&lt;/span&gt; &lt;span class="kwrd"&gt;Then&lt;/span&gt;
            _model.GetGeometryByExtent(&lt;span class="kwrd"&gt;Me&lt;/span&gt;.CurrentExtent)
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;I've set this so it only changes if we are zoomed in to about 10 degrees of latitude.  This way we don't load all of our geometry at once.  Unfortunately we cannot bind to the resolution property at version 2.1 which would provide a better method of checking how far we are zoomed in.  I think setting something up with different detail levels of geometry would be the best route to take with an actual project.  Once this determines the extent of our view and if it is the range (if not it clears the graphics) it then calls a second method which handles the _model's call to GetGeometryByExtent.  The last part of this is to handle the returned geometry.&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; HandleDistrictGeometry(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; sender &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Object&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; e &lt;span class="kwrd"&gt;As&lt;/span&gt; EntityResultsArgs(Of congressDistrictService.DistrictGeom))

        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; gc &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; GraphicCollection
        &lt;span class="kwrd"&gt;For&lt;/span&gt; i &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt; = 0 &lt;span class="kwrd"&gt;To&lt;/span&gt; e.Results.Count - 1
            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; c &lt;span class="kwrd"&gt;As&lt;/span&gt; congressDistrictService.DistrictGeom = e.Results(i)
            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; g &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; Graphic

            g.Geometry = c.EsriGeometry
            g.Attributes.Add(&lt;span class="str"&gt;"districtID"&lt;/span&gt;, c.DistrictID)

            &lt;span class="kwrd"&gt;Try&lt;/span&gt;
                gc.Add(g)
            &lt;span class="kwrd"&gt;Catch&lt;/span&gt; ex &lt;span class="kwrd"&gt;As&lt;/span&gt; Exception
                MessageBox.Show(ex.ToString)
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Try&lt;/span&gt;

        &lt;span class="kwrd"&gt;Next&lt;/span&gt;


        DistrictGeometry = gc
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;
&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;This function adds our returned enumerable of ESRIGeometry to a GraphicCollection then sets it as the DistrictGeometry.  When DistrictGeoemtry is updated, the notifypropertychanged is sent and then our dependency property callback does it's magic.  So how we envision this working is - zoom in fires extent changed, check to make sure the extent is less than 10 degrees of longitude, call the service, the service returns (cross your fingers), we convert our geometry to the graphic collection, and the dependency property sets DistrictGeometry as the GraphicCollection of the CongressDistricts layer.&lt;/p&gt;
&lt;p&gt;The last part is to add our map view to Main.xaml.  I've reformatted it some so that it is more map centric:&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;UserControl&lt;/span&gt; &lt;span class="attr"&gt;x:Class&lt;/span&gt;&lt;span class="kwrd"&gt;="congressDistrict.client.MainPage"&lt;/span&gt;
    &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt;
    &lt;span class="attr"&gt;xmlns:x&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;
    &lt;span class="attr"&gt;xmlns:d&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/expression/blend/2008"&lt;/span&gt;
    &lt;span class="attr"&gt;xmlns:mc&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.openxmlformats.org/markup-compatibility/2006"&lt;/span&gt;
    &lt;span class="attr"&gt;xmlns:tk&lt;/span&gt;&lt;span class="kwrd"&gt;="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit"&lt;/span&gt;         
    &lt;span class="attr"&gt;xmlns:views&lt;/span&gt;&lt;span class="kwrd"&gt;="clr-namespace:congressDistrict.client"&lt;/span&gt; 
    &lt;span class="attr"&gt;mc:Ignorable&lt;/span&gt;&lt;span class="kwrd"&gt;="d"&lt;/span&gt;
    &lt;span class="attr"&gt;d:DesignHeight&lt;/span&gt;&lt;span class="kwrd"&gt;="600"&lt;/span&gt; &lt;span class="attr"&gt;d:DesignWidth&lt;/span&gt;&lt;span class="kwrd"&gt;="400"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="LayoutRoot"&lt;/span&gt; &lt;span class="attr"&gt;Background&lt;/span&gt;&lt;span class="kwrd"&gt;="White"&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="600"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tk:DockPanel&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="8"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;views:MapView&lt;/span&gt; &lt;span class="attr"&gt;tk:DockPanel&lt;/span&gt;.&lt;span class="attr"&gt;Dock&lt;/span&gt;&lt;span class="kwrd"&gt;="Top"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="500"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;views:CongressListView&lt;/span&gt; &lt;span class="attr"&gt;tk:DockPanel&lt;/span&gt;.&lt;span class="attr"&gt;Dock&lt;/span&gt;&lt;span class="kwrd"&gt;="Bottom"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="100"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tk:DockPanel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;UserControl&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;The final step to implement is we want the user to be able to click on our list and the map zoom in to that area.  This requires finding the geometry associated with a district ID and then zooming in on that area.  We need a way to communicate the current selection between our mapviewmodel and listviewmodel.  MVVMLight has an excellent messaging system built-in that let's us do the same exactly this.  Let's set up a simple class that will be used to classify our messages.  In the common called MessageTypes and add the following:&lt;/p&gt;
&lt;code&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
 &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Const&lt;/span&gt; CHANGE_DISTRICT &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = &lt;span class="str"&gt;"ChangeDistrict"&lt;/span&gt;&lt;/pre&gt;&lt;/code&gt;
 &lt;p&gt;Next go to the CongressListViewModel and add a new property called CurrentDistrict&lt;/p&gt;
 &lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
    &lt;span class="kwrd"&gt;Private&lt;/span&gt; _currentDistrict &lt;span class="kwrd"&gt;As&lt;/span&gt; congressDistrictService.cgd111p020
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt; CurrentDistrict() &lt;span class="kwrd"&gt;As&lt;/span&gt; congressDistrictService.cgd111p020
        &lt;span class="kwrd"&gt;Get&lt;/span&gt;
            &lt;span class="kwrd"&gt;Return&lt;/span&gt; _currentDistrict
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Get&lt;/span&gt;
        &lt;span class="kwrd"&gt;Set&lt;/span&gt;(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; value &lt;span class="kwrd"&gt;As&lt;/span&gt; congressDistrictService.cgd111p020)

            &lt;span class="kwrd"&gt;If&lt;/span&gt; _currentDistrict IsNot value &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                _currentDistrict = value
                RaisePropertyChanged(&lt;span class="str"&gt;"CurrentDistrict"&lt;/span&gt;)
                Messenger.&lt;span class="kwrd"&gt;Default&lt;/span&gt;.Send(Of congressDistrictService.cgd111p020)(CurrentDistrict, MessageTypes.CHANGE_DISTRICT)

            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Set&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; Property&lt;/pre&gt; 
 &lt;/code&gt;
 &lt;p&gt;Under the setter I've made sure to add the RaisePropertyChanged event and then used MVVMLight's Messenger class to send a default message of cgd111p020 type.  The CurrentDistrict is set as the value, and the Message Token is set to CHANGE_DISTRICT.  Next open the CongressListView.xaml and add this to our ListBox control:&lt;/p&gt;
 &lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
SelectedItem="{Binding CurrentDistrict, Mode=TwoWay}"&lt;/pre&gt; 
 &lt;/code&gt;
&lt;p&gt;I think this line of code shows the advantages of setting up an MVVM silverlight application.  Now for everytime the user selects an item in our list it is bound to our CurrentDistrict property allowing us to do whatever we need to with it without having to do any code behind.&lt;/p&gt;
&lt;p&gt;Before we do anythin with the MapViewModel we should set up our service to return an area based on the district ID.  Again we want to limit this to only the largest polygon for that district.  So we'll start by creating another stored procedure.  See above if you need help with this.  Here is the sql:&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;USE&lt;/span&gt; [congressdistricts]
&lt;span class="kwrd"&gt;GO&lt;/span&gt;
/****** &lt;span class="kwrd"&gt;Object&lt;/span&gt;:  StoredProcedure [dbo].[MaxAreaById]    Script &lt;span class="kwrd"&gt;Date&lt;/span&gt;: 03/22/2011 12:52:24 ******/
&lt;span class="kwrd"&gt;SET&lt;/span&gt; ANSI_NULLS &lt;span class="kwrd"&gt;ON&lt;/span&gt;
&lt;span class="kwrd"&gt;GO&lt;/span&gt;
&lt;span class="kwrd"&gt;SET&lt;/span&gt; QUOTED_IDENTIFIER &lt;span class="kwrd"&gt;ON&lt;/span&gt;
&lt;span class="kwrd"&gt;GO&lt;/span&gt;
&lt;span class="rem"&gt;-- =============================================&lt;/span&gt;
&lt;span class="rem"&gt;-- Author:        &amp;lt;Author,,Name&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;-- Create date: &amp;lt;Create Date,,&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;-- Description:    &amp;lt;Description,,&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;-- =============================================&lt;/span&gt;
&lt;span class="kwrd"&gt;ALTER&lt;/span&gt; &lt;span class="kwrd"&gt;PROCEDURE&lt;/span&gt; [dbo].[MaxAreaById]
    &lt;span class="rem"&gt;-- Add the parameters for the stored procedure here&lt;/span&gt;
    @id bigint
&lt;span class="kwrd"&gt;AS&lt;/span&gt;
&lt;span class="kwrd"&gt;BEGIN&lt;/span&gt;
    &lt;span class="rem"&gt;-- SET NOCOUNT ON added to prevent extra result sets from&lt;/span&gt;
    &lt;span class="rem"&gt;-- interfering with SELECT statements.&lt;/span&gt;
    &lt;span class="kwrd"&gt;SET&lt;/span&gt; NOCOUNT &lt;span class="kwrd"&gt;ON&lt;/span&gt;;

    &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; pk_id, ID, CONG_DIST, NAME, PARTY_AFF, URL, &lt;span class="kwrd"&gt;STATE&lt;/span&gt;, STATE_FIPS, SENATOR_1, SENATOR_2, SEN_1_URL, SEN_2_URL, &lt;span class="kwrd"&gt;CAST&lt;/span&gt;(geom.Reduce(1000) &lt;span class="kwrd"&gt;AS&lt;/span&gt; VARBINARY(&lt;span class="kwrd"&gt;MAX&lt;/span&gt;)) &lt;span class="kwrd"&gt;AS&lt;/span&gt; geom, api_id &lt;span class="kwrd"&gt;FROM&lt;/span&gt; cgd111p020
    &lt;span class="kwrd"&gt;WHERE&lt;/span&gt; [id]=@id &lt;span class="kwrd"&gt;AND&lt;/span&gt; geom.STArea() = (&lt;span class="kwrd"&gt;select&lt;/span&gt; &lt;span class="kwrd"&gt;MAX&lt;/span&gt;(geom.STArea()) &lt;span class="kwrd"&gt;as&lt;/span&gt; maxarea &lt;span class="kwrd"&gt;FROM&lt;/span&gt; [congressdistricts].[dbo].[cgd111p020] &lt;span class="kwrd"&gt;where&lt;/span&gt; [id]=@id)
&lt;span class="kwrd"&gt;END&lt;/span&gt;
&lt;/pre&gt;
&lt;/code&gt; 
&lt;p&gt;Assuming that you've updated and added this as a function, we'll move on to the services code.  For the interface:&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
    &amp;lt;OperationContract()&amp;gt;
    &lt;span class="kwrd"&gt;Function&lt;/span&gt; GetDistrictByID(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; id &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Long&lt;/span&gt;) &lt;span class="kwrd"&gt;As&lt;/span&gt; IEnumerable(Of DistrictGeom)&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;And the actual function:&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; GetDistrictByID(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; id &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Long&lt;/span&gt;) &lt;span class="kwrd"&gt;As&lt;/span&gt; IEnumerable(Of DistrictGeom) &lt;span class="kwrd"&gt;Implements&lt;/span&gt; IcdService.GetDistrictByID

        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; views &lt;span class="kwrd"&gt;As&lt;/span&gt; List(Of view_CongressDistrict) = _cdDB.MaxAreaById(id).ToList

        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; districts &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; ObservableCollection(Of DistrictGeom)
        &lt;span class="kwrd"&gt;For&lt;/span&gt; &lt;span class="kwrd"&gt;Each&lt;/span&gt; v &lt;span class="kwrd"&gt;As&lt;/span&gt; view_CongressDistrict &lt;span class="kwrd"&gt;In&lt;/span&gt; views
            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; g &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; DistrictGeom &lt;span class="kwrd"&gt;With&lt;/span&gt; {.APIId = v.api_id, .DistrictID = v.CONG_DIST, .EsriGeometry = geomHelper.BinaryToESRIGeom(v.geom)}
            districts.Add(g)
        &lt;span class="kwrd"&gt;Next&lt;/span&gt;
        &lt;span class="kwrd"&gt;Return&lt;/span&gt; districts.AsEnumerable

    &lt;span class="kwrd"&gt;End&lt;/span&gt; Function&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;Rebuild and then update the Silverlight project's services.  Now we'll just do the same thing we did above with our Congress service interface and model:&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
    &lt;span class="kwrd"&gt;Sub&lt;/span&gt; GetGeometryByID(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; id &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;)
    &lt;span class="kwrd"&gt;Event&lt;/span&gt; GetGeometryByIDComplete &lt;span class="kwrd"&gt;As&lt;/span&gt; EventHandler(Of EntityResultsArgs(Of DistrictGeom))&lt;/pre&gt;
&lt;/code&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; GetGeometryByID(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; id &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;) &lt;span class="kwrd"&gt;Implements&lt;/span&gt; ICongressDistrictService.GetGeometryByID
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; client &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; congressDistrictService.IcdServiceClient
        &lt;span class="kwrd"&gt;AddHandler&lt;/span&gt; client.GetDistrictByIDCompleted, &lt;span class="kwrd"&gt;AddressOf&lt;/span&gt; HandleGetGeometryID
        client.GetDistrictByIDAsync(id)

    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;

    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; HandleGetGeometryID(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; sender &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Object&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; e &lt;span class="kwrd"&gt;As&lt;/span&gt; congressDistrictService.GetDistrictByIDCompletedEventArgs)

        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; x &lt;span class="kwrd"&gt;As&lt;/span&gt; IEnumerable(Of congressDistrictService.DistrictGeom) = &lt;span class="kwrd"&gt;DirectCast&lt;/span&gt;(e.Result, IEnumerable(Of congressDistrictService.DistrictGeom))
        &lt;span class="kwrd"&gt;RaiseEvent&lt;/span&gt; GetGeometryByIDComplete(&lt;span class="kwrd"&gt;Me&lt;/span&gt;, &lt;span class="kwrd"&gt;New&lt;/span&gt; EntityResultsArgs(Of congressDistrictService.DistrictGeom)(x))
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Event&lt;/span&gt; GetGeometryByIDComplete(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; sender &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Object&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; e &lt;span class="kwrd"&gt;As&lt;/span&gt; EntityResultsArgs(Of congressDistrictService.DistrictGeom)) &lt;span class="kwrd"&gt;Implements&lt;/span&gt; ICongressDistrictService.GetGeometryByIDComplete
&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;Now we can get back to our MapViewModel.  We need to register an action to handle the MVVMLight message that gets sent when a congress district is selected.  In the constructor of our MapViewModel add:&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
        &lt;span class="kwrd"&gt;AddHandler&lt;/span&gt; _model.GetGeometryByIDComplete, &lt;span class="kwrd"&gt;AddressOf&lt;/span&gt; HandleDistrictGeometryID
        Messenger.&lt;span class="kwrd"&gt;Default&lt;/span&gt;.Register(Of congressDistrictService.cgd111p020)(&lt;span class="kwrd"&gt;Me&lt;/span&gt;, MessageTypes.CHANGE_DISTRICT, &lt;span class="kwrd"&gt;AddressOf&lt;/span&gt; ChangeExtent)
&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;And here is the code for these new functions.  They basically just handle the interaction with the model and service.&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;

    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; HandleDistrictGeometryID(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; sender &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Object&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; e &lt;span class="kwrd"&gt;As&lt;/span&gt; EntityResultsArgs(Of congressDistrictService.DistrictGeom))
        &lt;span class="kwrd"&gt;If&lt;/span&gt; e.Results.Count &amp;lt; 2 &lt;span class="kwrd"&gt;And&lt;/span&gt; e.Results.Count &amp;gt; 0 &lt;span class="kwrd"&gt;Then&lt;/span&gt;
            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; c &lt;span class="kwrd"&gt;As&lt;/span&gt; congressDistrictService.DistrictGeom = e.Results(0)
            bindableLayerExtent = c.EsriGeometry
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;
&lt;/pre&gt;
&lt;/code&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; ChangeExtent(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; district &lt;span class="kwrd"&gt;As&lt;/span&gt; congressDistrictService.cgd111p020)
        _model.GetGeometryByID(district.ID)
    &lt;span class="kwrd"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;
&lt;/code&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
    &lt;span class="kwrd"&gt;Private&lt;/span&gt; _bindableLayerExtent &lt;span class="kwrd"&gt;As&lt;/span&gt; Geometry
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt; bindableLayerExtent() &lt;span class="kwrd"&gt;As&lt;/span&gt; Geometry
        &lt;span class="kwrd"&gt;Get&lt;/span&gt;
            &lt;span class="kwrd"&gt;Return&lt;/span&gt; _bindableLayerExtent
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Get&lt;/span&gt;
        &lt;span class="kwrd"&gt;Set&lt;/span&gt;(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; value &lt;span class="kwrd"&gt;As&lt;/span&gt; Geometry)
            &lt;span class="kwrd"&gt;If&lt;/span&gt; _bindableLayerExtent IsNot value &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                _bindableLayerExtent = value
                RaisePropertyChanged(&lt;span class="str"&gt;"bindableLayerExtent"&lt;/span&gt;)
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;

        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Set&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; Property&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;The final step is to create another dependency property handle the change in extent.  Open the MapDependencyObjects class and add the code:&lt;/p&gt;
 &lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
 &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;ReadOnly&lt;/span&gt; BindableMapExentProperty &lt;span class="kwrd"&gt;As&lt;/span&gt; DependencyProperty = DependencyProperty.RegisterAttached( _
        &lt;span class="str"&gt;"BindableMapExent"&lt;/span&gt;, &lt;span class="kwrd"&gt;GetType&lt;/span&gt;(Geometry), &lt;span class="kwrd"&gt;GetType&lt;/span&gt;(MapDependencyObjects), &lt;span class="kwrd"&gt;New&lt;/span&gt; PropertyMetadata(&lt;span class="kwrd"&gt;New&lt;/span&gt; PropertyChangedCallback(&lt;span class="kwrd"&gt;AddressOf&lt;/span&gt; OnBindableMapExentChanged)))

    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; GetBindableMapExent(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; dobj &lt;span class="kwrd"&gt;As&lt;/span&gt; DependencyObject) &lt;span class="kwrd"&gt;As&lt;/span&gt; Geometry
        &lt;span class="kwrd"&gt;Return&lt;/span&gt; &lt;span class="kwrd"&gt;CType&lt;/span&gt;(dobj.GetValue(BindableMapExentProperty), Geometry)

    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; SetBindableMapExent(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; dobj &lt;span class="kwrd"&gt;As&lt;/span&gt; DependencyObject, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; value &lt;span class="kwrd"&gt;As&lt;/span&gt; Geometry)
        dobj.SetValue(BindableMapExentProperty, value)

    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;
    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; OnBindableMapExentChanged(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; dobj &lt;span class="kwrd"&gt;As&lt;/span&gt; DependencyObject, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; e &lt;span class="kwrd"&gt;As&lt;/span&gt; DependencyPropertyChangedEventArgs)




        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; map &lt;span class="kwrd"&gt;As&lt;/span&gt; ESRI.ArcGIS.Client.Map = &lt;span class="kwrd"&gt;DirectCast&lt;/span&gt;(dobj, ESRI.ArcGIS.Client.Map)
        &lt;span class="kwrd"&gt;If&lt;/span&gt; &lt;span class="kwrd"&gt;Not&lt;/span&gt; e.NewValue &lt;span class="kwrd"&gt;Is&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt; &lt;span class="kwrd"&gt;Then&lt;/span&gt;
            map.ZoomTo(e.NewValue)

        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;

    &lt;span class="kwrd"&gt;End&lt;/span&gt; Sub&lt;/pre&gt; 
 &lt;/code&gt;
 &lt;p&gt;This follows a similar structure as the other dependency property except it uses Geometry and the callback uses the map to zoom to the geometry.  In the MapView.xaml user control add the binding to the map control:&lt;/p&gt;
 &lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
 local:MapDependencyObjects.BindableMapExent="{Binding bindableLayerExtent}"&lt;/pre&gt;
 &lt;/code&gt;
 &lt;p&gt;Now when you run this I recommend not clicking on Alaska's district as it has some problems.  But you should see something similar to this:&lt;/p&gt;
 &lt;p&gt;&lt;a href=http://www.boxshapedworld.com/Blog/GetFile/esrimvvm_3_4.png&gt;&lt;img src= http://www.boxshapedworld.com/Blog/GetFile/esrimvvm_3_4.png width=200 height=200/&gt;&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;&lt;a href=http://www.boxshapedworld.com/Blog/GetFile/esrimvvm_3_5.png&gt;&lt;img src= http://www.boxshapedworld.com/Blog/GetFile/esrimvvm_3_5.png width=200 height=200/&gt;&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;It is clear from running it that the reduce on the fly really slows down the queries to the database, but my intention was mostly to show how to use an MVVM pattern with the Silverlight API.  I've said throughout this post that you will need to figure out your own data and ways of speeding that up.  On the other hand, I don't consider myself an MVVM expert so any comments or criticisms are of course welcome (if they are constructive) and if it improves the functionality even better.&lt;/p&gt;
 &lt;p&gt;Now the moment you've all been waiting for here is the solution to these tutorials:&lt;/p&gt;
  &lt;p&gt;&lt;a href=http://www.boxshapedworld.com/Blog/GetFile/congressDistrict.zip&gt;congressDistrict.zip (6mb)&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.boxshapedworld.com/Blog/post/117"&gt;ESRI Silverlight API with the MVVM Pattern Part 1&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.boxshapedworld.com/Blog/post/118"&gt;ESRI Silverlight API and MVVM Part II&lt;/a&gt;&lt;/p&gt;</description><pubDate>Tue, 22 Mar 2011 00:00:00 -0700</pubDate><a10:updated>2011-03-22T00:00:00-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/118"><guid isPermaLink="false">118</guid><title>ESRI Silverlight API and MVVM Part II</title><description>&lt;p&gt;In the &lt;a href=http://www.boxshapedworld.com/Blog/post/117&gt;previous lesson&lt;/a&gt; we started our project by getting our spatial database up and running, and connecting to it in our server side project using ADO.NET Entity Data Model.  We also added a simple OperationContract that will get all the unique names from the Name column.  To make things more interesting I?ve changed the database so that each NAME is no associated with the member ID for use with the NYTimes Congress API.  To use this feature you should apply for an &lt;a href=http://developer.nytimes.com/page&gt; api key&lt;/a&gt;, which is free.  This was a good lesson in how crappy nationalatlas.gov data can be.  The dataset was rife with misspellings.  C?mon this is data about the government by the government and you can?t even spell Michele Bachmann with two n?s?although that example might have been done on purpose.  I?m annoyed and disappointed by this, but the point of this entry isn?t meant to be a critique their data and the final app isn?t meant to be a public mashup just a more realistic example.  But I also learned that even though the NYTimes API is supposed to give all the members for the 111th congress, that isn?t necessarily true.  While the NationalAtlas dataset included Bobby Jindal, the NY times data did not.  Anywhoo, this isn?t really important, you can download the dataset &lt;a href=http://www.boxshapedworld.com/Blog/GetFile/ congressDistricts.zip&gt;here&lt;/a&gt; .  You?ll know if you have the most recent data because there is an api_id field in the only table in the database.  After you replace the database, be sure to open up your project and update the Entities edmx file, then rebuild the project to update it.&lt;/p&gt;
&lt;p&gt;Okay, presuming that you had the right database already loaded, then open up your project.  Go to File New Project, and under Silverlight pick the Silverlight Application option.  Select Add to Solution in the Solution dropdown, and name the application congressDistrict.client.  Let?s enable the WCF RIA services in case we decide to use those, and add the page to our project.  You should end up with something like this:&lt;/p&gt;
&lt;p&gt;&lt;a href=http://www.boxshapedworld.com/Blog/GetFile/esrimvvm_2_1.png&gt;&lt;img src= http://www.boxshapedworld.com/Blog/GetFile/esrimvvm_2_1.png width=200 height=200/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Before we go to far, make sure you?ve got the Silverlight 4 binaries for &lt;a href= http://mvvmlight.codeplex.com/ &gt;MVVM Light&lt;/a&gt;, the &lt;a href= http://help.arcgis.com/en/webapi/silverlight/index.html &gt;ESRI Silverlight API&lt;/a&gt; and &lt;a href= http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b3deb194-ca86-4fb6-a716-b67c2604a139&amp;displaylang=en&gt;Silverlight Tools&lt;/a&gt; downloaded and installed.&lt;/p&gt;
&lt;p&gt;Now, in visual studio go to your Silverlight client application and add references to the MVVMLight assemblies, the ESRI.ArcGIS.Client, System.ComponentModel.Composition, System.ComponentModel.Composition.Initialization, System.Windows.Controls, System.Windows.Controls.Layout.Toolkit, and System.Windows.Controls.Toolkit.  We might need some more later, but for now this will do.  Let?s create some new folders called:  Common, Model, Views, and ViewModel.  You could separate some of this out into different projects, but since this is just a small application, I?m not going to bother.  I guess you can include this in the many examples that don?t do this, but say you should.&lt;/p&gt;
&lt;p&gt;One of the basic premises of the MVVM pattern is that we want to ?separate our concerns.?  So we want to keep our views, viewmodels, and models separate.  Let?s start by connecting our server and client.  Right-click on the client project and select Add Service Reference.  In the URL add the http://localhost:portnumber.  Port number will be different for you, mine was http://localhost:50357 for example.  Click on Discover and it should find our Services/cdService.svc.  Let?s name this congressDistrictService and click OK.  If it comes up with an error it might be because you missed the step of adding the ASP Compatibility requirements, or haven?t built your server project.  Once it is done downloading the information, rebuild your entire solution to get everything talking right.  A note on using localhost as your service reference:  this can be a pain to use because port numbers change and errors happen.  If you have the luxury of using your own server for the service, then you can do that instead.  One trick I've found, especially when you get a crossdomain error is to right click on your service and view in browser while debugging the Silverlight application.&lt;/p&gt;
&lt;p&gt;Now let's get some of our foundation classes set up.  First, let?s create a way to communicate the results of a query with our viewmodels and we'll be using events to do this, so we need a custom eventargs class.  Add a new class to the common folder called EntityResultsArgs.vb.  Add an imports to System.ServiceModel.DomainServices.Client.  This class will inherit from the EventArgs class and have an overloaded constructor that allows us to pass an exception or class.  Here is the basic code:&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; System.ServiceModel.DomainServices.Client
&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; EntityResultsArgs(Of T &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt;)
    &lt;span class="kwrd"&gt;Inherits&lt;/span&gt; EventArgs&amp;lt;br /&amp;gt;
    
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt;(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; ex &lt;span class="kwrd"&gt;As&lt;/span&gt; Exception)
        Err = ex&amp;lt;br /&amp;gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;&amp;lt;br /&amp;gt;

    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt;(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; results &lt;span class="kwrd"&gt;As&lt;/span&gt; IEnumerable(Of T))
        Err = &lt;span class="kwrd"&gt;Nothing&lt;/span&gt;
        &lt;span class="kwrd"&gt;Me&lt;/span&gt;.Results = results)
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;


    &lt;span class="kwrd"&gt;Private&lt;/span&gt; _results &lt;span class="kwrd"&gt;As&lt;/span&gt; IEnumerable(Of T)
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt; Results() &lt;span class="kwrd"&gt;As&lt;/span&gt; IEnumerable(Of T)
        &lt;span class="kwrd"&gt;Get&lt;/span&gt;
            &lt;span class="kwrd"&gt;Return&lt;/span&gt; _results
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Get&lt;/span&gt;
        &lt;span class="kwrd"&gt;Set&lt;/span&gt;(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; value &lt;span class="kwrd"&gt;As&lt;/span&gt; IEnumerable(Of T))
            _results = value
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Set&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt;

    &lt;span class="kwrd"&gt;Private&lt;/span&gt; _error &lt;span class="kwrd"&gt;As&lt;/span&gt; Exception
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt; Err() &lt;span class="kwrd"&gt;As&lt;/span&gt; Exception
        &lt;span class="kwrd"&gt;Get&lt;/span&gt;
            &lt;span class="kwrd"&gt;Return&lt;/span&gt; _error
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Get&lt;/span&gt;
        &lt;span class="kwrd"&gt;Set&lt;/span&gt;(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; value &lt;span class="kwrd"&gt;As&lt;/span&gt; Exception)
            _error = value
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Set&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt;

&lt;span class="kwrd"&gt;End&lt;/span&gt; Class&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;Next, add a new class to the common folder called ICongressDistrictService.vb.  You need to change this to an interface.  We're using an Interface here because I want to use Microsoft Extensibility Framework MEF to bring in my classes automatically.&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Interface&lt;/span&gt; ICongressDistrictService
    &lt;span class="kwrd"&gt;Sub&lt;/span&gt; GetUniqueCongressNames()
    &lt;span class="kwrd"&gt;Event&lt;/span&gt; GetUniqueCongressNamesComplete &lt;span class="kwrd"&gt;As&lt;/span&gt; EventHandler(Of EntityResultsArgs(Of cgd111p020))


&lt;span class="kwrd"&gt;End&lt;/span&gt; Interface&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;Next create a class in the model folder called CongressDistrictsModel.vb.  This is the class that will handle all the actual communication with the model.  This way our viewmodels really don't have to know whether we talk to the server via WCF or RIA Services or later when we talk to the NYTimes API.  Note the &lt;Export&gt; attribute at the top of the class, signaling that this class should be exported as a type of ICongressDistrictService.  If you've used WCF services then the rest is pretty self-explanatory.  The class uses an Asynchronous call to the service and raises our custom event to flag when it is ready.&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; System.Collections.ObjectModel
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; System.ComponentModel.Composition

&amp;lt;Export(&lt;span class="kwrd"&gt;GetType&lt;/span&gt;(ICongressDistrictService))&amp;gt; _
&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; CongressDistrictsModel
    &lt;span class="kwrd"&gt;Implements&lt;/span&gt; ICongressDistrictService

    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; GetUniqueCongressNames() &lt;span class="kwrd"&gt;Implements&lt;/span&gt; ICongressDistrictService.GetUniqueCongressNames

        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; client &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; congressDistrictService.IcdServiceClient
        &lt;span class="kwrd"&gt;AddHandler&lt;/span&gt; client.GetNamesCompleted, &lt;span class="kwrd"&gt;AddressOf&lt;/span&gt; HandleGetDistricts
        client.GetNamesAsync()
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;
    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; HandleGetDistricts(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; sender &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Object&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; e &lt;span class="kwrd"&gt;As&lt;/span&gt; congressDistrictService.GetNamesCompletedEventArgs)

        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; x &lt;span class="kwrd"&gt;As&lt;/span&gt; IEnumerable(Of congressDistrictService.cgd111p020) = &lt;span class="kwrd"&gt;DirectCast&lt;/span&gt;(e.Result, IEnumerable(Of congressDistrictService.cgd111p020))
        &lt;span class="kwrd"&gt;RaiseEvent&lt;/span&gt; GetUniqueCongressNamesComplete(&lt;span class="kwrd"&gt;Me&lt;/span&gt;, &lt;span class="kwrd"&gt;New&lt;/span&gt; EntityResultsArgs(Of congressDistrictService.cgd111p020)(x))


    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;

    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Event&lt;/span&gt; GetUniqueCongressNamesComplete(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; sender &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Object&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; e &lt;span class="kwrd"&gt;As&lt;/span&gt; EntityResultsArgs(Of congressDistrictService.cgd111p020)) &lt;span class="kwrd"&gt;Implements&lt;/span&gt; ICongressDistrictService.GetUniqueCongressNamesComplete
&lt;span class="kwrd"&gt;End&lt;/span&gt; Class&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;Next up I want to create our viewmodel base.  This is simply the viewmodel that all the other viewmodels will inherit from.  It actually inherhits from MVVMLight's view model base, but I want to be able to create properties that all the other viewmodels may use.  In your viewmodel folder create a new class called MainViewModel.vb.&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; GalaSoft.MvvmLight
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; GalaSoft.MvvmLight.Messaging

&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; MainViewModel
    &lt;span class="kwrd"&gt;Inherits&lt;/span&gt; ViewModelBase

    &lt;span class="kwrd"&gt;Private&lt;/span&gt; _error &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt; ErrorMessage() &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;
        &lt;span class="kwrd"&gt;Get&lt;/span&gt;
            &lt;span class="kwrd"&gt;Return&lt;/span&gt; _error
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Get&lt;/span&gt;
        &lt;span class="kwrd"&gt;Set&lt;/span&gt;(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; value &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;)
            &lt;span class="kwrd"&gt;If&lt;/span&gt; value &amp;lt;&amp;gt; _error &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                _error = value
                RaisePropertyChanged(&lt;span class="str"&gt;"ErrorMessage"&lt;/span&gt;)
                &lt;span class="rem"&gt;'Messenger.Default.Send(MessageTypes.STATUS_MESSAGE, _error)&lt;/span&gt;

            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
            _error = value
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Set&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt;
&lt;span class="kwrd"&gt;End&lt;/span&gt; Class&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;Now we can create our congress district viewmodel.  For this first model we won't be communicating with the map just yet, but creating a list of all the congress members, district and their state.  Before we do that, because I wnat to flag this as a view model type with the export attribute I'm going to create a separate shared class that keeps the names of my views rather than use a string and risk mistyping it somewhere.  Create a new class in the common folder called ViewModelTypes.vb&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; ViewModelTypes
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Const&lt;/span&gt; CONGRESS_LIST_VIEW_MODEL = &lt;span class="str"&gt;"CongressListViewModel"&lt;/span&gt;
&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt;
&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;Now we can create our CongressListViewModel.vb class in the viewmodel folder.  This is a fairly simple class that contains one property that holds our IEnumerable(of cgd111p020) and calls our model to load the data.&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; System.ComponentModel.Composition

&amp;lt;PartCreationPolicy(CreationPolicy.NonShared)&amp;gt; _
&amp;lt;Export(ViewModelTypes.CONGRESS_LIST_VIEW_MODEL)&amp;gt; _
&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; CongressListViewModel
    &lt;span class="kwrd"&gt;Inherits&lt;/span&gt; MainViewModel

    &lt;span class="kwrd"&gt;Private&lt;/span&gt; _model &lt;span class="kwrd"&gt;As&lt;/span&gt; ICongressDistrictService

    &amp;lt;ImportingConstructor()&amp;gt; _
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt;(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; theModel &lt;span class="kwrd"&gt;As&lt;/span&gt; ICongressDistrictService)
        _model = theModel
        &lt;span class="kwrd"&gt;AddHandler&lt;/span&gt; _model.GetUniqueCongressNamesComplete, &lt;span class="kwrd"&gt;AddressOf&lt;/span&gt; _model_GetUniqueNamesComplete
        _model.GetUniqueCongressNames()
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;

    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; _model_GetUniqueNamesComplete(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; sender &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Object&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; e &lt;span class="kwrd"&gt;As&lt;/span&gt; EntityResultsArgs(Of congressDistrictService.cgd111p020))
        Congress = e.Results
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;


    &lt;span class="kwrd"&gt;Private&lt;/span&gt; _congress &lt;span class="kwrd"&gt;As&lt;/span&gt; IEnumerable(Of congressDistrictService.cgd111p020)
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt; Congress() &lt;span class="kwrd"&gt;As&lt;/span&gt; IEnumerable(Of congressDistrictService.cgd111p020)
        &lt;span class="kwrd"&gt;Get&lt;/span&gt;
            &lt;span class="kwrd"&gt;Return&lt;/span&gt; _congress
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Get&lt;/span&gt;
        &lt;span class="kwrd"&gt;Set&lt;/span&gt;(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; value &lt;span class="kwrd"&gt;As&lt;/span&gt; IEnumerable(Of congressDistrictService.cgd111p020))

            &lt;span class="kwrd"&gt;If&lt;/span&gt; value IsNot _congress &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                _congress = value
                RaisePropertyChanged(&lt;span class="str"&gt;"Congress"&lt;/span&gt;)

            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Set&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt;

&lt;span class="kwrd"&gt;End&lt;/span&gt; Class&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;We start by flagging our viewmodel for export.  We set the creation policy to nonshared since it will just be used by our list view.  Then we use an importing constructor attribute to find our ICongressDistrictService class that we exported earlier and assign to our private variable _model.  When this class gets instantiated we automatically call ou service to populate our Congress property.&lt;/p&gt;
&lt;p&gt;Now we're finally ready to get to our view.  Add a new Silverlight User Control to the Views folder called CongressListView.xaml.  Add a namespace called tk referencing the System.Windows.Controls.Toolkit&lt;/p&gt;
&lt;code&gt;xmlns:tk="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit"&lt;/code&gt;
&lt;p&gt;Add the following code to the LayoutRoot. I'm using a custom datatemplate to format the data, and a wrappanel for the itemstemplate to wrap the data around in the listbox.  Note the itemsource is bound to the Congress property of our viewmodel, and the textblock values our bound to the fields of our table.  I could have reshaped this data into a POCO, but find this just as easy as long as the tables don't change.&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
        &amp;lt;ListBox x:Name=&lt;span class="str"&gt;"congressListBox"&lt;/span&gt; ItemsSource=&lt;span class="str"&gt;"{Binding Congress}"&lt;/span&gt; ScrollViewer.VerticalScrollBarVisibility=&lt;span class="str"&gt;"Visible"&lt;/span&gt;
                        ScrollViewer.HorizontalScrollBarVisibility=&lt;span class="str"&gt;"Disabled"&lt;/span&gt;&amp;gt;
            &amp;lt;ListBox.ItemTemplate&amp;gt;
                &amp;lt;DataTemplate&amp;gt;
                    &amp;lt;Border BorderBrush=&lt;span class="str"&gt;"PowderBlue"&lt;/span&gt; BorderThickness=&lt;span class="str"&gt;"1"&lt;/span&gt; Margin=&lt;span class="str"&gt;"5"&lt;/span&gt; CornerRadius=&lt;span class="str"&gt;"10"&lt;/span&gt; Background=&lt;span class="str"&gt;"SteelBlue"&lt;/span&gt; Width=&lt;span class="str"&gt;"270"&lt;/span&gt;  &amp;gt;
                        &amp;lt;StackPanel Orientation=&lt;span class="str"&gt;"Vertical"&lt;/span&gt; &amp;gt;
                            &amp;lt;TextBlock Text=&lt;span class="str"&gt;"{Binding NAME}"&lt;/span&gt; HorizontalAlignment=&lt;span class="str"&gt;"Center"&lt;/span&gt; /&amp;gt;
                            &amp;lt;TextBlock Text=&lt;span class="str"&gt;"{Binding CONG_DIST}"&lt;/span&gt; HorizontalAlignment=&lt;span class="str"&gt;"Center"&lt;/span&gt; /&amp;gt;
                            &amp;lt;TextBlock Text=&lt;span class="str"&gt;"{Binding STATE}"&lt;/span&gt; HorizontalAlignment=&lt;span class="str"&gt;"Center"&lt;/span&gt; /&amp;gt;
                        &amp;lt;/StackPanel&amp;gt;
                    &amp;lt;/Border&amp;gt;

                &amp;lt;/DataTemplate&amp;gt;
            &amp;lt;/ListBox.ItemTemplate&amp;gt;
            &amp;lt;ListBox.ItemsPanel&amp;gt;
                &amp;lt;ItemsPanelTemplate&amp;gt;
                    &amp;lt;tk:WrapPanel ItemWidth=&lt;span class="str"&gt;"290"&lt;/span&gt; Orientation=&lt;span class="str"&gt;"Horizontal"&lt;/span&gt;/&amp;gt;
                &amp;lt;/ItemsPanelTemplate&amp;gt;
            &amp;lt;/ListBox.ItemsPanel&amp;gt;
        &amp;lt;/ListBox&amp;gt;&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;For the code behind we need to let the view now to satisfy the imports needed to pull all this together, but we don't want to have this happen while we are in design mode.  Ad this to the view constructor after InitializeComponent().&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
        &lt;span class="kwrd"&gt;If&lt;/span&gt; MainViewModel.IsInDesignModeStatic = &lt;span class="kwrd"&gt;False&lt;/span&gt; &lt;span class="kwrd"&gt;Then&lt;/span&gt;
            CompositionInitializer.SatisfyImports(&lt;span class="kwrd"&gt;Me&lt;/span&gt;)

        &lt;span class="kwrd"&gt;End&lt;/span&gt; If&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;Finally we'll add a property that handles our viewmodel import and sets the datacontext of our view to that viewmodel.&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
    &amp;lt;Import(ViewModelTypes.CONGRESS_LIST_VIEW_MODEL)&amp;gt; _
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;WriteOnly&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt; ViewModel() &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Object&lt;/span&gt;
        &lt;span class="kwrd"&gt;Set&lt;/span&gt;(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; value &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Object&lt;/span&gt;)
            &lt;span class="kwrd"&gt;Me&lt;/span&gt;.DataContext = value
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Set&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; Property&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;Ok, this might all seem like overkill when we could have just added some code to our code behind to handle the call to the service and assign that to the itemsource.  But this comes into its own when you start to have lots of viewmodels and views all you need to do is link the two together using an import attribute.&lt;/p&gt;
&lt;p&gt;One last piece to the puzzle for now.  In your MainPage.xaml add references to your client project and the tk namespace as above&lt;/p&gt;
&lt;code&gt;
		xmlns:tk="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit"         
    	xmlns:views="clr-namespace:congressDistrict.client" 
&lt;/code&gt;
&lt;p&gt;Then add a dockpanel to hold our list and future views.&lt;/p&gt;
&lt;code&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
    &amp;lt;Grid x:Name=&lt;span class="str"&gt;"LayoutRoot"&lt;/span&gt; Background=&lt;span class="str"&gt;"White"&lt;/span&gt;&amp;gt;
        &amp;lt;tk:DockPanel Margin=&lt;span class="str"&gt;"8"&lt;/span&gt;&amp;gt;
            &amp;lt;views:CongressListView tk:DockPanel.Dock=&lt;span class="str"&gt;"Bottom"&lt;/span&gt; Margin=&lt;span class="str"&gt;"2"&lt;/span&gt;/&amp;gt;
        &amp;lt;/tk:DockPanel&amp;gt;
    &amp;lt;/Grid&amp;gt;&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;Hopefully when you run the application you end up with something like this:&lt;/p&gt;
&lt;p&gt;&lt;a href=http://www.boxshapedworld.com/Blog/GetFile/esrimvvm_2_2.png&gt;&lt;img src= http://www.boxshapedworld.com/Blog/GetFile/esrimvvm_2_2.png width=200 height=200/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/body&gt;&lt;p&gt;&lt;a href="http://www.boxshapedworld.com/Blog/post/117"&gt;ESRI Silverlight API with the MVVM Pattern Part 1&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.boxshapedworld.com/Blog/post/120"&gt;ESRI Silverlight API and MVVM Part III&lt;/a&gt;&lt;/p&gt;</description><pubDate>Wed, 23 Feb 2011 09:03:53 -0800</pubDate><a10:updated>2011-02-23T09:03:53-08:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/117"><guid isPermaLink="false">117</guid><title>ESRI Silverlight API with the MVVM Pattern Part 1</title><description>&lt;p&gt;I’ve become immersed in Silverlight the last couple of weeks, and thought I would share some of my experiences.  The learning route I took was to follow the Model-View-Viewmodel pattern.  Frankly, this took me some time to get up and running, but once I did, it was well worth it.  To make things simpler, I used the MVVM Light framework.  I really like the messenger part of this framework, and helped my viewmodels communicate with each other.  I drew heavily on Shawn Wildermuth’s &lt;a href=http://wildermuth.com/2009/08/05/RIA_Services_Silverlight_and_MVVM&gt;  XBOX MVVM RIA &lt;/a&gt;example. I also like Jeremy Likness’ Jounce framework.&lt;/p&gt;&lt;p&gt;Presumably you are reading this for one main reason – to see how you can fit ESRI’s Silverlight API into your MVVM pattern.  When I was learning about his I didn’t find very many examples outside of their forum, so I thought I would contribute, and also seek comments on how I implemented the recommended solution.  My second motivation was to put out some examples of the Silverlight MVVM pattern in Visual Basic.  I have tried a couple of times to learn C#, and I am generally able to read it, but have never fully committed.  Despite almost every example of MVVM being in C#, I believe there a number of people using VB, otherwise why would Microsoft still support it.  One site that I found useful was &lt;a href=http://www.myvbprof.com/MainSite/index.aspx#/Home&gt;My VB Prof&lt;/a&gt;.  He implemented a small tool that uses the MVVM pattern and VB if you need to brush up this .&lt;/p&gt; &lt;p&gt;Things that I expect you to be familiar with – MVVM (at least conceptually), LINQ to SQL (at least conceptually), VB, SQL Server Spatial, and a general knowledge of working with Visual Studio or Web Developer Express.  Things you should have installed on your computer are:  Visual Studio or Web Developer Express 2010, Silverlight 4, Silverlight 4 SDK, Silverlight Tools (compatible with version 4), MVVM Light (the binaries downloaded), ESRI Silverlight API version 2.1, and SQL SERVER 2008 (presumably R2).  You should also install SQL Server Management Studio. &lt;/p&gt;&lt;p&gt;To Simplify matters I’ve created a &lt;a href=http://www.boxshapedworld.com/Blog/GetFile/congressDistricts.zip&gt;spatial database &lt;/a&gt;for us to work with.  To do this I simple created a database and used Morten Nielson’s Shape2SQL tool &lt;a href=http://www.sharpgis.net/page/Shape2SQL.aspx&gt;SharpGIS&lt;/a&gt;.  Coincidentally Morten Nielson is also the genius behind ESRI’s Silverlight API (I’m sure there are others as well, I just don’t know their name).  Here is a *.bak of that database.  To use this open up SQL Server Management studio.  Login to your local host.  Right-click on the database folder and select restore database.  In the To Database field type congressDistricts and then use the From Device option to select the backup database you just downloaded.&lt;/p&gt;&lt;p&gt;Unfortunately there isn’t a simple way to use LINQ commands with spatial data.  You can still interact with the table and other columns, but Visual Studio will throw up an error when you have a column with a geometry type.  However, there is a workaround for this.  But this workaround is only for getting access to the column, you still couldn’t use Spatial commands (i.e. intersect, clip, etc.).  I found this solution on a couple of different blogs, but here is one of the better ones:  &lt;a href=http://www.gisbelowsealevel.nl/Blog/post/Spatial-Web-Services-in-Silverlight.aspx&gt;GIS Below Sea Level&lt;/a&gt;, plus it has a great name.  That example uses Bing as the end client, but we’ll be using ESRI as the end client.  So we start by creating a view (expand the database, right click on View and choose new view).  There is only one table in the database so select that.  You can pick all the columns except the geom one.  In the SQL view, add a comma to the end of the Select line, and add this:  CAST(geom AS VARBINARY(MAX)) AS geom.  Your Select statement should look something like this: .&lt;/p&gt;&lt;code&gt;SELECT     pk_id, ID, CONG_DIST, NAME, PARTY_AFF, URL, STATE, STATE_FIPS, SENATOR_1, SENATOR_2, SEN_1_URL, SEN_2_URL, CAST(geom AS VARBINARY(MAX)) AS geom     FROM dbo.cgd111p020&lt;/code&gt;&lt;p&gt;If you run this by clicking the ! on the toolbar, your table will now have a geom column that has &lt;Binary Data&gt; in it.  Save your view as view_CongressDistrict.&lt;/p&gt;&lt;p&gt;Now let’s create a project for the server side of things.  Our sever project will send the geometry and other data to our client based on those requests.  For simplicity I will be using WCF services (.svc) rather than the RIA services.  I haven’t found, or attempted, a way to pass geometry data using RIA services and the autogenerated code.  If somebody is willing to share this process with me, please let me know, or post a link in the comment section to your blog.  Open up visual web developer express 2010, click on a new project and choose ASP.NET Web Application.  This is found in the Visual Basic ? Web section.  Let’s give it a name of congressDistrict.Web for the project, and congressDistrict for the solution.  This will create our empty project, or at least semi empty.  We won’t be using the autogenerated stuff, but I’m not going to bother deleting it.  Let’s add a new folder to the project called Model, and another new folder called Services.  In the Model folder right-click and select to add a New Item.  Under the New Item dialog choose data then ADO.NET Entity Data Model, name it cdEntities.edmx, then click add.  In the dialog that pops up next, choose Generate from Database and click next.  Presumably you don’t already have a connection string set up for this database.  If you are going through this tutorial for a second time, it might already be established.  If not, click New Connection.  Enter the Server Name, which will be something like your-computer-name\SQLExpress.  You can always open up SQL Server Mangement studio to find out what your Server Name is.  Select the authentication type, again it will probably be Windows Authentication.  Click the drop-down arrow to pick the database name:  congressDistricts, or type it in.  Click test connection to make sure it works.  Click OK, and then Next in the dialog. On this screen you can select the tables to load.  Make sure you click on the cgd111p020 table and then under views view_congressDistrict.  Leave the Pluralize and Include checkboxes checked or check them.  I left the default namespace congressDistrictsModel.  Click finish.  You should have something that looks like this:&lt;/p&gt;&lt;p&gt;&lt;a href=http://www.boxshapedworld.com/Blog/GetFile/esrimvvm_1_1.png&gt; &lt;img src=http://www.boxshapedworld.com/Blog/GetFile/esrimvvm_1_1.png  height="200" width="200" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Right-click on the services folder and choose New Item.  Under the Web option, choose WCF Service.  Let’s name our service cdService.svc.  This automatically adds an Interface and class for the service.  We’ll start by creating a service to get the names from the database.  Open up the interface and change the DoWork sub to a function called GetNames that returns a list of strings.&lt;/p&gt;&lt;code&gt;Function GetNames() As IEnumerable(Of cgd111p020)&lt;/code&gt;&lt;p&gt; Next open up the svc file.  The first step is to enable the ASP.NET compatibility requirements.  This is an attribute that sits above the Class.&lt;/p&gt;&lt;code&gt;&lt;AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)&gt;Public Class cdService&lt;/code&gt;&lt;p&gt;You might have to add an Imports to System.ServiceModel.Activation.  Then change dowork to be a function called GetNames, and implements IcdService.GetNames.  Next, let’s add a global variable above the GetNames() sub to the database entities.  Let’s instantiate it at the same time.&lt;/p&gt;&lt;code&gt;Private _cdDB As New congressDistrictsEntities&lt;/code&gt;&lt;p&gt;In our GetNames function we’ll use a LINQ query to get the distinct congressional districts.  In order to achieve this we first need to create a class that will let us compare each congress district to each other.  Add a folder to the project called Helper, and then add a new Class called CongressComparer.  This class should implement the IEqualityComparer(Of cgd111p020).  In the Equals1 Function add:&lt;/p&gt;&lt;code&gt;If x.NAME = y.NAME Then &lt;br/&gt; If x.CONG_DIST = y.CONG_DIST Then&lt;br/&gt;                Return True&lt;br/&gt;            Else&lt;br/&gt;                Return False&lt;br/&gt;            End If&lt;br/&gt;        ElseIf x.api_id = y.api_id Then&lt;br/&gt;            Return True&lt;br/&gt;        Else&lt;br/&gt;        Return False&lt;br/&gt;        End If&lt;/code&gt;&lt;p&gt;And under the GetHashCode function&lt;/p&gt;&lt;code&gt;Return obj.NAME.GetHashCode&lt;/code&gt;&lt;p&gt;Back in our service class, add the code to get our IEnumerable list of congress districts&lt;/p&gt;&lt;code&gt;Dim values As IEnumerable(Of cgd111p020) = From n In _cdDB.cgd111p020 _&lt;br/&gt;              Order By n.STATE&lt;br /&gt;        Return values.Distinct(New CongressComparer)&lt;/code&gt;&lt;p&gt;Build your project and then right-click on cdService.svc and select view in browser.  You should see something like this:&lt;/p&gt;&lt;p&gt;&lt;a href=http://www.boxshapedworld.com/Blog/GetFile/esrimvvm_1_2.png&gt; &lt;img src=http://www.boxshapedworld.com/Blog/GetFile/esrimvvm_1_2.png height="200" width="200" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;In the next lesson, we’ll start to work with the client, setting it up for the MVVM pattern.&lt;/p&gt;&lt;p&gt;EDIT:  I've significantly changed the database and the service code for GetNames.  I'm working on the second part and wanted to add some functionality to communicate with the NY Times Congress API.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.boxshapedworld.com/Blog/post/120"&gt;ESRI Silverlight API and MVVM Part III&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.boxshapedworld.com/Blog/post/118"&gt;ESRI Silverlight API and MVVM Part II&lt;/a&gt;&lt;/p&gt;</description><pubDate>Mon, 21 Feb 2011 00:00:00 -0800</pubDate><a10:updated>2011-02-22T00:00:00-08:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/116"><guid isPermaLink="false">116</guid><title>New Blog</title><description>Thanks for your patience while my website was down and being upgraded.  I got a little tired of using BlogEngine.  Nothing wrong with it, just thought I would take the opportunity to learn a little ASP.NET MVC, and create my own little blog feature.  It isn’t done by far, but the basic structure is.  I’m having some problems with the styling, partly because of the html stored from the old BlogEngine xml files.  I’ve also switched over to using Disqus so I don’t have to manage my comments.  I did not copy over old comments because there was so much spam to deal with (a problem I’ve found with BlogEngine).  To those who left legitimate comments, I sincerely apologize for this.  I’ve also gotten into Silverlight recently, so expect to see more of that floating around the site.  The widget to the right for example, although it isn’t too pretty right now.   Anyway, my goal was to create a simpler layout without too much crap floating around.  It seems to work better in Google Chrome, so I still need to work out some css problems.  </description><pubDate>Fri, 18 Feb 2011 00:00:00 -0800</pubDate><a10:updated>2011-02-18T00:00:00-08:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/53"><guid isPermaLink="false">53</guid><title>Five trends in Location</title><description>&lt;p&gt;Here are five &amp;quot;trends&amp;quot; in location according to Mashable.&amp;nbsp; I don&amp;#39;t know if these can really be classified as trends, but at least are interesting descriptions of mobile apps using location.&amp;nbsp; I love that &amp;quot;location&amp;quot; is &amp;quot;new.&amp;quot;&amp;nbsp; As if location hasn&amp;#39;t always been important, or as if location-specific information hasn&amp;#39;t always been important.&amp;nbsp; Granted it is new to have this link to location and the internet.&lt;/p&gt;</description><pubDate>Sun, 19 Sep 2010 17:11:00 -0700</pubDate><a10:updated>2010-10-27T12:52:52-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/86"><guid isPermaLink="false">86</guid><title>A blog to check out</title><description>&lt;p&gt; I stumbled across&lt;a href="http://www.aubreyrhea.net/gis/"&gt; this blog&lt;/a&gt; while searching for an ArcGIS question.&amp;nbsp; While it didn&amp;#39;t answer my question, it looked like a pretty well done GIS blog.&amp;nbsp; I like the problem/solution format, so worth a look.&amp;nbsp; It is ArcGIS centric though. &lt;/p&gt; &lt;p&gt; &amp;nbsp; &lt;/p&gt; &lt;p&gt; Here&amp;#39;s the link again:&amp;nbsp; &lt;a href="http://www.aubreyrhea.net/gis/"&gt;http://www.aubreyrhea.net/gis/ &lt;/a&gt; &lt;/p&gt;</description><pubDate>Thu, 09 Sep 2010 17:59:00 -0700</pubDate><a10:updated>2010-10-27T13:11:00-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/29"><guid isPermaLink="false">29</guid><title>WTF?</title><description>Apparently &lt;a href="http://mashable.com/2010/08/30/autocad-mac/"&gt;AutoCAD is coming to the Mac OS&lt;/a&gt;.&amp;nbsp; I&amp;#39;ve got a mac, and a bootcamp install of Windows 7.&amp;nbsp; I like both, but find I use the mac side for personal media management (videos, photos, and music) and windows 7 for productivity.&amp;nbsp; This might be because I&amp;#39;ve used Windows personally and professionaly for years and am more comfortable (although 7 is quite a departure), or it might be do to all the software available on Windows.&amp;nbsp; Will this push ESRI to release something for the Mac?&amp;nbsp; They&amp;#39;ve got an iOS app already.&amp;nbsp; I doubt it.&amp;nbsp; They are pretty heavily tied to windows, and porting that much code can&amp;#39;t be cheap or easy.&amp;nbsp; There would have to be a pretty big incentive.&amp;nbsp; It isn&amp;#39;t clear if it is just the base AutoCAD coming over or the whole family, including their GIS (Map 3D).&amp;nbsp; If a competing GIS becomes popular on the Mac, then that might be enough incentive...&amp;nbsp; Anyway, I guess this shows how macs are not just the domain of graphic designers, web developers, and personal computers anymore.</description><pubDate>Mon, 30 Aug 2010 19:53:00 -0700</pubDate><a10:updated>2010-10-27T12:32:38-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/39"><guid isPermaLink="false">39</guid><title>VBA and ArcGIS 10</title><description>I just saw a note about VBA in regards to ArcGIS 10.&amp;nbsp; Apparently it is still available, but requires a separate install and (free) license file.&amp;nbsp; So you&amp;#39;ve still got one more version to use your vba scripts, but essentially it isn&amp;#39;t supported.&amp;nbsp; I suspect this might be available for at least one more version, because of the vast quantity of scripts available.&amp;nbsp; Then again, ArcGIS 8 got rid of their AML and ArcView&amp;#39;s crap scripting language.</description><pubDate>Mon, 30 Aug 2010 19:26:00 -0700</pubDate><a10:updated>2010-10-27T12:40:21-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/15"><guid isPermaLink="false">15</guid><title>Another tutorial on Actionscript and Shapefiles</title><description>One of the more popular entries on this blog is my example of using &lt;a href="/blog/post/Shapefiles-Actionscript-30-and-Google-Maps.aspx"&gt;Actionscript/AIR to load a shapefile&lt;/a&gt;.&amp;nbsp; I just saw this other&lt;a href="http://vis4.net/blog/2010/04/reading-shapefiles-in-as3/"&gt; tutorial&lt;/a&gt; which looked pretty good.&amp;nbsp; Provides more information, and a bit cleaner than my code.</description><pubDate>Sun, 29 Aug 2010 23:04:00 -0700</pubDate><a10:updated>2010-08-29T23:11:42-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/107"><guid isPermaLink="false">107</guid><title>Away Home Game Map</title><description>I&amp;#39;ve complemented the NFL website on their&lt;a href="/blog/post/NFL-Infovis.aspx"&gt; play-by-play interactive graphic &lt;/a&gt;before.&amp;nbsp; Well, it&amp;#39;s football season again, and until One HD starts broadcasting the games in Australia, I&amp;#39;ve been catching up on the NFL website.&amp;nbsp; I noticed another &lt;a href="http://www.nfl.com/schedules/interactive#/team=DEN"&gt;interactive map&lt;/a&gt; that they have that displays a team&amp;#39;s schedule on a map.&amp;nbsp; Basically it is a flow map of home and away games.&amp;nbsp; It does leave something to be desired unfortunately.&amp;nbsp; I&amp;#39;d like to see labels of the teams without having to click on the clunky lines.&amp;nbsp; Either way it was a unique attempt at displaying the information.</description><pubDate>Sun, 29 Aug 2010 22:29:00 -0700</pubDate><a10:updated>2010-10-27T13:24:51-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/75"><guid isPermaLink="false">75</guid><title>Social network map</title><description>&lt;a href="http://www.flowtown.com/blog/the-2010-social-networking-map?display=wide"&gt;This&lt;/a&gt; is a poorly executed map (the labeling makes me cringe), but it was entertaining nontheless.</description><pubDate>Mon, 09 Aug 2010 18:01:00 -0700</pubDate><a10:updated>2010-10-27T13:05:04-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/81"><guid isPermaLink="false">81</guid><title>Cartography Resource</title><description>This website was posted on Cartotalk and I thought it looked pretty good:&amp;nbsp; &lt;a href="http://cartography2.org/"&gt;Cartography 2.0&lt;/a&gt;.&amp;nbsp; Seems to be a lot of valuable theoritical and some practical guides to cartography.</description><pubDate>Tue, 03 Aug 2010 17:48:00 -0700</pubDate><a10:updated>2010-10-27T13:09:07-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/82"><guid isPermaLink="false">82</guid><title>Neogeography and Geopolitics</title><description>&lt;p&gt;
&lt;a href="http://kelsocartography.com/blog/?p=3994"&gt;Kelso&lt;/a&gt; has posted a link to an interesting &lt;a href="http://www.washingtonmonthly.com/features/2010/1007.gravois.html"&gt;article&lt;/a&gt;.&amp;nbsp; The gist - &amp;quot;&lt;span class="SubHed"&gt;How Google&amp;rsquo;s open-ended maps are embroiling the 
company in some of the world&amp;rsquo;s touchiest geopolitical disputes.&amp;quot;&amp;nbsp; Of course this isn&amp;#39;t really anything new.&amp;nbsp; Maps created outside of the contested area are always controversial, e.g.&lt;a href="http://en.wikipedia.org/wiki/Persian_Gulf_naming_dispute"&gt; National Geographic and the Persian Gulf&lt;/a&gt;.&amp;nbsp; What is particularly interesting in this case, is how technology is allowing the modern atlas to be in more than one place at once.&amp;nbsp; Google maintains different maps for different regions of the world, allowing a space where Iranians might see the Persian Gulf and Saudi Arabians might see Arabian Gulf.&amp;nbsp; Of course, there are always going to be layers of meanings and names for places from the local/individual to what the nation has &amp;quot;officially&amp;quot; decided.&amp;nbsp; In some ways, Google is trying to cater for that as well by placing photos from panaramio on google maps so you can &amp;quot;explore&amp;quot; the area.&amp;nbsp; The other interesting bit in the article is how Google is being held responsible for Crowdsourcing of geographic/historic data (accurate or otherwise).&amp;nbsp; I think when Neogeography and Crowdsourcing are spoken of, it is generally in this solve the world gleam sort of way (sorry not very eloquent this morning), but this article shines a light on its dark side.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Plus it quotes Goodchild, so how bad can the article be. 
&lt;/p&gt;</description><pubDate>Thu, 29 Jul 2010 17:35:00 -0700</pubDate><a10:updated>2010-10-27T13:09:09-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/17"><guid isPermaLink="false">17</guid><title>Financial Year Query in Access</title><description>&lt;p&gt;
I struggled to find an example of what I was trying to do, so I thought I would post here.&amp;nbsp; I borrowed some from this&lt;a href="http://allenbrowne.com/subquery-01.html"&gt; site&lt;/a&gt;, but it didn&amp;#39;t quite do what I wanted and my tables weren&amp;#39;t split up the way the author had it.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Basically I have a table in Access 2007 that contains a column for the venue location, a column for the monthly revenue, and a column for the date (month, last day of the month, and year).&amp;nbsp; I needed a quick way to sumarize the data by financial year.&amp;nbsp; The financial year in this case runs from July 1st to June 30th. &amp;nbsp; Here is the completed query.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;SELECT [Table1].[IDColumn],&amp;nbsp; Year([Table1].[DateColumn])&amp;nbsp; &amp;amp; &amp;quot;-&amp;quot; &amp;amp; (Year([Table1].[DateColumn]) +1) As FinancialYear, (SELECT SUM([Table2].[MonthlyRevenue]) as FYTD&lt;br /&gt;
FROM [SomeTable] AS Table2&lt;br /&gt;
WHERE [Table2].[DateColumn] &amp;gt;= DateSerial(Year([Table1].[DateColumn]),7,1)&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;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AND [Table2].[DateColumn] &amp;lt;= DateSerial(Year([Table1].[DateColumn])+1,6,30)&lt;br /&gt;
AND [Table2].[Venue_ID] =&amp;nbsp; [Table1].[IDColumn];) AS Rev_Value_Year
&lt;/p&gt;
&lt;p&gt;
FROM [SomeTable] AS Table1&lt;br /&gt;
Group By [Table1].[Venue_ID], Year([Table1].[DateColumn]) , Year([Table1].[DateColumn])&amp;nbsp; &amp;amp; &amp;quot;-&amp;quot; &amp;amp; (Year([Table1].[DateColumn]) +1) ;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Basically i used a subquery to calculate the total for that financial year.&amp;nbsp; I&amp;#39;m not quite sure why, but I need to group by the year as well as the Financial Year.&amp;nbsp; I genericized the table and column names.&amp;nbsp; Hope that helps someone else with the same problem.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;</description><pubDate>Tue, 27 Jul 2010 18:11:00 -0700</pubDate><a10:updated>2010-07-27T18:19:00-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/40"><guid isPermaLink="false">40</guid><title>10 Greatest Maps</title><description>Interesting list of the Ten Greatests Maps from &lt;a href="http://www.dailymail.co.uk/home/moslive/article-1272921/Ten-greatest-maps-changed-world.html"&gt;The Daily Mail&lt;/a&gt;, via &lt;a href="http://flowingdata.com/2010/07/15/maps-that-changed-the-world/"&gt;Flowing Data&lt;/a&gt;.&amp;nbsp; Interestingly, Google Earth made the list.&amp;nbsp; &lt;a href="/blog/post/AAG-Wrapup-%281%29.aspx"&gt;&amp;quot;Is Google Good for Geography?&amp;quot;&lt;/a&gt;&amp;nbsp; I think I would have liked to see the &lt;a href="http://www.uoregon.edu/~dluebke/WesternCiv102/Hereford_Mappa_Mundi_1300.jpg"&gt;Hereford mappa Mundi&lt;/a&gt; on the list.&amp;nbsp; A commenter on Flowing Data suggested Snow&amp;#39;s Cholera map.&amp;nbsp; I suspect the intention of the list is to bring attention to maps that aren&amp;#39;t necessarily the ones you would think of.&amp;nbsp; The article is authored by &lt;a href="http://ies.sas.ac.uk/cmps/events/courses/LRBS/Academic%20Staff/LRBS_Peter_Barber.htm"&gt;Peter Barber&lt;/a&gt;, head of Map Collections at the British Library.&amp;nbsp; He is also featured prominently in the BBC 4 production &lt;a href="http://www.bbc.co.uk/programmes/b00s2w83"&gt;The Beauty of Maps&lt;/a&gt;.&amp;nbsp; If you can find a copy of the documentary it is worth checking out, otherwise the website has some nice interactive features and clips.</description><pubDate>Thu, 15 Jul 2010 17:14:00 -0700</pubDate><a10:updated>2010-10-27T12:40:27-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/61"><guid isPermaLink="false">61</guid><title>Do terrorists know javascript?</title><description>I saw this very very cool &lt;a href="http://traintimes.org.uk:81/map/tube/"&gt;mashup&lt;/a&gt; from a post at &lt;a href="http://www.cartotalk.com/index.php?showtopic=5830"&gt;cartotalk&lt;/a&gt;.&amp;nbsp; It shows all the trains movement in the London tube/subway/metro system on a google map.&amp;nbsp; It&amp;#39;s based on data that comes direct from a &lt;a href="http://data.london.gov.uk/apibeta"&gt;government API&lt;/a&gt;.&amp;nbsp; It does beg the question - what would a terrorist do with such information?&amp;nbsp; Something tells me they wouldn&amp;#39;t make a cool mashup, but hopefully terrorists don&amp;#39;t know how to use AJAX.</description><pubDate>Tue, 22 Jun 2010 16:04:00 -0700</pubDate><a10:updated>2010-10-27T12:57:08-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/105"><guid isPermaLink="false">105</guid><title>NoSQL Part Deux</title><description>&lt;p&gt; &lt;a href="/blog/post/NoSQL-the-next-step-in-GIS.aspx#comment"&gt;Craig&lt;/a&gt; was nice enough to leave an actual legitamte comment in the sea of spam that is this blog&amp;#39;s comment section.&amp;nbsp; He mentions the &lt;a href="http://wiki.neo4j.org/content/Neo4j_Spatial_Project_Plan"&gt;Neo4J spatial project&lt;/a&gt;.&amp;nbsp; I did come across it after I posted but I thought would mention here.&amp;nbsp; Not much information available, but still could be a really cool project.&amp;nbsp; There is a bit of&lt;a href="http://github.com/neo4j/neo4j-spatial/tree/master/src/main/java/org/neo4j/gis/spatial/"&gt; source code&lt;/a&gt; on GitHub though. &lt;/p&gt; &lt;p&gt; &amp;nbsp; &lt;/p&gt; &lt;p&gt; &lt;strong&gt;Update:&lt;/strong&gt; &lt;/p&gt; &lt;p&gt; Should have dug a little deeper before posting.&amp;nbsp; Here&amp;#39;s a bit more &lt;a href="http://wiki.neo4j.org/content/Neo4j_Spatial"&gt;information&lt;/a&gt;.&amp;nbsp; I think the discussion about the approaches to geometry storage is particularly interesting.&amp;nbsp; My intial thoughts on this was that each of the components could be related to one another.&amp;nbsp; Something like this: &lt;/p&gt; &lt;p&gt; &amp;nbsp; &lt;/p&gt; &lt;div style="text-align: center"&gt; &lt;img src="/Blog/GetFile/Drawing4.png" alt="" width="424" height="562" /&gt; &lt;/div&gt; &lt;p&gt; &amp;nbsp; &lt;/p&gt; &lt;p&gt; &amp;nbsp; &lt;/p&gt; &lt;p&gt; But as they say, what are the impacts on performance and scalability. &lt;/p&gt;</description><pubDate>Mon, 21 Jun 2010 19:06:00 -0700</pubDate><a10:updated>2010-10-27T13:24:33-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/16"><guid isPermaLink="false">16</guid><title>NoSQL - the next step in GIS?</title><description>Hopefully
I won&amp;#39;t make this posting too rambling.&amp;nbsp; Full Disclosure:&amp;nbsp; I am not a
database expert of any kind.&amp;nbsp; For the most part, all GISers are probably
familiar enough with what a database, or more specifically a Relational
Database is.&amp;nbsp; Pretty much any entry-level GIS textbook discusses it, and
you might even use one like the personal geodatabase in ArcGIS or something
more sophisticated like Oracle Spatial.&amp;nbsp; The idea behind the relational
database (and I realize I will butcher this) is that you have a series of
tables, and those tables are related to one another throu primary keys and
foreign keys stored in those tables.&amp;nbsp; There is a movement, and I&amp;#39;m not
sure how long it has been going, for a non-relational data storage system that
has been called &lt;a href="http://en.wikipedia.org/wiki/NoSQL"&gt;&lt;span style="color: blue"&gt;NoSQL&lt;/span&gt;&lt;/a&gt;.&amp;nbsp; Google uses a NoSQL data store
called BigTable, and Facebook uses something called &lt;a href="http://en.wikipedia.org/wiki/Apache_Cassandra"&gt;&lt;span style="color: blue"&gt;Cassandra&lt;/span&gt;&lt;/a&gt;
by Apache.&amp;nbsp; NoSQL is a bit all-encompassing, because it really covers any
of the data stores that are not the classic Relational Databases.&amp;nbsp; These
cover a range of things that I don&amp;#39;t really want to get into.&amp;nbsp; The two
that are of most interest to me are the Document Store and Graph
Databases.&amp;nbsp; Document stores are cool because they store, well, documents
rather than tables.&amp;nbsp; Each document can have it&amp;#39;s own set of properties and
values, and you aren&amp;#39;t tied to a database &lt;a href="http://en.wikipedia.org/wiki/Database_schema"&gt;&lt;span style="color: blue"&gt;schema&lt;/span&gt;&lt;/a&gt;.&amp;nbsp;
Typically the documents are stored in a format like XML or JSON (Javascript
Object Notation).&amp;nbsp; It isn&amp;#39;t hard to make a leap of storing GIS geometry in
a Document-oriented Database, because there already exists a specification
called GeoJSON.&amp;nbsp; Personally, I find it freeing not to be tied to a
database schema, and find it difficult to design them. &lt;/span&gt;
&lt;/p&gt;
&lt;p style="line-height: normal" class="MsoNormal"&gt;
&lt;span style="font-size: 12pt; font-family: 'Times New Roman','serif'"&gt;&amp;nbsp;But
now for the meat of this post - Graph Database.&amp;nbsp; If you don&amp;#39;t know a graph
is not a chart.&amp;nbsp; A graph is a mathematical structure to model
relationships.&amp;nbsp; We GISers are most familiar with its form as a network, or
transportation network.&amp;nbsp; Graphs are made up of nodes, or vertices, and
edges that connect nodes.&amp;nbsp; Importantly, an edge may have direction or no
direction.&amp;nbsp; For example, node1 and node2 are mutual friends and are just
connected, or node1 considers node2 a friend but node2 doesn&amp;#39;t consider node1 a
friend.&amp;nbsp; As you can probably guess, graphs are used extensively in social
network analysis.&amp;nbsp; A graph database is a database that stores data as a
graph, or I suppose multiple graphs.&amp;nbsp; The emphasis is on the relationship
between the nodes of data.&amp;nbsp; Personally, I think this type of database is
the obvious direction that spatial-enabled databases should take.&amp;nbsp; A lot
of our spatial analysis tasks involve searching the relationships between
data.&amp;nbsp; This could really expand those functions, and potentially make them
quicker.&amp;nbsp; There are at least two areas that come to mind when I think of
these possibilities.&amp;nbsp; One is topology.&amp;nbsp; What is topology to us but
the relationship between different geometries?&amp;nbsp; Here is graph of the
topological relationship of some theoretical data: &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;div style="text-align: center"&gt;
&lt;img src="/Blog/GetFile/Drawing1.png" alt="" width="215" height="389" /&gt;
&lt;/div&gt;
&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
&lt;w:WordDocument&gt;
&lt;w:View&gt;Normal&lt;/w:View&gt;
&lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
&lt;w:TrackMoves/&gt;
&lt;w:TrackFormatting/&gt;
&lt;w:PunctuationKerning/&gt;
&lt;w:ValidateAgainstSchemas/&gt;
&lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
&lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
&lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
&lt;w:DoNotPromoteQF/&gt;
&lt;w:LidThemeOther&gt;EN-AU&lt;/w:LidThemeOther&gt;
&lt;w:LidThemeAsian&gt;X-NONE&lt;/w:LidThemeAsian&gt;
&lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;
&lt;w:Compatibility&gt;
&lt;w:BreakWrappedTables/&gt;
&lt;w:SnapToGridInCell/&gt;
&lt;w:WrapTextWithPunct/&gt;
&lt;w:UseAsianBreakRules/&gt;
&lt;w:DontGrowAutofit/&gt;
&lt;w:SplitPgBreakAndParaMark/&gt;
&lt;w:DontVertAlignCellWithSp/&gt;
&lt;w:DontBreakConstrainedForcedTables/&gt;
&lt;w:DontVertAlignInTxbx/&gt;
&lt;w:Word11KerningPairs/&gt;
&lt;w:CachedColBalance/&gt;
&lt;/w:Compatibility&gt;
&lt;w:BrowserLevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;
&lt;m:mathPr&gt;
&lt;m:mathFont m:val="Cambria Math"/&gt;
&lt;m:brkBin m:val="before"/&gt;
&lt;m:brkBinSub m:val="&amp;#45;-"/&gt;
&lt;m:smallFrac m:val="off"/&gt;
&lt;m:dispDef/&gt;
&lt;m:lMargin m:val="0"/&gt;
&lt;m:rMargin m:val="0"/&gt;
&lt;m:defJc m:val="centerGroup"/&gt;
&lt;m:wrapIndent m:val="1440"/&gt;
&lt;m:intLim m:val="subSup"/&gt;
&lt;m:naryLim m:val="undOvr"/&gt;
&lt;/m:mathPr&gt;&lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
&lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
DefSemiHidden="true" DefQFormat="false" DefPriority="99"
LatentStyleCount="267"&gt;
&lt;w:LsdException Locked="false" Priority="0" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Normal"/&gt;
&lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="heading 1"/&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 1"/&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 2"/&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 3"/&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 4"/&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 5"/&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 6"/&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 7"/&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 8"/&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 9"/&gt;
&lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/&gt;
&lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Title"/&gt;
&lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/&gt;
&lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/&gt;
&lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Strong"/&gt;
&lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/&gt;
&lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"
UnhideWhenUsed="false" Name="Table Grid"/&gt;
&lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/&gt;
&lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading"/&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List"/&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid"/&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1"/&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2"/&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1"/&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2"/&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1"/&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2"/&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3"/&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List"/&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading"/&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List"/&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid"/&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 1"/&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 1"/&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 1"/&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/&gt;
&lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/&gt;
&lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/&gt;
&lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Quote"/&gt;
&lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 1"/&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 1"/&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 2"/&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 2"/&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 2"/&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 2"/&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 2"/&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 3"/&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 3"/&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 3"/&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 3"/&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 3"/&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 4"/&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 4"/&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 4"/&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 4"/&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 4"/&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 5"/&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 5"/&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 5"/&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 5"/&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 5"/&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 6"/&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 6"/&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 6"/&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 6"/&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 6"/&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/&gt;
&lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/&gt;
&lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/&gt;
&lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/&gt;
&lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/&gt;
&lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Book Title"/&gt;
&lt;w:LsdException Locked="false" Priority="37" Name="Bibliography"/&gt;
&lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/&gt;
&lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;
&lt;!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;
mso-font-charset:0;
mso-generic-font-family:roman;
mso-font-pitch:variable;
mso-font-signature:-1610611985 1107304683 0 0 159 0;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;
mso-font-charset:0;
mso-generic-font-family:swiss;
mso-font-pitch:variable;
mso-font-signature:-1610611985 1073750139 0 0 159 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-parent:"";
margin-top:0cm;
margin-right:0cm;
margin-bottom:10.0pt;
margin-left:0cm;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:Calibri;
mso-fareast-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
.MsoChpDefault
{mso-style-type:export-only;
mso-default-props:yes;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:Calibri;
mso-fareast-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
.MsoPapDefault
{mso-style-type:export-only;
margin-bottom:10.0pt;
line-height:115%;}
@page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 72.0pt 72.0pt 72.0pt;
mso-header-margin:36.0pt;
mso-footer-margin:36.0pt;
mso-paper-source:0;}
div.Section1
{page:Section1;}
--&gt;
&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin-top:0cm;
mso-para-margin-right:0cm;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0cm;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:"Times New Roman";
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;}
&lt;/style&gt;
&lt;![endif]--&gt;
&lt;p style="line-height: normal" class="MsoNormal"&gt;
&lt;span style="font-size: 12pt; font-family: 'Times New Roman','serif'"&gt;&amp;nbsp;One
thing that might be obvious from this is that we are used to separating out our
polygons into different tables or shapefiles that group our data.&amp;nbsp; At a
higher level geometry is grouped by type: polygon, point, and polyline.&amp;nbsp;
But with the graph database that wouldn&amp;#39;t be necessary and we would be able to
search for data based on their relationship with each other.&amp;nbsp; This
presents new analytical possibilities because data is no longer separate.&amp;nbsp;
See Tim Berners-lee&amp;#39;s Ted talk for more info about linked data.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="line-height: normal" class="MsoNormal"&gt;
&lt;span style="font-size: 12pt; font-family: 'Times New Roman','serif'"&gt;The other
possibility that I see with this, is relationships between metadata.&amp;nbsp;
Metadata in a GIS is boring.&amp;nbsp; Yes it is important, but no one seems to use
it, and it is tedious to create.&amp;nbsp; FGDC is a pain.&amp;nbsp; Metadata through
relationships sounds a lot more interesting to me.&amp;nbsp; Searching for related
information by who it was created, regions/areas, or temporality could be
really useful. &amp;nbsp;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="line-height: normal" class="MsoNormal"&gt;
&lt;span style="font-size: 12pt; font-family: 'Times New Roman','serif'"&gt;Anyway,
those are my thoughts on how NoSQL should be the next step in the GIS world. &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;div style="text-align: center"&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style="text-align: center"&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;div align="left" style="text-align: center"&gt;
&amp;nbsp; &lt;br /&gt;
&lt;/div&gt;</description><pubDate>Thu, 17 Jun 2010 21:49:00 -0700</pubDate><a10:updated>2010-06-17T22:42:10-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/93"><guid isPermaLink="false">93</guid><title>GIS Stack Exchange</title><description>I suggest you go over to this &lt;a href="http://area51.stackexchange.com/proposals/1425/geographic-information-systems?referrer=lUU3q_0Jx0d3hJ0vc5L2Fg2"&gt;site&lt;/a&gt; to help build a GIS stack exchange similar to Stack Overlow, but dedicated solely to GIS.&amp;nbsp; Should be a very valuable resource.</description><pubDate>Mon, 14 Jun 2010 21:53:00 -0700</pubDate><a10:updated>2010-10-27T13:16:48-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/99"><guid isPermaLink="false">99</guid><title>ASP.NET MVC</title><description>I started to look at creating a plugin for a web-based application as related to some potential project work.&amp;nbsp; It once again through me into a world I never heard of and knew nothing about.&amp;nbsp; Do you know what MVC is?&amp;nbsp; No, then we are on the same level.&amp;nbsp; MVC stands for Model View Controller and it is a way to build web applications.&amp;nbsp; If you&amp;#39;d like a quick, but good, introduction into MVC specifically for ASP.NET, then I recommend &lt;a href="http://www.asp.net/mvc/videos/understanding-models-views-and-controllers"&gt;this video&lt;/a&gt;.&amp;nbsp; Not for the faint of heart, or those not familiar with a little web programming.</description><pubDate>Mon, 07 Jun 2010 17:27:00 -0700</pubDate><a10:updated>2010-10-27T13:19:11-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/33"><guid isPermaLink="false">33</guid><title>Android Froyo</title><description>&lt;p&gt;I was lucky enough to be able to play with the original Google phone running Android 1.6 the month I was in the US. &amp;nbsp;I have to say it was a real joy to use. &amp;nbsp;Although, ironically, the part I found most clumsy was the phone part. &amp;nbsp;Particularly if I had to interact with an automated system that required me to push numbers. &amp;nbsp;The battery life was horrible, and I have a bad habit of not charging things regularly. &amp;nbsp;And because of multitasking the apps seemed to always be running. &amp;nbsp;Regardless, I really liked it. &amp;nbsp;I also have an IPod Touch, which I really enjoy using too, and possibly helped convinced me to get a macbook. &amp;nbsp;What really sold me on the idea of getting a macbook despite paying a higher price, was what someone wrote &amp;quot;it&amp;#39;s like getting two computers&amp;quot; because you can run windows and os x. &amp;nbsp;I do run both (windows 7) and find my time divided between the two. &amp;nbsp;Windows 7 is really nice. &amp;nbsp;But what I find happening is I use Windows 7 for productivity and OS X for media. &amp;nbsp;The mac is great to edit and store my picture, music, and home movies. &amp;nbsp;Windows media player kept crashing on me, and Windows doesn&amp;#39;t have the same caliber of media oriented software just there preinstalled. &amp;nbsp;I suspect this is what will happen for me with the Android and IPod. &amp;nbsp;One will be great for productivity, one for media. &amp;nbsp;Now comes along the Google TV and Android 2.2, promising synching with media across the web rather than the, frankly, sub-par ITunes. &amp;nbsp;This sounds great, but I don&amp;#39;t subscribe to the idea of the cloud. &amp;nbsp;I&amp;#39;ve been to enough places without internet access, dodgy internet, and now mobile reception to know that the cloud isn&amp;#39;t everywhere. &amp;nbsp;So I haven&amp;#39;t been sold on the idea of Android replacing my media framework. &amp;nbsp;Unfortunately, once you are locked into Apple&amp;#39;s closed garden, they make it difficult to get out.&lt;/p&gt;&lt;p&gt;What I liked most about the Android 2.2 anouncement, and most relevant to me is that you are no longer limited to how much storage space there is for apps. &amp;nbsp;They can now be stored on the external sd card. &amp;nbsp;It didn&amp;#39;t take me long to discover how few apps can fill up that limit on Android 1.6.&amp;nbsp;&lt;/p&gt;</description><pubDate>Sun, 23 May 2010 21:22:00 -0700</pubDate><a10:updated>2010-10-27T12:35:28-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/57"><guid isPermaLink="false">57</guid><title>GIS Porn</title><description>&lt;p&gt;
Just saw these new videos about the upcoming release of ArcGIS 10.&amp;nbsp; I have to say, I dig the look of the new layout, way to join 2005 ESRI.&amp;nbsp; Way better than MapInfo and Manifold&amp;#39;s 1996 designed on sandpaper layouts.&amp;nbsp; But seriously, I do think it looks really nice.&amp;nbsp; There appears to be some really great additions too. There is an attempt to include&lt;a href="http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/What_s_new_for_temporal_data/00qp00000018000000/"&gt; temporality in the data&lt;/a&gt;.&amp;nbsp; Continued&lt;a href="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#//0001000000w2000000"&gt; support&lt;/a&gt; for Python (possibly expanded) and .NET.&amp;nbsp; &lt;a href="http://www.esri.com/software/arcgis/whats-new/videos.html#v8"&gt;Here&lt;/a&gt; is a good video where you can see the layout design, and interacting with models.&amp;nbsp; I particularly like those query layers.&amp;nbsp; I&amp;#39;m not quite sure how this works, but it seems they are&lt;a href="http://www.esri.com/software/arcgis/whats-new/videos.html#v5"&gt; integrating with 3D quite a bit&lt;/a&gt;.&amp;nbsp; Essentially letting you switch between the 2D and 3D.&amp;nbsp; &lt;a href="http://www.esri.com/software/arcgis/whats-new/videos.html#v7"&gt;This&lt;/a&gt; is the one that got me really drooling though.&amp;nbsp; Don&amp;#39;t those new data editing tools look sweet!&amp;nbsp; The problem with this promo stuff is they don&amp;#39;t really tell you what license level these will be available, and what extensions are required.&amp;nbsp; My guess is all the extensions, and working with ArcInfo.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
So, what did I learn from all this?&amp;nbsp; GIS Analysts do not belong in front of the camera. 
&lt;/p&gt;</description><pubDate>Wed, 19 May 2010 22:15:00 -0700</pubDate><a10:updated>2010-10-27T12:54:12-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/34"><guid isPermaLink="false">34</guid><title>Annotation Groups</title><description>I&amp;#39;m working on a series of maps of differing scales and different labels.&amp;nbsp; In my head I&amp;#39;m thinking, I&amp;#39;ll just do one map, use bookmarks for each individual map, and annotation groups with zoom scales set.&amp;nbsp; That way I could just use the same background symbology, and just label at different scales where needed.&amp;nbsp; How come things are never easy as they are in my head?&amp;nbsp; I exported my first map to see how they were turning out.&amp;nbsp; Nothing, no labels, just the background layers.&amp;nbsp; After some mucking about it seemed to be a problem of setting the zoom scales.&amp;nbsp; I used the scale of 1:110,000 because that&amp;#39;s what everything was set at.&amp;nbsp; Well, you can&amp;#39;t do that, you need to have the Out Beyond and In Beyond buffer the scale of your map.&amp;nbsp; Why is this actually a huge problem?&amp;nbsp; It indicates that ArcMap doesn&amp;#39;t export at the scale you set.&amp;nbsp; This makes you a liar, or at least your scale bar a liar.&amp;nbsp; This happens on occasion when you close ArcMap and reopen the same mxd.&amp;nbsp; Noticed those scale numbers bounced around a bit, and your scale bar changed?&amp;nbsp; I guess ArcMap does it for exports too.&amp;nbsp; This is actually a good reason to use a graphics scale bar rather than text based.&amp;nbsp; Your scale bar should shift slightly with the export...at least in theory.&amp;nbsp;</description><pubDate>Wed, 19 May 2010 20:48:00 -0700</pubDate><a10:updated>2010-10-27T12:36:11-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/60"><guid isPermaLink="false">60</guid><title>But the Earth is flat I tells ya!</title><description>&lt;p&gt;
I&amp;#39;m currently reading the English translation of &lt;a href="http://books.google.com.au/books?id=gXBSKZAlAdMC&amp;amp;printsec=frontcover&amp;amp;dq=heaven+and+earth+in+the+middle+ages&amp;amp;source=bl&amp;amp;ots=LX2sJOhTMi&amp;amp;sig=MGXt0tNpjzZZoJeKTb_Dg8QHm7g&amp;amp;hl=en&amp;amp;ei=FxrxS5PqHIuMtAPqzKG_Dw&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=2&amp;amp;ved=0CCAQ6AEwAQ#v=onepage&amp;amp;q&amp;amp;f=false"&gt;&lt;em&gt;Heaven and Earth in the Middle Ages&lt;/em&gt;&lt;/a&gt; by Semik.&amp;nbsp; One might describe it as an intellectual history of geography during the middle ages.&amp;nbsp; I&amp;#39;m really enjoying it, but only a few chapters in.&amp;nbsp; The author spends a good portion of the book so far convincingly refuting the myth that medieval thinkers believed the earth to be a flat disc.&amp;nbsp; The author lists a number ancient texts from the Greeks onwards that discuss the Earth as a sphere, or the universe as a sphere.&amp;nbsp; I can even remember my elementary school history lessons teaching me that Columbus was a lone figure who thought the earth was round while everyone else thought the earth was flat.&amp;nbsp; Really though, Columbus&amp;#39; main problem was convincing people that the earth was small (smaller than it really is) and that sailors can be away from land for extended periods of time.&amp;nbsp; It&amp;#39;s funny how such a myth, despite efforts to eradicate it is still common.&amp;nbsp; I suppose it is like a lot of&lt;a href="http://en.wikipedia.org/wiki/Blood_libel"&gt; myths that have been around for hundreds of years&lt;/a&gt;.&amp;nbsp; Semik suggests that a handful of authors who weren&amp;#39;t popular during their time but supported the flat earth conception helped convince 18th and 19th century thinkers that the middle ages viewed the world as flat.&amp;nbsp; Semik also suggests that &lt;a href="http://en.wikipedia.org/wiki/T_and_O_map"&gt;T/O maps&lt;/a&gt;, with their circular flat representation of the known world (from a European&amp;#39;s perspective) also contributed to the myth.&amp;nbsp; Just goes to show how choice in a projection can influence how people perceive of our ideas (I&amp;#39;m looking at you Google Mercator Maps).&amp;nbsp; Personally I suspect the myth was aided by a heroification of Columbus, and the proceding generations&amp;#39; continual desire to show the preceding generation as backward also helped.
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;a href="http://en.wikipedia.org/wiki/Flat_Earth"&gt;Here&amp;#39;&lt;/a&gt;s a bit more about it if you are interested. 
&lt;/p&gt;</description><pubDate>Mon, 17 May 2010 03:23:00 -0700</pubDate><a10:updated>2010-10-27T12:56:40-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/20"><guid isPermaLink="false">20</guid><title>More Info on Python</title><description>&lt;p&gt;
Michalis Avraam had a nice &lt;a href="http://michalisavraam.org/2010/04/the-essential-python-modules-for-gis/"&gt;entry&lt;/a&gt; about some good packages that can be used with Python specifically for GIS related tasks.&amp;nbsp; I mentioned some in the previous post, and where to find good tutorials on how to use them.&amp;nbsp; I was just starting to explore NetworkX when I saw Michalis&amp;#39; post.&amp;nbsp; I presume though he is refering to road networks, as there are many types of networks.&amp;nbsp; Most of these packages have exe files for easy windows setup.&amp;nbsp; However, version 1.1 of NetworkX uses an .egg file.&amp;nbsp; You&amp;#39;ll probably come across some packages that realease using an egg file.&amp;nbsp; Particularly if you are using Apple OS.&amp;nbsp; Here is a quick tutorial I found on how to install an egg file on Windows.&amp;nbsp; As with anything with Python, make sure the version you are downloading is compatible with your version of Python.
&lt;/p&gt;
&lt;p&gt;
The tutorial is available &lt;a href="http://hustleplay.wordpress.com/2010/02/17/installing-an-egg-file-xp/"&gt;here&lt;/a&gt;, but I&amp;#39;ll repost it in this entry.&amp;nbsp; It is tailored towards Windows XP, but I used it with Windows 7.&amp;nbsp; Just had to locate where the System Variables is now located.
&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Download &amp;amp; Install &lt;a href="http://pypi.python.org/pypi/setuptools#downloads" target="_blank"&gt;setuptools&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Configure your PATH variable to include for example with python 2.5 &lt;code&gt;C:\Python25\Scripts\&lt;/code&gt;
	&lt;ol&gt;
		&lt;li&gt;Right-click on My Computer&lt;/li&gt;
		&lt;li&gt;Select Properties&lt;/li&gt;
		&lt;li&gt;Select the Advanced tab&lt;/li&gt;
		&lt;li&gt;Click on the Environment Variables button&lt;/li&gt;
		&lt;li&gt;In User Variables, select PATH, then click Edit&lt;/li&gt;
		&lt;li&gt;Add &amp;ldquo;;C:\Python25\Scripts\&amp;rdquo; to the end of the current value&lt;/li&gt;
		&lt;li&gt;Click OK in the Edit User Variable window&lt;/li&gt;
		&lt;li&gt;Click OK in the Environment Variables window&lt;/li&gt;
		&lt;li&gt;Click OK in the System Properties window&lt;/li&gt;
	&lt;/ol&gt;
	&lt;/li&gt;
	&lt;li&gt;Open a new Command Prompt&lt;/li&gt;
	&lt;li&gt;Run &lt;code&gt;easy_install path\to\simplejson-2.0.9-py2.5-win32.egg&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;</description><pubDate>Thu, 29 Apr 2010 13:48:00 -0700</pubDate><a10:updated>2010-04-29T13:59:55-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/112"><guid isPermaLink="false">112</guid><title>Why every GISer should learn Python</title><description>&lt;p&gt;What the hell is Python?&amp;nbsp; You may or may not be asking.&amp;nbsp; Well, it is a &amp;quot;high-level programming language&amp;quot; according to wikipedia.&amp;nbsp; Not so long ago, to me it was just some other thing that ESRI was installing on my machine in an already excruciatingly long process.&amp;nbsp; Then I actually tried to use it for some geoprocessing in ArcToolbox, and actually have found it quite a valuable skill to have.&amp;nbsp; I do find the syntax to be cumbersome to use, but my programming started with Visual Basic, so it is much more concise than VB.&amp;nbsp; Anyway, here are my reasons.&lt;/p&gt;&lt;ol&gt;	&lt;li&gt;&amp;nbsp;ESRI ArcGIS is using it for a lot of their ArcTools.&amp;nbsp; They seem to be supporting it at least for the next few versions, unlike VBA. (Keep reading as I discuss nonESRI reasons further down) &lt;/li&gt;	&lt;li&gt;You can do a lot with Python outside of the ESRI environment too.&lt;/li&gt;	&lt;li&gt;You don&amp;#39;t need ArcGIS in order to do geoprocessing with it.&lt;/li&gt;	&lt;li&gt;You get to use cool libraries like&lt;a href="http://matplotlib.sourceforge.net/index.html"&gt; matplotlib&lt;/a&gt; to create your charts instead of Excel. &lt;/li&gt;	&lt;li&gt;It is used in a lot of web programming, like MapServer.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Why am I recommending getting started with Python, when I invested time and effort in creating VBA tutorials (as yet unfinished).&amp;nbsp; VBA is still useful as the syntax is similar to VB.NET.&amp;nbsp; But VB.NET has a bigger learning curve.&amp;nbsp; Python will be supported for a while, and you can get started with it while staying within the ArcGIS environment.&lt;/p&gt;&lt;p&gt;How should I get started then?&amp;nbsp; Assuming you are using ArcGIS 9.3.&amp;nbsp; You should install PythonWin as well as that came on the installation disc separately.&amp;nbsp; If you don&amp;#39;t have access to that disc, or admin privledges, I&amp;#39;ll describe this using something else.&amp;nbsp; Pick a task that you use ArcToolbox for often.&amp;nbsp; Let&amp;#39;s use Clipping as an example that should be available to anyone with any license.&amp;nbsp; Add two generic polygon layers to work with.&amp;nbsp; Add ArcToolbox if you don&amp;#39;t have it open already, right click and create new toolbox.&amp;nbsp; Right click on your new toolbox and add a new model. Drag the Analysis Tools -&amp;gt; Extract -&amp;gt; clip tool to the model and you should see a square and oval.&amp;nbsp; Double click on Clip and fill out the form as you normally would.&amp;nbsp; Click ok and you should see two blue ovals added.&amp;nbsp; Go to Model --&amp;gt; Export --&amp;gt; To Script --&amp;gt; Python.&amp;nbsp; Call it what you want.&amp;nbsp; Discard the model.&amp;nbsp; Go to where you saved the file with a .py extension.&amp;nbsp; Right-click on it and select edit with IDLE.&amp;nbsp; Two windows open.&amp;nbsp; A note here.&amp;nbsp; Version 9.3 of Arc uses version 2.5 ofPython, and only 2.5.&amp;nbsp; Version9.2 uses only 2.4.&amp;nbsp; You can&amp;#39;t use a different version of Python with a different version of Arc.&amp;nbsp; Python will install multiple versions rather than overwrite existing ones.&amp;nbsp; It is possible that you still have 2.4 from arcgis 9.2 still installed.&amp;nbsp; Or another program might have put 2.6 on.&amp;nbsp; Look at the window opened that is called Python Shell and it will tell you what version.&amp;nbsp; If it opened with the wrong version&amp;nbsp; Go to Start --&amp;gt;&amp;nbsp; All programs --&amp;gt;&amp;nbsp; Python 2.5 --&amp;gt; IDLE.&amp;nbsp; When that opens got to File--&amp;gt; Open and open up the Python file that way.&amp;nbsp; It is really important that you get the version right, or else your tool will just crash.&amp;nbsp; Now you have your first bit of code.&amp;nbsp; I suggest you go through it line by line to understand what is happening:&lt;/p&gt;&lt;p&gt;&amp;nbsp;# ---------------------------------------------------------------------------&lt;br /&gt;# clip_example.py&lt;br /&gt;# Created on: Tue Mar 09 2010 12:06:20 PM&lt;br /&gt;#&amp;nbsp;&amp;nbsp; (generated by ArcGIS/ModelBuilder)&lt;br /&gt;# ---------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;# Import system modules&lt;br /&gt;import sys, string, os, arcgisscripting&lt;br /&gt;&lt;br /&gt;# Create the Geoprocessor object&lt;br /&gt;gp = arcgisscripting.create()&lt;br /&gt;&lt;br /&gt;# Load required toolboxes...&lt;br /&gt;gp.AddToolbox(&amp;quot;C:/Program Files/ArcGIS/ArcToolbox/Toolboxes/Analysis Tools.tbx&amp;quot;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Local variables...&lt;br /&gt;statesp020_Clip_shp = &amp;quot;C:\\WorkSpace\\FlowMap\\statesp020_Clip.shp&amp;quot;&lt;br /&gt;statesp020 = &amp;quot;statesp020&amp;quot;&lt;br /&gt;statesp020_Project = &amp;quot;statesp020_Project&amp;quot;&lt;br /&gt;&lt;br /&gt;# Process: Clip...&lt;br /&gt;gp.Clip_analysis(statesp020, statesp020_Project, statesp020_Clip_shp, &amp;quot;&amp;quot;)&lt;/p&gt;&lt;p&gt;The # is a comment and it is not processed by the compiler.&amp;nbsp; Import loads different libraries.&amp;nbsp; ESRI has a special one called arcgisscripting that you use to create a geoprocessing object (gp).&amp;nbsp; This gives you access to all the ArcTools.&amp;nbsp; Paths to files use either the forward slash / or double backslash \\ but not a single backslash \.&amp;nbsp; This is because strings use this slash as a special character and it would confuse python if you did this.&amp;nbsp; If you change the statesp020 and statesp020_Project (your variable names will be different) to equal their actual path to the file, then, in theory you should just be able to go to Run&amp;nbsp; --&amp;gt; Run Module and it will perform the operation. &lt;/p&gt;&lt;p&gt;Your next task:&amp;nbsp; Figure out how to loop through all the feature classes in a folder and clip them.&amp;nbsp; You already have one important line of code gp.Clip_analysis.&amp;nbsp; You just need to do the looping bit.&amp;nbsp; &lt;a href="http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=ListFeatureClasses_method"&gt;Follow the isntructions on this page for more information&lt;/a&gt;.&amp;nbsp; As always, the ESRI help is quite good and extensive (which does make it difficult to find things). &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;What if I don&amp;#39;t use ESRI, and I use MapInfo or &lt;span class="Apple-style-span" style="text-decoration: line-through"&gt;Manifold &lt;/span&gt;&amp;nbsp;you are now asking.&amp;nbsp; Well I&amp;#39;m sorry for you.&amp;nbsp; Just kidding, those programs have their merits too, no really they do.&amp;nbsp; :) [Thanks to Brian for pointing out that Manifold does have Python scripting. &amp;nbsp;I should also note there is Python scripting in QGIS].&amp;nbsp; Unfortunately, you cant use python with those programs, but there is something called GDAL that is an open source geoprocessing library (and more) that you can use instead.&amp;nbsp; Here is a lesson on &lt;a href="http://www.gis.usu.edu/~chrisg/python/2009/docs/gdal_win.pdf"&gt;installing&lt;/a&gt;&amp;nbsp; GDAL for python.&amp;nbsp; And Chris Garrard has been generous in posting his&lt;a href="http://www.gis.usu.edu/~chrisg/python/"&gt; course presentations&lt;/a&gt; that show step by step how to work with python and GDAL.&amp;nbsp; I recommend even for ESRI users giving that a once over.&lt;/p&gt;&lt;p&gt;I hope this has convinced you and given you a start on using Python with GIS.&amp;nbsp; There are plenty of tutorials that will give you more of the basics of Python Syntax, but I find it better to start with the GIS stuff, which I&amp;#39;m familiar with, and then look up the Python bits I&amp;#39;m less familiar with. &lt;/p&gt;</description><pubDate>Mon, 08 Mar 2010 18:16:00 -0800</pubDate><a10:updated>2010-10-27T13:27:37-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/69"><guid isPermaLink="false">69</guid><title>Examples</title><description>&lt;p&gt;While, I don&amp;#39;t have anything against FortiusOne or the &amp;quot;neogeography&amp;quot; work that they create. &amp;nbsp;I do have something against shoddy examples. &amp;nbsp;&lt;a href="http://blog.fortiusone.com/2010/02/09/better-know-a-geocommons-feature-&amp;ndash;-geojoin/"&gt;Here&lt;/a&gt;&amp;nbsp;is a shining example from a recent feature they have added to their GeoCommons project. &amp;nbsp;First, though, I&amp;#39;m not entirely sure what a proportional shapes map is supposed to be. &amp;nbsp;I don&amp;#39;t know if the values are changed. &amp;nbsp;&lt;a href="http://core.geocommons.com/help/Maker_User_Manual"&gt;In their description of map types&lt;/a&gt;, it sounds appropriate but the image they show is just a &amp;quot;color map.&amp;quot; &amp;nbsp;So I&amp;#39;ll let that go. &amp;nbsp;The problem I see is the example they are using. &amp;nbsp;The map the total number of children under 16. &amp;nbsp;The TOTAL number of children under 16. &amp;nbsp;Look at what states are the darkest and have the highest number of children under 16. &amp;nbsp;Wow, you just created a map of the most populous states. &amp;nbsp;They should have mapped the proportion of 16 and under. &amp;nbsp;I realize this is just an example. &amp;nbsp;When you are demonstrating something to novices, you should in the least create correct examples so you are not at fault for showing them incorrect information. &amp;nbsp;Or, at least, qualify that you are a novice. &amp;nbsp;Google Visualization API does this same thing in their examples.&lt;/p&gt;&lt;p&gt;Now...Don&amp;#39;t read any other entries in this blog or else I will probably be found at fault for this too. &amp;nbsp;I hope that I qualify that I&amp;#39;m not a programmer at least on my programming tutorials.&amp;nbsp;&lt;/p&gt;</description><pubDate>Tue, 23 Feb 2010 17:42:00 -0800</pubDate><a10:updated>2010-10-27T13:00:05-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/23"><guid isPermaLink="false">23</guid><title>Mapping Framework</title><description>&lt;a href="http://github.com/sunlightlabs/clearmaps/"&gt;Here&lt;/a&gt;&amp;nbsp;is an Actionscript based mapping framework that was recently released. &amp;nbsp;It too uses the&amp;nbsp;&lt;a href="/blog/post/Shapefiles-Actionscript-30-and-Google-Maps.aspx"&gt;vanrijkom toolset for accessing shapefile&lt;/a&gt;s. &amp;nbsp;No projection control though. &amp;nbsp;Via FlowingData.</description><pubDate>Tue, 23 Feb 2010 14:25:00 -0800</pubDate><a10:updated>2010-02-23T14:29:32-08:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/27"><guid isPermaLink="false">27</guid><title>Copying the NYTimes</title><description>&lt;p&gt;
A recent Cartotalk &lt;a href="http://www.cartotalk.com/index.php?showtopic=5371"&gt;post&lt;/a&gt; caught my attention about a new&lt;a href="http://www.nytimes.com/interactive/2010/02/09/sports/olympics/2010-olympics-venue-map.html?ref=olympics"&gt; Infographic &lt;/a&gt;at the NYTimes.&amp;nbsp; If you don&amp;#39;t want to follow the link, the basic gist of it is they have set up a series of interactive 3D maps of the Vancouver Olympic area.&amp;nbsp; As per usual, they are well made and fast.&amp;nbsp; The poster&amp;#39;s original question was how they were made.&amp;nbsp; I responded with my thoughts, but I really don&amp;#39;t know how it was made.&amp;nbsp; It got me thinking, and wondering, if I could do something similar.&amp;nbsp; Well, not one to let silly things such as inexperience or lack of knowledge get in my way, I decided to go for it.&amp;nbsp; The area I chose to work with was the Huangshan Mountains (Yellow Mountains) in China.&amp;nbsp; The tools I used, and had at hand were:&amp;nbsp; FlashDevelop (Flex 3.3 SDK), Papervision (most recent swc), Global Mapper (version 9), and Google Sketchup version 7.&amp;nbsp; I had a leg up in that I&amp;#39;ve worked with Papervision when experimenting with Augmented Reality (FLAR).&amp;nbsp; I don&amp;#39;t have much Google Sketchup experience so it was a bit of a crash course.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;To obtain the data, I used Global Mapper.&amp;nbsp; I highly recommend this program whether you have an expensive GIS or not.&amp;nbsp; This program will save you loads of time converting between files, downloading files, and clipping them.&amp;nbsp; It&amp;#39;s also really fast.&amp;nbsp; I just downloaded SRTM and Landsat data for my project area. I ended up picking an area that was quite hilly and exagerated.&amp;nbsp; This actually became a problem later.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
In order to use the terrain with Flash and Papervision I needed it in the open Collada format.&amp;nbsp; The only program I had to create collada files was Google Sketchup, and just the free versio.&amp;nbsp; Luckily there were a couple of formats available for the import: dem, dxf, and 3DS.&amp;nbsp; Global maper exports to both dem and dxf.&amp;nbsp; I initially tried a DEM but that created a really ugly model.&amp;nbsp; Then I played around with DXF mesh and DXF Face.&amp;nbsp; Both seemed to work better.&amp;nbsp; Because I had picked this SRTM data in an area with great elevation variability I needed to reduce the elevation height to create a reasonable mesh.&amp;nbsp; This was done through Global Mapper&amp;#39;s control panel and the layer&amp;#39;s properties.&amp;nbsp; I set mine to .05 scale factor.&amp;nbsp; When exporting to the DXF 3D face file, I also changed it so that it had a 250 metre by 250 metre grid.&amp;nbsp; The key here is that you export files that are manageable.&amp;nbsp; I dxf file will probably need to be less than a mb, and the image I used was around 3mb (which seemed ok). 
&lt;/p&gt;
&lt;p&gt;
I&amp;#39;m no Sketchup expert, but was able to figure things out by following this &lt;a href="http://sketchup.google.com/support/bin/answer.py?hl=en&amp;amp;answer=43324"&gt;tutorial&lt;/a&gt;.&amp;nbsp; The key steps to follow are the smoothing step and edit group before adding the texture.&amp;nbsp; When you import your dxf file it will not be grouped, so you need to do that step yourself.&amp;nbsp; While I was in sketchup I used those tools to add a square block underneath.&amp;nbsp; I used the Intersect with Selection tool to erase the parts of the block I didn&amp;#39;t need, and added a different texture.&amp;nbsp; Once I was happy with the model, I exported it to a Google Earth KMZ file.&amp;nbsp; For those that don&amp;#39;t know, KMZ is just a zip file, so change the kmz to zip and then open this.&amp;nbsp; Your model should be stored in a models folder with a .dae extension.&amp;nbsp; Textures are stored in the images folder. From there I just parsed them using papervision. 
&lt;/p&gt;
&lt;p&gt;
There are some really good papervision tutorials available &lt;a href="ttp://papervision2.com/tutorial-list/"&gt;here&lt;/a&gt; and &lt;a href="http://pv3d.org/2008/11/19/dragging-mouse-for-camera-orbit/"&gt;here&lt;/a&gt;.&amp;nbsp; That&amp;#39;s where the PaperBase.as file originated.&amp;nbsp; Because of some earlier experimenation, I actually found DAE worked better than the Collada parser.&amp;nbsp; The code is available &lt;a href="http://davidslamb.googlecode.com/files/terrainviewersprite.zip"&gt;here&lt;/a&gt;.&amp;nbsp; A demo version is available &lt;a href="/terrainview/index.html"&gt;here&lt;/a&gt;.&amp;nbsp; Click and drag the mouse to cause the camera to move.
&lt;/p&gt;
&lt;p&gt;
I make no claims that this is a replica of the NYTimes piece, but hopefully would get you started.&amp;nbsp; The model needs to be placed properly and the interaction needs to be worked on.&amp;nbsp; I was primarily concerned with getting terrain data into flash, from there it is up to the real designers :).&amp;nbsp; Also, considering I got this up and running in a few hours speaks to the quality.&amp;nbsp; But the ease of which it was done is a testament to the power of papervision and Google Sketchup rather than any particular skills of mine. 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Feel free to take the code and use it for whatever, there isn&amp;#39;t a licence, but I claim no responsibility and there is no warranty available.&amp;nbsp; Use at your own risk. 
&lt;/p&gt;</description><pubDate>Wed, 10 Feb 2010 21:32:00 -0800</pubDate><a10:updated>2010-10-27T12:31:34-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/45"><guid isPermaLink="false">45</guid><title>Flex Fanboy?</title><description>I never really thought of myself as a Fanboy of anything...I&amp;#39;m too cynical perhaps.&amp;nbsp; But with the unfortunately named IPad arriving, the Flash haters have come out of the woodworks saying that Apple&amp;#39;s continued lack of support of Flash will be the end of flash.&amp;nbsp; Their reasoning?&amp;nbsp; Something called HTML 5 and the video tag.&amp;nbsp; The nice thing about about HTML 5 is that when it finally arrives then you will theoretically be able to put a &amp;lt;video&amp;gt; tag in your HTML and the browser will just play it.&amp;nbsp; Of course, that makes light of the many varied video formats available, and Apple is really only supporting one video codec for its browser.&amp;nbsp; While I DO think HTML 5 is a great direction head, I think it is almost as mythical as the IPad was two weeks ago (&amp;quot;it will do this and this and that and this&amp;quot;).&amp;nbsp; I find it annoying how quickly everyone is to criticize flash.&amp;nbsp; Some truly wonderful things have been created with flash; one only needs to search the NYTimes for interactive to see what I mean.&amp;nbsp; And, well, frankly the HTML 5 Canvas element is just a glorified Flash sprite with a javascript backend.&amp;nbsp; Is really the only advantage of HTML 5 is that the browsers will support it and you don&amp;#39;t have to install an extra plugin?&amp;nbsp; That is, IF they support it at all, Internet Explorer doesn&amp;#39;t yet.&amp;nbsp; You also hope that each browser will support the same specification, otherwise you are stuck in a potential AJAX hell of writing code for each browser&amp;#39;s implementation.&amp;nbsp; That&amp;#39;s what happened with Internet Explorer.&amp;nbsp; At least with Flash you know it will run the same in each browser.&amp;nbsp; People point to performance, but I haven&amp;#39;t seen anyone do anything with performance and HTML 5, so who knows if it will be better.&amp;nbsp; Playing video and games is a drain on the battery regardless.&amp;nbsp; I don&amp;#39;t deny that Flash will go away eventually, especially if HTML 5 turns out to be as good as everyone says it will be.&amp;nbsp; And, transitioning to HTML 5 and javascript won&amp;#39;t be too painful given the similarities with Actionscript. I just don&amp;#39;t think that people should criticize Flash, because in the end it does give us good web experiences.</description><pubDate>Mon, 01 Feb 2010 22:57:00 -0800</pubDate><a10:updated>2010-10-27T12:42:47-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/115"><guid isPermaLink="false">115</guid><title>Phew....</title><description>&lt;p&gt;
Just had a heart-attack but now I&amp;#39;m ok.&amp;nbsp; I have a map in ArcGIS that uses several joins to link up by statistical boundaries with the data stored in a DBF file.&amp;nbsp; I realized I was using the wrong score, and needed to update it.&amp;nbsp; Rather than do all the joins and symbology over, I opened the dbf file in Excel and changed the score field...That is I opened it up in EXCEL 2007 (THE HORROR!!!).&amp;nbsp; Sure, it opens up fine, but when you try and save to a dbf, it doesn&amp;#39;t let, or even have the option anymore.&amp;nbsp; Curses!&amp;nbsp;&amp;nbsp; Luckily, the interweb had a solution for me.&amp;nbsp; Save the file out to an Excel file (xls instead of xlsx just to be on the safe side), open it up in ArcCatalog (can do this in ArcMap as well), then simply export it to a dbf file.&amp;nbsp; Everything should be the same as before. 
&lt;/p&gt;</description><pubDate>Tue, 26 Jan 2010 18:22:00 -0800</pubDate><a10:updated>2010-10-27T13:29:40-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/72"><guid isPermaLink="false">72</guid><title>Movie Links Visualizer</title><description>&lt;p&gt;
After spending the last month in java land in a perpetual state of frustration, I needed a break, and went back to the blissful world of Flex.&amp;nbsp; I even toyed around with JavaFX.&amp;nbsp; The only reason I can see that taking off, is because of the multitude of open source Java libraries available.&amp;nbsp; Anyway, this isn&amp;#39;t about Java.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;I needed to have a confidence booster and have a little fun, so I decided to take on a little project.&amp;nbsp; I am a big movie fan, and sometimes I like to find out if an actor (I&amp;#39;m using actor as a gender neutral for both men and women) as acted any movies with another actor.&amp;nbsp; There wasn&amp;#39;t a real easy way to do this on IMDB so I thought why not create my own.&amp;nbsp; Unfortunately, IMDB does not have an API to pull movie and actor names from, but I did find the &lt;a href="http://www.themoviedb.org/"&gt;free movie database&lt;/a&gt;.&amp;nbsp; It&amp;#39;s free for my purposes at least, since this was just a pet project.&amp;nbsp; To display the links and movies, I used the FLARE library&amp;#39;s force directed layout.&amp;nbsp; I suppose one of the other layouts would also work.&amp;nbsp; Because of the ease of use of Flare and FLEX I was up and running in a day and half, and most of that half was tweaking to get the different things to work right.&amp;nbsp; I know the user interface is a bit crappy, but I was mostly interested in the back end and having something work.
&lt;/p&gt;
&lt;p&gt;
Currently under &amp;quot;beta&amp;quot;, and perhaps perpetually so.&amp;nbsp; Here are some quick instructions.
&lt;/p&gt;
&lt;p&gt;
You can search for just one actor to see their movies by just entering the name in the first box and clicking find.&amp;nbsp; You can search for both actors and find their links and all their movies, or check the checkbox to just see the links.&amp;nbsp; Double click on the box to get more info about the movie, and double click on the actor to get more info about the actor.&amp;nbsp; Hover over the items to find the name of the movie or actor.&amp;nbsp; You can hover over the link to find out what job they had (actor, producer, etc...), but this doesn&amp;#39;t list all the jobs, hence why this is still under beta.&amp;nbsp; Pause and Resume buttons will pause the layout from moving the whole time. 
&lt;/p&gt;
&lt;p&gt;
The app is available &lt;a href="/movielink/movielink.html"&gt;here&lt;/a&gt;, and the source code is available &lt;a href="http://code.google.com/p/davidslamb/downloads"&gt;here&lt;/a&gt;.&amp;nbsp; You will need your own API key though. 
&lt;/p&gt;</description><pubDate>Thu, 07 Jan 2010 21:57:00 -0800</pubDate><a10:updated>2010-10-27T13:03:30-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/79"><guid isPermaLink="false">79</guid><title>Google Visualisation API</title><description>&lt;p&gt;
James Fee brought the &lt;a href="http://www.spatiallyadjusted.com/2009/12/16/the-google-maps-data-api-and-google-fusion-api-news/"&gt;Google Visualization API and Google Fusion API&lt;/a&gt; to my attention, so I went and checked them out.&amp;nbsp; The video on the&lt;a href="http://code.google.com/apis/fusiontables/"&gt; Google Fusion&lt;/a&gt; intro page is interesting.&amp;nbsp; It is all about putting the power to display information in anybody&amp;#39;s hand.&amp;nbsp; Which I guess is a noble aim...&amp;nbsp; Then I looked the Visualization API and immediately looked at the mapping examples, &lt;a href="http://code.google.com/apis/visualization/documentation/gallery/geomap.html"&gt;here&lt;/a&gt; and &lt;a href="http://code.google.com/apis/visualization/documentation/gallery/intensitymap.html"&gt;here&lt;/a&gt;.&amp;nbsp; There area acouple of things wrong with these maps.&amp;nbsp; One, for a visualization of this kind, shouldn&amp;#39;t they have used a better projection.&amp;nbsp; We are stuck, yet again, with Mercator.&amp;nbsp; In this context it is completely inappropriate, yada yada yada.&amp;nbsp; Second, they aren&amp;#39;t really different kinds of mapping, but are just a choropleth map.&amp;nbsp; I&amp;#39;m not even sure what the maps are supposed to be mapping.&amp;nbsp; I presume generic information...&amp;quot;popularity???&amp;quot;&amp;nbsp; Choropleths are meant to map derived data.&amp;nbsp; So it shouldn&amp;#39;t be popularity, but maybe popularity per 1000.&amp;nbsp; The intensity map just shows population.&amp;nbsp; It is the same problem, like if they were to map deaths.&amp;nbsp; The population and death map would theoretically look exactly the same.&amp;nbsp; Anyway, this is sort of a cost-benefit analysis.&amp;nbsp; Does the cost of putting the simplicity of creating the visualizations in the hands of everyday internet users (the ensuing creation of bad and ineffective maps) outweight the benefits of giving the power to create and visualize information?&amp;nbsp; I think that google could have provided a few fixes that do not impact the user in anyway to make their visualizations more appropriate.
&lt;/p&gt;
&lt;p&gt;
You might say that the designers and journalists and whoever creates infographics for print will still (hopefully) create approrpiate visualizations.&amp;nbsp; But, a lot of people are getting their info from crap blogs like mine rather than reliable sources.&amp;nbsp; Anyway, this is just the same debate over and over again about the &amp;quot;cult of the amateur&amp;quot; and whether it is good or bad.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;There was another thing that I found interesting in Fee&amp;#39;s post.&amp;nbsp; He described the google maps api&amp;#39;s introduction of queries, comparing them to other GIS related queries - &amp;quot;Now of course this isn&amp;rsquo;t paleo-type spatial queries, just simple stuff that solve 80% of all queries you&amp;rsquo;d need to complete.&amp;quot;&amp;nbsp; To me paleo refers to very old, or even primitive.&amp;nbsp; I find it confusing to refer to GIS techniques as paleo, when the mapping and spatial parts of the Web 2.0 (neogeography) are much simpler, and less advanced than the older stuff.&amp;nbsp; Anyway, I&amp;#39;m not going to debate the appropriateness of the terms paleogeography and neogeography because that would just get me stuck in the mud.&amp;nbsp; Plus I like the term Neogeography, but maybe my head is just in the cloud.&amp;nbsp; Ooops, should have put a pun warning in front of that.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;</description><pubDate>Wed, 16 Dec 2009 21:18:00 -0800</pubDate><a10:updated>2010-10-27T13:07:55-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/14"><guid isPermaLink="false">14</guid><title>Random Stuff</title><description>&lt;p&gt;
You obviously don&amp;#39;t come to this blog for the bleeding edge technology updates of say TechCrunch of Endgadget, so you&amp;#39;ll forgive me for posting &amp;quot;old&amp;quot; news.
&lt;/p&gt;
&lt;p&gt;
I thought &lt;a href="http://www.ugotrade.com/2009/10/13/ar-wave-layers-and-channels-of-social-augmented-experiences/"&gt;this&lt;/a&gt; was an interesting post about mixed reality and social networks and Google Wave.
&lt;/p&gt;
&lt;p&gt;
And completely unrelated...Flowing Data has posted a nice &lt;a href="http://flowingdata.com/2009/12/09/how-to-make-an-interactive-area-graph/"&gt;tutorial&lt;/a&gt; on creating an area graph using Flare. 
&lt;/p&gt;</description><pubDate>Wed, 09 Dec 2009 23:01:00 -0800</pubDate><a10:updated>2009-12-09T23:05:53-08:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/78"><guid isPermaLink="false">78</guid><title>Another AR Application</title><description>&lt;p&gt;
&lt;a href="http://www.junaio.com/"&gt;Junaio&lt;/a&gt; was recently released on the IPhone.&amp;nbsp; It is another AR Browser like application, but allows you to place objects in the scene.&amp;nbsp; In the video on the link the women places a dinosaur in the scene next to the Golden Gate Bridge.&amp;nbsp; She was even able to scale it using gestures, which is pretty cool.&amp;nbsp; Then she posts it to Facebook, and when her friend looks at it he jumps back as if he is startled to find a dinosaur in the picture.&amp;nbsp; I&amp;#39;d be concerned with the friend&amp;#39;s ability to distinguish low res 3d visuals from reality if this were true.&amp;nbsp; My favorite part of the video is when she using the AR browser application to find information about the square she is standing in.&amp;nbsp; She pans around and touches an icon to find out that there is a coffes shop in the square.&amp;nbsp; When she puts the camera down the coffee shop is RIGHT IN FRONT OF HER.&amp;nbsp; If we need an AR Browser to tell us that there is something right in front of us then...well either these are tears of laughter streaming down my face, or I&amp;#39;m really really sad for the future of humanity.&amp;nbsp; :).
&lt;/p&gt;
&lt;p&gt;
Anyway, I&amp;#39;m mostly jealous that I can&amp;#39;t try out the application because my IPod touch doesn&amp;#39;t have a camera.&amp;nbsp; I too want to stand there and take pictures of strangers to put pumpkins in their hands.&amp;nbsp; It looks like a really well made app, and they&amp;#39;ve put some effort into it.&amp;nbsp; Wish I had their skills...&amp;nbsp; At present I&amp;#39;m struggling with my app. 
&lt;/p&gt;</description><pubDate>Wed, 18 Nov 2009 18:19:00 -0800</pubDate><a10:updated>2010-10-27T13:06:06-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/91"><guid isPermaLink="false">91</guid><title>Hello, Java.</title><description>&lt;p&gt;
I&amp;#39;ve been self-teching how to work with the Android SDK, and am having a pleasant mix of frustration and pleasure.&amp;nbsp; I do agree with Wired&amp;#39;s post about Android&amp;#39;s rapid growth and multiple versions/hardwar causing problems with their &lt;a href="http://www.wired.com/gadgetlab/2009/11/android-fragmentation/"&gt;marketplace&lt;/a&gt;, but overall I find creating a simple application easy enough to get running.
&lt;/p&gt;
&lt;p&gt;
The problem I&amp;#39;m having is working with Java, or at least Android&amp;#39;s implementation of Java.&amp;nbsp; I&amp;#39;ll be honest I have never really liked Java, before I started to program with it.&amp;nbsp; Java applets in the bowsers always seem to lock up or take forever to load.&amp;nbsp; They usually look like something stuck in 1996 too.&amp;nbsp; Java is always wanting to update my computer, seemingly more than windows wants to.&amp;nbsp; Java was meant to be a programming language that could run on any machine simply by having Java installed on said machine.&amp;nbsp; It is similar to .NET except .NET is only really found on windows machines, although Mono is available.
&lt;/p&gt;
&lt;p&gt;
I looked into Java to create a little program not long ago.&amp;nbsp; I was hopping to include something to play media with, but it would have required installing a bunch of different java programs and libraries to get started, and anyone who wanted to use the program would have had to do the same.&amp;nbsp; That doesn&amp;#39;t really create a pleasant user experience in my opinion. &amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
So obviously I&amp;#39;ve come into this with a chip on my shoulder.&amp;nbsp; So you can take what I write with a grain of salt. I didn&amp;#39;t really like Python when I started to use it either, but I&amp;#39;ve turned around on that one. 
&lt;/p&gt;
&lt;p&gt;
As I develop with Android I find examples of tasks in other languages that I want to accomplish.&amp;nbsp; Porting can be a little difficult as every programming language has some things that are done that other languages do not implement.&amp;nbsp; For example, operator overloading.&amp;nbsp; This basically means that you can create a &lt;a href="/tutorials/objects%20and%20classes.ashx"&gt;class&lt;/a&gt; and in some of the methods override things like the plus (+) sign.&amp;nbsp; Normally plus means either addition or concatenate several strings.&amp;nbsp;&amp;nbsp; You could override this for your class, say a class for a vector, and have it add two vectors simply by using the expression vector = vector + vector.&amp;nbsp; C++ and C# do this, and so you&amp;#39;ll see examples using operator overloading.&amp;nbsp; Out of curiousity I wanted to know if Java did this.&amp;nbsp; Luckily somebody already posed the question to the Java community.&amp;nbsp; I was shocked and appalled by the responses this person received from the community.&amp;nbsp; Firstly, I never understood why jerks seem to troll forums and post responses.&amp;nbsp; Perhaps it has something to do with an egotism that sets in with some people when they become experts.&amp;nbsp; These people seem to berate people when they post questions, as if it is burden to them to answer your question.&amp;nbsp; Why even bother participating in a forum if you are going to do that?&amp;nbsp; I see that time and time again, and perhaps the only forum I&amp;#39;ve seen where experts are supportive and helpful is Cartotalk.&amp;nbsp; I posted a photo for comment on a photography forum and one so-called expert&amp;#39;s only response was that the topic was interesting but not photographed well.&amp;nbsp; Yeah, I get that, that&amp;#39;s why I&amp;#39;m asking for advice.&amp;nbsp; So that is not something unique to the Java community.&amp;nbsp; But the reactions to the question about operator overloading seemed pretty extreme.&amp;nbsp; One respondent said (paraphrasing) that if you want operator overloading like C++ go program in C++.&amp;nbsp; The tone seemed to be the equivalent of a &amp;quot;Go f*ck yourself.&amp;quot;&amp;nbsp; It was unhelpful and presumptive that the task didn&amp;#39;t require Java such as with Mobile phone development.&amp;nbsp; I think when a community reacts this way to a suggestion, or potential improvement and their reaction is to shut it out, then that is a bad sign.&amp;nbsp; It is sort of like the open source community&amp;#39;s vehement denial of being called &lt;a href="http://itmanagement.earthweb.com/osrc/article.php/3838186/"&gt;sexist&lt;/a&gt;.&amp;nbsp; I think when you deny something so strongly, then part of you must think it is true. &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
I&amp;#39;m not saying Java needs to implement operator overloading, I just find it to be a handy feature in other languages.&amp;nbsp; I just think, as a community, if you want to find participants to join that community you shouldn&amp;#39;t have a negative reaction to the ideas the newcomers bring with them.&amp;nbsp; Of course I&amp;#39;m new to Java, and the reaction to Operator Overloading might be just the reaction to the question being asked a thousand times before.&amp;nbsp; Still though, that&amp;#39;s not the way to approach it.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Anyway, this is a GIS blog isn&amp;#39;t it?&amp;nbsp; What am I doing ranting about Java? 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
EDIT:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://forums.sun.com/thread.jspa?threadID=5306764"&gt;Here&lt;/a&gt; is a good example, and particularly relevant to GIS.&amp;nbsp; The tragiacally funny part is that no one actually answered the poster&amp;#39;s question and it boiled down to silver and gold star &amp;quot;experts&amp;quot; arguing with each other.&amp;nbsp; It&amp;#39;s also funny that the user was actually using cartesian coordinates and they recommended he/she convert them into spherical coordinates.&amp;nbsp; Using the original coordinates with the 3rd post the poster would have gotten the answer, assuming the poster new which was x and y. 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Update:
&lt;/p&gt;
&lt;p&gt;
Ask a question and see what you &lt;a href="http://forums.sun.com/thread.jspa?threadID=5395645 "&gt;get&lt;/a&gt; (I&amp;#39;m not the OP on this). 
&lt;/p&gt;</description><pubDate>Tue, 17 Nov 2009 16:12:00 -0800</pubDate><a10:updated>2010-10-27T13:16:08-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/24"><guid isPermaLink="false">24</guid><title>Set Row Height in MS Publisher</title><description>&lt;p&gt;
You might need to know how to do this one day in your life.&amp;nbsp; I never thought I would.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;There is no easy way to set the row height of a table in MS Publisher.&amp;nbsp; So it is quite easy to have your rows be set unevenly.&amp;nbsp; I never found a distribute function either.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;One work around is to set the row height using VBA:
&lt;/p&gt;
&lt;p&gt;
Private Sub changeRows()&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim i As Integer&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; i = 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim RowHeight As Double&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; RowHeight = 15.5 &amp;#39;ThisDocument.Selection.ShapeRange(1).Table.Rows(i).Height&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; For i = 1 To ThisDocument.Selection.ShapeRange(1).Table.Rows.Count Step 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ThisDocument.Selection.ShapeRange(1).Table.Rows(i).Height = RowHeight&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Next&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
End Sub 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
This code only works if you have your row heights selected.&amp;nbsp; The idea was taken from &lt;a href="http://groups.google.com/group/microsoft.public.publisher/browse_thread/thread/0037a2ec412a16e8/6b19f6aa40477cfe?lnk=raot&amp;amp;pli=1"&gt;here&lt;/a&gt;, but modified to loop through the rows. 
&lt;/p&gt;</description><pubDate>Mon, 09 Nov 2009 22:54:00 -0800</pubDate><a10:updated>2009-11-09T22:58:17-08:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/98"><guid isPermaLink="false">98</guid><title>China</title><description>I finally got around to posting about my trip to China.&amp;nbsp; Since this blog has nothing to do with my Travels I won&amp;#39;t force them upon you, but if you are interested.&amp;nbsp; Part I is available &lt;a href="http://boxshapedworld.blogspot.com/search/label/China"&gt;here&lt;/a&gt;.</description><pubDate>Mon, 09 Nov 2009 15:39:00 -0800</pubDate><a10:updated>2010-10-27T13:18:56-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/90"><guid isPermaLink="false">90</guid><title>Cartography and Javascript</title><description>Here is a &lt;a href="http://cartographer.visualmotive.com/"&gt;Javascript library&lt;/a&gt; for thematic mapping with Google Maps, via &lt;a href="http://flowingdata.com/2009/11/05/make-thematic-maps-with-cartographer-js/"&gt;Flowing Data&lt;/a&gt;.&amp;nbsp; Haven&amp;#39;t tried to use it, but it looks really nice.</description><pubDate>Thu, 05 Nov 2009 20:24:00 -0800</pubDate><a10:updated>2010-10-27T13:14:11-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/54"><guid isPermaLink="false">54</guid><title>Nice Read</title><description>Interesting &lt;a href="http://www.axismaps.com/blog/2009/11/ed-parsons-hates-cartographers-more-than-anyone-in-the-world/"&gt;entry&lt;/a&gt; from Axis Maps.&amp;nbsp; Whether you agree or disagree with it, Streetview still doesn&amp;#39;t resolve the issue of temporality with maps.&amp;nbsp; A streetmap is frozen in the time of when it&amp;#39;s data was created.&amp;nbsp; Updating spatial data probably is much quicker than rephotographing all the streets again...</description><pubDate>Thu, 05 Nov 2009 19:30:00 -0800</pubDate><a10:updated>2010-10-27T12:52:55-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/109"><guid isPermaLink="false">109</guid><title>Augmented Reality - a Geographer's Perspective</title><description>&lt;p&gt;
First off, I hate the term Augmented Reality.&amp;nbsp; Augment whose reality?&amp;nbsp; I much prefer to term Mixed Realities.&amp;nbsp; It speaks more to a blending of virtual and physical objects.&amp;nbsp; With this last sentence, I give away my generation.&amp;nbsp; I am part of that generation that still sees the Internet as something separate from the &amp;quot;physical&amp;quot; world.&amp;nbsp; The latest generation doesn&amp;#39;t have that distinction.&amp;nbsp; So again, which reality are you augmenting?
&lt;/p&gt;
&lt;p&gt;
You might have heard something about Augmented reality before.&amp;nbsp; It has become quite popular for &lt;a href="http://ge.ecomagination.com/smartgrid/"&gt;marketing&lt;/a&gt;. Another form of it has become really popular as an AR Browser like &lt;a href="http://www.wikitude.org/"&gt;Wikitude&lt;/a&gt;.&amp;nbsp; The AR Browser basically overlays information on top of the phone&amp;#39;s camera.&amp;nbsp; This is typically commercial information, e.g. nearest restaurant.&amp;nbsp; The tag for that restaurant sits in the direction of the restaurant.&amp;nbsp; Now that the novelty of AR is starting to wear off, people are questioning its value at all.&amp;nbsp; &lt;a href="http://www.fastcompany.com/blog/chris-dannen/techwatch/put-your-phone-down-augmented-reality-overblown"&gt;Does it really add to the user&amp;#39;s experience&lt;/a&gt;?&amp;nbsp; In most cases, probably not.&amp;nbsp; &lt;a href="http://www.youtube.com/watch?v=z2ino2hwg8M"&gt;Does anyone care that you can hold a virtual whopper through your computer web cam&lt;/a&gt;?&amp;nbsp; Like I said, the novelty is wearing off.
&lt;/p&gt;
&lt;p&gt;
I am working on a project that plans on using Mixed Reality, or an AR Browser, as a navigation tool.&amp;nbsp; I was asked, why go to all the trouble of the AR Browser and not just put points on a map.&amp;nbsp; I&amp;#39;ve been giving it some thought...I actually think that navigating with an AR Browser is actually much more intuitive.&amp;nbsp; As much as we like to think everyone loves our maps, and has no problem using it, the truth is people can&amp;#39;t read maps (well a lot of people can&amp;#39;t, at least).&amp;nbsp; What&amp;#39;s easier, find points on a map, figure out where you are on the map, which direction you are facing and which direction you want to go; or hold up the phone turn till you find what you are looking for and start walking?&amp;nbsp; Some of the former can be automated, such as pinpointing your location on the map, and using the compass to turn the direction of the map. Both unfortunately suffer from hardware limitations.&amp;nbsp; The compass for example is really sensitive to interference.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;Yes, it is akward to hold up the phone, but it is done a million times a day for other reasons so it isn&amp;#39;t hard to adapt.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;It&amp;#39;s easy to draw comparisons with the hype surrounding &lt;a href="http://www.ydreams.com/blog/2009/10/12/augmented-reality-added-value/"&gt;Virtual Reality in the 90s&lt;/a&gt; and the hype of today.&amp;nbsp; Virtual reality didn&amp;#39;t really catch on in mainstream, I mean who needs the neck strain of wearing those helmets.&amp;nbsp; The problem is, these are two different conceptions of space.&amp;nbsp; Virtual reality worked to bring things to you while sat in a single place.&amp;nbsp; The promise of time travelling virtually for example.&amp;nbsp; AR Browsers are meant to direct you to the place.&amp;nbsp; I think they stand a better chance of not falling by the wayside because of this.&amp;nbsp; You are taking the &amp;quot;virtual&amp;quot; wherever you go with you. 
&lt;/p&gt;</description><pubDate>Wed, 04 Nov 2009 19:48:00 -0800</pubDate><a10:updated>2010-10-27T13:25:57-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/87"><guid isPermaLink="false">87</guid><title>Versioning</title><description>&lt;p&gt;
I recently (yesterday) upgraded from version 2003 of Microsoft Office to 2007.&amp;nbsp; It only took two years, but I&amp;#39;ve finally reached the year 2007.&amp;nbsp; &amp;quot;Hmmm, so this is what the future is like.&amp;quot;&amp;nbsp; We actually had to take a test and get at least 72% in order for the IT department to install on our computers.&amp;nbsp; It was perhaps the most painfully boring experience of my life, although admitedly I did learn a few things. 
&lt;/p&gt;
&lt;p&gt;
The day before this, I had been using 2003 Excel to create a pivot table and group it by dates.&amp;nbsp; I didn&amp;#39;t know how to do this, so I searched the web, and immediately found what I was looking for.&amp;nbsp; I needed to do this again, but using Excel 2007, and struggled to find a single example.&amp;nbsp; This got me thinking about the latest trend from software companines, of releasing a new version once a year, including ESRI.&amp;nbsp; The power of something like Office 2003, is that has been around forever in technology years.&amp;nbsp; This allows for a community of support to be built up, where someone has blogged, posted a question, or&amp;nbsp; written an article about nearly every aspect.&amp;nbsp; This makes the adoption of a new version all the more difficult, because it takes effort and time to recreate, change, all of that information.&amp;nbsp; Especially if it is a drastic change like 2007 is.&amp;nbsp; It isn&amp;#39;t too bad with ArcGIS 9.2, 9.3 since the majority of features haven&amp;#39;t changed, but constant changes doesn&amp;#39;t foster a community of support. 
&lt;/p&gt;</description><pubDate>Tue, 03 Nov 2009 14:29:00 -0800</pubDate><a10:updated>2010-10-27T13:11:03-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/65"><guid isPermaLink="false">65</guid><title>NFL Infovis</title><description>&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
For those that don&amp;#39;t know, I&amp;#39;m an American living temporarily in Australia.&amp;nbsp; Back in the US I wasn&amp;#39;t much of a sports watcher, always finding something else to do on Sunday afternoons.&amp;nbsp; Although, I did watch the occasional football (American football that is) on tv.&amp;nbsp; Since being in Australia, I found I am taking more of an interest in watching some sports.&amp;nbsp; I&amp;#39;ve come to like learning and watching Cricket and Australian Football.&amp;nbsp; And have just started on Aussie rules rugby.&amp;nbsp; The seasons have ended, though.&amp;nbsp; I also have taken more of interest in the NFL, and follow the season regularly.&amp;nbsp; Being from Colorado, I naturally am drawn to the Broncos.&amp;nbsp; They had a pretty exciting sunday game (9-oct-2009), which we caught this Monday AM.&amp;nbsp; Unfortunately, unlike the rest of Australia (at least the major cities), Darwin does not get the game.&amp;nbsp; We watched &lt;a href="http://www.nfl.com/"&gt;NFL&amp;#39;s game center application&lt;/a&gt;, and listened online to KOA.&amp;nbsp; Now to the actual point of this entry, as fascinated as my sports watching habits are.&amp;nbsp; If you have not seen the Game Center app you should really check it out, even if you are not a football fan.&amp;nbsp; Essentially it is an spatio-temporal infovis of the game, where time is along the vertical axis and space (distance) is on the horizontal axis.&amp;nbsp; As the time of the game progresses, the bars move vertically, past game plays fading out as they become further from the bottom.&amp;nbsp; It is a really well made application and kept us up-to-date on the plays.&amp;nbsp; Ironically it was the radio broadcast that was delayed, and not the app.&amp;nbsp; There are two views as well, side and top.&amp;nbsp; The side view further classifies the bars into passes and runs.&amp;nbsp; The length of the bar is the distance of the completed pass, run length, or attempted pass.&amp;nbsp; Anyway, it is worth checking out, especially if you are a geonerd like myself and instead of focusing on the game you drool over the infographic.
&lt;/p&gt;
&lt;p&gt;
Side View&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="/Blog/GetFile/gamecenter_side.png" alt="" width="459" height="198" /&gt;
&lt;/p&gt;
&lt;p&gt;
Top View&amp;nbsp;
&lt;/p&gt;
&lt;img src="/Blog/GetFile/gamecenter_top.png" alt="" width="460" height="192" /&gt;</description><pubDate>Sun, 11 Oct 2009 17:56:00 -0700</pubDate><a10:updated>2010-10-27T12:58:11-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/37"><guid isPermaLink="false">37</guid><title>Open ARML</title><description>&lt;p&gt;
I&amp;#39;ve been thinking a lot about the latest Mixed Reality news to come out from Mobilizy about their open standard for &lt;a href="http://video.google.com/videosearch?oe=UTF-8&amp;amp;sourceid=navclient&amp;amp;gfns=1&amp;amp;q=ar+browser&amp;amp;um=1&amp;amp;ie=UTF-8&amp;amp;ei=4ge7SuK-G8GAkQXdpdSkDQ&amp;amp;sa=X&amp;amp;oi=video_result_group&amp;amp;ct=title&amp;amp;resnum=4#"&gt;Augmented Reality browsers.&lt;/a&gt;&amp;nbsp; This is discussed &lt;a href="http://gamesalfresco.com/2009/09/22/mobilizy-proposes-augmented-reality-mark-up-language-to-the-ar-consortium/"&gt;here&lt;/a&gt; and the standard is available &lt;a href="http://www.openarml.org/"&gt;here&lt;/a&gt;.&amp;nbsp; The standard is based on Google Earth&amp;#39;s KML specification, ammending it with AR browser functionality.&amp;nbsp; While there is buzz around it, the lack of detail has created loads of questions.&amp;nbsp; Will it cover 3D, heights, orientation, etc... I&amp;#39;m excited and skeptical at the same time.&amp;nbsp; I like that they are creating an open standard, and on the surface KML seems to be a good standard to build on.&amp;nbsp; Last thing the world needs an entirely new specification, so at least they are trying to build on an existing one.&amp;nbsp; KML immediately provides locational information, as well as style information for the icons that hover on the AR Browser&amp;#39;s screen.&amp;nbsp; The description of the placemark provides support for HTML tags.&amp;nbsp; Perhaps the most appealing part of the idea is being able to load in an AR Browser or in Google Earth.&amp;nbsp; KML though lacks a lot, from a GIS perspective at least.&amp;nbsp; No attribute information outside of the descriptions.&amp;nbsp; No metadata.&amp;nbsp; So I&amp;#39;m skeptical...&amp;nbsp; I want to see more of the standards before I rush to start using it a future project that I hopefully will be working on. 
&lt;/p&gt;
&lt;p&gt;
3D support is an interesting question though.&amp;nbsp; I think this is a question being asked by people who don&amp;#39;t really know about KML and Google Earth.&amp;nbsp; Google Earth can already parse 3D geometry in the form of a Collada file.&amp;nbsp; Just look at all the files created in sketchup and geotagged ready for Google Earth.&amp;nbsp; So it isn&amp;#39;t the specification that needs to support 3D, but the AR Browser.&amp;nbsp; I myself asked thought of it wrong when I threw the question out to the twitterverse (no one said anything), but I was thinking taking Collada specifications and incorporating it into KML.&amp;nbsp; This of course would make KML a beast of an xml file to parse.&amp;nbsp; Best to keep them as two separate standards and let them do what they do best.&amp;nbsp; Since Layar announced their 3D support recently, I wonder what type of file format they are using.&amp;nbsp; If it is Collada, then it wouldn&amp;#39;t be difficult to &amp;#39;augment&amp;#39; the ARML standard to includ ARCollada or something more clever.&amp;nbsp;
&lt;/p&gt;</description><pubDate>Wed, 23 Sep 2009 22:21:00 -0700</pubDate><a10:updated>2010-10-27T12:39:22-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/42"><guid isPermaLink="false">42</guid><title>Visualizations Kick</title><description>&lt;p&gt;
I have a tendency to jump around from topic to topic in an inconsistant way, and I guess this week/month I&amp;#39;m on a visualizations kick.&amp;nbsp; I look at a blog called &lt;a href="http://www.urbancartography.com/"&gt;Urban Cartography&lt;/a&gt; from time to time as they have interesting infographics and data visualizations posted there.&amp;nbsp; They had this &lt;a href="http://www.weathersealed.com/2009/09/22/where-the-buffalo-roamed/"&gt;graphic &lt;/a&gt;on it today.&amp;nbsp;&amp;nbsp; On a side note Urban Cartography doesn&amp;#39;t always provide a link to the original, which I think is really silly.&amp;nbsp; Anyway, this time the graphic had the address written on it and so I was able to read the author&amp;#39;s original description.&amp;nbsp; All this graphic really shows is population density, or urban centres, McDonalds naturally being more accessible where there are more people.&amp;nbsp; The author notes this in the description.&amp;nbsp; I think this actually ties in somewhat with the &amp;quot;&lt;a href="/blog/post/Cartographic-Malpractice-Article.aspx"&gt;cartographic malpractice&lt;/a&gt;&amp;quot; where Stephen Few discusses the potential misuse of techniques not appropriate to the data.&amp;nbsp; I don&amp;#39;t know if the McDonalds graphic is necessarily a misuse of a technique, all he did is calculate the distance between McDonalds.&amp;nbsp; This is a fairly simple process using ArcGIS Spatial Analyst, what the author doesn&amp;#39;t show (given the lack of a legend) is the color scale.&amp;nbsp; You could easily reclassify the underlying raster layer to make the McDonalds appear more dense or less dense.&amp;nbsp; However, the point I want to make is something I&amp;#39;ve been seeing more and more.&amp;nbsp; A thing to be aware of when doing any geographic visualization is how the underlying data is going to affect it.&amp;nbsp; In this case, the obvious factor is population density.&amp;nbsp; Perhaps a contiguous area cartogram of Mcdonalds per 1000 people (county?) might be more interesting, or just end up showing the same pattern.
&lt;/p&gt;
&lt;p&gt;
This came up in another blog about &lt;a href="http://flowingdata.com/2009/08/12/mapping-crime-in-oxford-over-time/"&gt;Mapping Oxford Crime&lt;/a&gt; data.&amp;nbsp; If you scan through the comments, you can see someone also took issue with whether or not the underlying data was accounted for - again the population.&amp;nbsp; This becomes a general criticism of Web 2.0 and the so-called democritization of the web and crowd sourcing I think.&amp;nbsp; It is a common criticism that we hear over and over again coming from &amp;quot;experts&amp;quot; - amateurs shouldn&amp;#39;t be doing these things (I don&amp;#39;t necessarily place myself in either category).&amp;nbsp; I do lots of things I probably shouldn&amp;#39;t - programming for one.&amp;nbsp; Of course I&amp;#39;m not trying to sell any programs, because no one would buy them.&amp;nbsp; It is usually pretty obvious when an amateur has created something versus a professional.&amp;nbsp; This becomes more interesting in the world of the Web 2.0 where how something was created (say by the BBC with the crime map) is generally not divulged.&amp;nbsp; That&amp;#39;s different than peer-reviewed journals where everything is scrutinized to the last detail.&amp;nbsp; But in journals, the writers aren&amp;#39;t interested in telling a story.&amp;nbsp; The two examples in this entry, though both are using spatial information and geovisulizations to tell a story, are from different sources and purposes.&amp;nbsp; One is for the amusement of the author, the other is meant to inform a population with the backing of a powerful news organization.&amp;nbsp; Perhaps, then, the later should be more open with how they created their story...Of course, it is much easier to find faults than to deliver praise.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;</description><pubDate>Wed, 23 Sep 2009 17:30:00 -0700</pubDate><a10:updated>2010-10-27T12:41:31-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/114"><guid isPermaLink="false">114</guid><title>"Cartographic Malpractice" Article</title><description>&lt;p&gt;
This &lt;a href="http://www.perceptualedge.com/articles/visual_business_intelligence/cartographic_malpractice.pdf"&gt;article&lt;/a&gt; came to my attention via the always interesting Cartotalk.&amp;nbsp; It is a discussion of Bis&lt;sup&gt;2&lt;/sup&gt;&amp;#39;s&lt;a href="http://www.bis2.net/PRODUCT/TheProduct.aspx"&gt; new software&lt;/a&gt; and new information visualisation technique.&amp;nbsp; While, I wouldn&amp;#39;t really want to be on the receiving end of Few&amp;#39;s criticism, I can&amp;#39;t help but agreeing with the points made by few.&amp;nbsp; Initially, I was sceptical of the title of the article, and have soon numerous graphic designers bash maps as a i&lt;a href="http://junkcharts.typepad.com/junk_charts/2009/03/the-trouble-with-maps.html"&gt;nfographic&lt;/a&gt; tool, so I was expecting this.&amp;nbsp; I for one am completely biased and think maps are fantastic, but do understand that the best tool should be used for the job not necessarily what you want for the job (surprisingly a simple line chart wins a lot of the time).&amp;nbsp; However, after reading the article, I found it to be a very reasonable assessment of the techniques used.&amp;nbsp; I am sympathetic to trying to create something new, but this technique definitely does not seem appropriate to the data.&amp;nbsp; I can&amp;#39;t help but wondering though, maybe by keeping the data separate from each other as the data matrix was done, allowing the overlap between categories might help explore relationships between them, for example there might be a trend where clothing items dip together during one quarter where other categories do not.&amp;nbsp; I don&amp;#39;t think this visualization technique would actually work to well for exploring these relationships, since it would be quite easy to just reorder the items.&amp;nbsp; There are probably better methods for this (data mining?).&amp;nbsp; I do think you can probably control for the issues Few raises a bit.&amp;nbsp; Presumably, Bis&lt;sup&gt;2&lt;/sup&gt; uses some sort of interpolation method (IDW, krigging) to create the continuous surface, or a density (kernel density) method.&amp;nbsp; Both of these methods use either a search radius or bandwidth in order to determine the influence of data points on each other.&amp;nbsp; I refer you to &lt;a href="http://www.spatialanalysisonline.com/output/"&gt;Spatial Analysis Online&lt;/a&gt; if you want a more detailed explanation of either technique.&amp;nbsp; The search radius or bandwidth may be fixed or variable (e.g. a minimum of 3 points used).&amp;nbsp; This is a huge presumption on my part, because I don&amp;#39;t know how the values are actually calculated but given the creator is a cartographer by trade...we can make a fairly safe assumption.&amp;nbsp; So by choosing a search radius or bandwidth that maintains the integrity of the category, or category and date (i.e. the data point only influences itself), then the influence of other categories might be reduced while still maintaining the ability to identify hotspots.&amp;nbsp; But this is approaching just a simple matrix approach demonstrated by Few.&amp;nbsp; If you create a continuous surface for individual categories you can see the relationship between months, which I don&amp;#39;t necessarily think should be treated as discrete units as shown in Few&amp;#39;s graphics..&amp;nbsp; But this is really just a mental exercise.
&lt;/p&gt;
&lt;p&gt;
I don&amp;#39;t really like the spiral graphic one.&amp;nbsp; Probably because I found it confusing.&amp;nbsp; I do however like the attempt to use the donut to represent time.&amp;nbsp; I find it interesting that the matrix graph separates January and December, where a donut would connect them.&amp;nbsp; Having worked at Best Buy through November, December, and January, I (intuitively at least) know how linked those months are. 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Just some thoughts.&amp;nbsp; Kudos to Bis&lt;sup&gt;2 &lt;/sup&gt;on their efforts and hard work, though. 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
A friendly note to the reader:&amp;nbsp; I spell using an &amp;#39;s&amp;#39; or &amp;#39;z&amp;#39; interchangeably at my whim, laughing in the face of consistency :).&amp;nbsp;
&lt;/p&gt;</description><pubDate>Sun, 20 Sep 2009 18:07:00 -0700</pubDate><a10:updated>2010-10-27T13:29:24-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/46"><guid isPermaLink="false">46</guid><title>Comment Spam</title><description>&lt;p&gt;
I&amp;#39;ve changed the setting that I have to moderate the comments before being posted.&amp;nbsp; I hoped this would reduce the amount of spam...of course it has not, so I need to look into a better way.&amp;nbsp; Although I must admit, them bots can be quite the charmers:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;*****************************************
&lt;/p&gt;
&lt;p class="date"&gt;
September 14. 2009 17:06
&lt;/p&gt;
&lt;p class="content"&gt;
I
havent any word to appreciate this post.....Really i am impressed from
this post....the person who create this post it was a great
human..thanks for shared this with us.
&lt;/p&gt;
&lt;p class="content"&gt;
&amp;nbsp;**************************************
&lt;/p&gt;
&lt;p class="content"&gt;
Only it/he/she posted it ten times which detracted from the overall sentiment.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;</description><pubDate>Tue, 15 Sep 2009 20:01:00 -0700</pubDate><a10:updated>2010-10-27T12:42:50-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/18"><guid isPermaLink="false">18</guid><title>Interesting Visualization</title><description>&lt;p&gt;
I really like this &lt;a href="http://geography.middlebury.edu/js/trends_poster_aag08.pdf"&gt;visualization&lt;/a&gt; of population trends for major urban centres.&amp;nbsp; I particularly like the placement of the the urban centres throughout the US, in what looks like a psuedo cartogram style.&amp;nbsp;
&lt;/p&gt;</description><pubDate>Mon, 14 Sep 2009 18:31:00 -0700</pubDate><a10:updated>2009-09-14T18:34:17-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/88"><guid isPermaLink="false">88</guid><title>In China</title><description>&lt;p&gt;
Currently traveling in China.&amp;nbsp; I&amp;#39;ve so far visited:&amp;nbsp; shanghai, hangzhou, huangshan (yellow mountain), suzhou, xian and the terracotta warriors.&amp;nbsp; Now in Beijing.&amp;nbsp; I can&amp;#39;t access facebook or twitter, or blogspot :).
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;</description><pubDate>Sun, 06 Sep 2009 23:55:00 -0700</pubDate><a10:updated>2010-10-27T13:11:11-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/35"><guid isPermaLink="false">35</guid><title>VBA will no longer be Supported</title><description>&lt;p&gt;
Version 9.4 will be the last version supporting VBA as I understand it...&lt;a href="http://geo.geek.nz/esri/deprecation-plans-for-arcgis-9-3-1-and-arcgis-9-4-an-important-document-to-read/"&gt;Here&lt;/a&gt; is a good entry about all the changes coming.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Wait a second version 9.4?&amp;nbsp; There was a 9.3?&amp;nbsp; Just kidding.&amp;nbsp; I&amp;#39;ve been slow to adapt apparently.&amp;nbsp; I guess I&amp;#39;m not slow, but the people who pay for these things are.&amp;nbsp; Guess my unfinished oeuvre of vba tutorials will now be a bit useless.&amp;nbsp; Need to shift focus to the other environments methinks.&amp;nbsp;
&lt;/p&gt;</description><pubDate>Tue, 25 Aug 2009 00:05:00 -0700</pubDate><a10:updated>2010-10-27T12:36:25-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/30"><guid isPermaLink="false">30</guid><title>Junk? Cartogram</title><description>&lt;p&gt;
I actually have been planning a separate post on circular cartograms for a while now, but need to finish some things up on it (which may take a while).&amp;nbsp; In the meantime, &lt;a href="http://junkcharts.typepad.com/junk_charts/2009/08/a-world-full-of-bubbles.html"&gt;this&lt;/a&gt; came across my &amp;quot;desk&amp;quot; and thought I would share.&amp;nbsp; It is a circular cartogram infographic produced by &lt;a href="http://www.guardian.co.uk/global/interactive/2008/dec/09/climatechange-carbonemissions"&gt;The Guardian&lt;/a&gt;.&amp;nbsp; Now, the blog Junk Charts generally takes offense at anything classified as a &amp;quot;bubble chart.&amp;quot;&amp;nbsp; This isn&amp;#39;t a bubble chart, but a circular cartogram.&amp;nbsp; For the most part, Junk Charts follows Tufte&amp;#39;s self-sufficiency principal.&amp;nbsp; Personally, I think circular cartograms may be used to great affect when used appropriately, and surprisingly well for certain time-series information.&amp;nbsp; For example, with the NYTimes olympic medals map.&amp;nbsp; If we ignore the labeling on this cartogram for a moment, then what this is trying to show does work on some level:&amp;nbsp; distribution of largest emitters of CO2.&amp;nbsp; Now add the labels back.&amp;nbsp; WTF?&amp;nbsp; What in the world were they thinking?&amp;nbsp; It doesn&amp;#39;t make any sense.&amp;nbsp; They&amp;#39;ve mixed ranking with actual CO2 emissions!&amp;nbsp; There isn&amp;#39;t even an attempt at different typeface or size to distinguish these.&amp;nbsp; So yes, in my opinion this is a &amp;#39;junk chart.&amp;#39;&amp;nbsp; Now, don&amp;#39;t get me wrong, I&amp;#39;m no infographic expert and make my fair share of poorly constructed maps :), but it is really surprising that a professional organization would make something so poorly.&amp;nbsp; Either way, I like the effort of using a cartogram, and I still like circular cartograms as a communication tool.
&lt;/p&gt;
A little better job on &lt;a href="http://kelsocartography.com/blog/wp-content/uploads/2008/03/carbonatlas.pdf"&gt;this&lt;/a&gt; version though, and easier to distinguish between rank and emission.&lt;br /&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;</description><pubDate>Tue, 18 Aug 2009 22:37:00 -0700</pubDate><a10:updated>2010-10-27T12:32:40-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/67"><guid isPermaLink="false">67</guid><title>All Hail Mercator</title><description>&lt;p&gt;
I&amp;#39;m afraid I&amp;#39;m going to have to disagree with &lt;a href="http://www.spatiallyadjusted.com"&gt;James Fee&lt;/a&gt; on this &lt;a href="http://www.spatiallyadjusted.com/2009/08/13/mercator-projection-hating-continues/"&gt;post&lt;/a&gt;.&amp;nbsp; Quick synopsis:&amp;nbsp; He criticizes those who are critical of the Mercator projection used by the majority of mapping services like Google and Bing, and of course their mashups.&amp;nbsp; Equating the critics to the flat earth society.&amp;nbsp; I suppose that last bit is a little ironic given that the Mercator projection is old (archaic?) and backwards thinking.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
I of course am a self-admitted Mercator hater.&amp;nbsp; However, I think you could make an argument that for the original purpose of Bing and Google maps a Mercator projection is appropriate.&amp;nbsp; Mercator was meant for navigation, preserving shape and direction.&amp;nbsp; I don&amp;#39;t know if that&amp;#39;s entirely necessary for plotting car directions on Google maps, but at least it is about navigation.&amp;nbsp; The problem definitely arises with the massive amounts of google mashups out there.&amp;nbsp; If a mashup involves creating a choropleth thematic map, shouldn&amp;#39;t it use an area preserving projection?&amp;nbsp; It doesn&amp;#39;t really matter if &lt;a href="http://www.spatiallyadjusted.com/2009/08/13/mercator-projection-hating-continues/"&gt;&amp;quot;people&amp;quot;&lt;/a&gt; know what a projection is or not, but the mapmaker should!&amp;nbsp; I suppose this would fall under the tiresome debate about paleo/neogeography, and amateur/professional.&amp;nbsp; Yes, even I&amp;#39;ve stopped caring about that debate.&amp;nbsp; I don&amp;#39;t really understand his argument that picking a more appropriate projection would make life harder on the average user.&amp;nbsp; How? 
&lt;/p&gt;
&lt;p&gt;
I also think familiarity with the Mercator projection is an extremely weak argument.&amp;nbsp; Familiarity with something that is wrong doesn&amp;#39;t make it any less wrong.&amp;nbsp; Maps, and by extension projections, influence and shape our understanding of the world around us.&amp;nbsp; Think of the kid who is asked to sketch a map of the United States and draws Alaska and Hawaii inside a box in the left hand corner.&amp;nbsp; The kid is familiar with this placement, but that&amp;#39;s not how Alaska and Hawaii exist in relation to the rest of the United States.&amp;nbsp; Size on a map also has a way of equating with importance.&amp;nbsp; Greenland is not that the same size of Africa.&amp;nbsp; But what does this mean?&amp;nbsp; Greenland, a Europeanesque country, is more important than Africa?&amp;nbsp; In the least, this probably happens &lt;span style="font-size: 12pt; font-family: 'Times New Roman'"&gt;subconsciously&lt;/span&gt;.&amp;nbsp; Why not use a projection that doesn&amp;#39;t have a Northern Hemisphere (G10) bias?&amp;nbsp; They exist.&amp;nbsp; If &lt;a href="http://blog.fortiusone.com/about/"&gt;neogeography&lt;/a&gt; really proclaims to be part of &lt;a href="http://goliath.ecnext.com/coms2/gi_0199-7505763/The-Geoweb-democratizing-the-map.html"&gt;democratizing the web&lt;/a&gt;, then why encourage the use of such a bias map projection?
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Off my soap box now.&amp;nbsp; As always, just my opinion.&amp;nbsp; As I&amp;#39;m sure you already do, feel free to disagree :).&amp;nbsp;
&lt;/p&gt;</description><pubDate>Thu, 13 Aug 2009 18:38:00 -0700</pubDate><a10:updated>2010-10-27T12:58:47-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/101"><guid isPermaLink="false">101</guid><title>DRM for Good Example</title><description>Wow...Is this blog influencing Wired now?&amp;nbsp; Probably not.&amp;nbsp; However, a few weeks after my &lt;a href="/blog/post/DRM-for-Good-not-Evil.aspx"&gt;DRM for Good&lt;/a&gt; post, wired posted &lt;a href="http://www.wired.com/epicenter/2009/07/maasai-music-itunes/"&gt;this&lt;/a&gt; article on their blog about the Maasai using DRM to protect their digital content.</description><pubDate>Thu, 30 Jul 2009 16:40:00 -0700</pubDate><a10:updated>2010-10-27T13:19:49-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/58"><guid isPermaLink="false">58</guid><title>SQLite Flare and AIR</title><description>&lt;p&gt;
Ok, so displaying data from your database in a table is rather boring don&amp;#39;t you think?&amp;nbsp; I&amp;#39;m working with time series data in this project, and so I&amp;#39;m really interested in being able to quickly display a trend.&amp;nbsp; This will be particularly useful since data becomes updated once every quarter, so fairly frequently.&amp;nbsp; I don&amp;#39;t have a professional license of Flex Builder which opens up the very simple to use charting features (played around with a demo a while back), so I&amp;#39;ve had to look for alternatives.&amp;nbsp; There are two that I came across:&amp;nbsp; &lt;a href="http://flare.prefuse.org/"&gt;Flare&lt;/a&gt;, and &lt;a href="http://www.axiis.org/"&gt;Axiis&lt;/a&gt;.&amp;nbsp; The first problem I ran into with both is that my data didn&amp;#39;t come in a &amp;#39;web&amp;#39; format, but as an array from the SQLite question.&amp;nbsp; The lack of tutorials for both project made it difficult to find out an answer to this question, so I had to play around with both.&amp;nbsp; The short answer is - yes you can take the SQLResult.Data and apply it directly to both projects.&amp;nbsp; I ended up using Flare which was actually much much easier to use (for me) compared to Axiis.&amp;nbsp; I don&amp;#39;t find Axiis very intuitive to use.&amp;nbsp; Which I was really disapointed by, not just because I couldn&amp;#39;t figure it out, but because it is based on the excellent &lt;a href="http://www.degrafa.org/"&gt;Degrafa&lt;/a&gt; project.&amp;nbsp; Which is how it gets such nice looking charts.&amp;nbsp; It was easy enough, but it took some playing around with, to get the data array to be used by Axiis.&amp;nbsp; Instead of playing with the dataset class, just set the DataProvider to the array directly.&amp;nbsp; &lt;a href="http://www.insideria.com/2009/07/axiis---an-introduction-and-tu.html"&gt;Here&lt;/a&gt; is a tutorial that was useful.&amp;nbsp; And I was even able to get it to display some bar graphs, which all the tutorials seem to teach.&amp;nbsp; When I started to try and work with the LineSeriesGroup, I couldn&amp;#39;t ever get a series of lines to display.&amp;nbsp; I found this one really difficult to understand, because I think of data statistically where there is a x and y axis and couldn&amp;#39;t grasp how to set this up.&amp;nbsp; If anyone wants to explain it to me, I would still like to give Axiis a go.
&lt;/p&gt;
&lt;p&gt;
Like I said, I ended up using Flare which I found much easier to work with.&amp;nbsp; Instead of the mxml base, Flare uses sprites, which is more Flash less Flex, but still useable in Flex.&amp;nbsp; So after querying and getting my data array, mentioned in a previous post, this is where I start:
&lt;/p&gt;
&lt;p&gt;
A bunch of Imports:&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flare.vis.data.Data;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flare.vis.data.EdgeSprite;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flare.vis.data.NodeSprite;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flare.vis.operator.encoder.ColorEncoder;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flare.vis.operator.encoder.PropertyEncoder;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flare.vis.operator.label.Labeler;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flare.vis.operator.layout.AxisLayout;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flare.vis.Visualization;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flare.scale.ScaleType;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flare.vis.controls.AnchorControl;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flare.vis.controls.HoverControl;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flare.vis.controls.SelectionControl;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flare.vis.data.DataSprite;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flare.vis.events.SelectionEvent;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flare.vis.controls.TooltipControl;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flare.vis.events.TooltipEvent;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flare.display.TextSprite;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flare.util.Strings;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flash.filters.GlowFilter;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flash.display.Sprite;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flash.geom.Rectangle;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
A class that extends Sprite:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public class LineChartExperiment extends Sprite&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Global variables and the constructor are commented.&amp;nbsp; The loaddata() function is the key step that takes our data array and puts it in the data format that is used by Flare.&amp;nbsp; Flare uses a graph data model.&amp;nbsp; This means everything is stored as a node and an edge.&amp;nbsp; You see graphs all the time, not line graphs, but real graphs.&amp;nbsp; Search wikipedia if you want a more in-depth explanation of graph theory.&amp;nbsp; This makes a lot of sense given what the library is capable of.&amp;nbsp; If you look at the &lt;a href="http://flare.prefuse.org/demo"&gt;Flare Demo Page&lt;/a&gt;, and select the layout and then force option, this is a visual representation of a graph that is being organized by a force directed method.&amp;nbsp; In other words it uses physics to place the circles.&amp;nbsp; The circles are the nodes, and the lines connecting the nodes are the edges.
&lt;/p&gt;
&lt;p&gt;
When you look at the loaddata function, we are actually taking each object in the array and creating a node from this.&amp;nbsp; Once we exit the loop we can use Flare&amp;#39;s createEdges function to generate the edges for us.&amp;nbsp; It does this based on two inputs, a sort by input and group by input.&amp;nbsp; So in this example I sort by time, and group by the name.&amp;nbsp; Another way to think of this is sort is your x axis and group is the series. 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //this is the string that will be used for a tooltip that pops up when hovering&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; private static const _tipText:String =&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;Venue: {0}&amp;lt;br/&amp;gt;&amp;quot; + &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;Value: {1}&amp;lt;br/&amp;gt;&amp;quot; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;Date: {2}&amp;quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //visualization is the component that handles everyting&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; private var vis:Visualization;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //this holds our data&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; private var dataArray:Array;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //this is passed in when the sprite is created.&amp;nbsp; I add the sprite to a canvas&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; private var _width:Number;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; private var _height:Number;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public function LineChartExperiment(da:Array, width:Number, height:Number) &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; super();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.dataArray = da;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this._width = width;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this._height = height;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //call the load data function&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; loadData();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; private function loadData():void&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var data:Data = new Data();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for each (var o:Object in dataArray) {&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; data.addNode(o);&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; //this also works but uses more lines of code&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; //data.addNode({&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;&amp;nbsp;&amp;nbsp; //Value: o.Value,&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;&amp;nbsp;&amp;nbsp; //Date: o.Date,&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;&amp;nbsp;&amp;nbsp; //Name: o.Name&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; //});&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //Important Step do not miss this one&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; data.createEdges(&amp;quot;data.Date&amp;quot;, &amp;quot;data.Name&amp;quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; createVisualization(data);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Once the data is loaded we pass it to the createVisualization function.&amp;nbsp; A lot of this was pulled from the source code of the examples that download with the swc file.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; private function createVisualization(data:Data):void&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  //This sets up the location and size of the Visualization
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; vis = new Visualization(data);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; vis.bounds = new Rectangle(0, 0, _width - 25, _height - 25);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; vis.x = 50;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; vis.y = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //and is added to the sprite as a child&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; addChild(vis);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //I need to look ino these in more depth, but basically they are used to set up the chart, and the colors
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //Date is the xAxis and Value is the y Axis&amp;nbsp; Note how you are creating symbols for the nodes, and edges.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;  //This allows the edges to show as a line in the chart.&amp;nbsp; You could skip the nodes and just show the lines 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; vis.operators.add(new AxisLayout(&amp;quot;data.Date&amp;quot;, &amp;quot;data.Value&amp;quot;));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; vis.operators.add(new ColorEncoder(&amp;quot;data.Name&amp;quot;, Data.EDGES, &amp;quot;lineColor&amp;quot;, ScaleType.CATEGORIES));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; vis.operators.add(new ColorEncoder(&amp;quot;data.Name&amp;quot;, Data.NODES, &amp;quot;fillColor&amp;quot;, ScaleType.CATEGORIES));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; vis.operators.add(new PropertyEncoder( { lineAlpha: 0, alpha:0.5, buttonMode: false, scaleX: 1, scaleY:1, size:0.5 } ));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; vis.operators.add(new PropertyEncoder( { lineWidth:2 }, Data.EDGES));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; vis.data.nodes.setProperties( { fillColor:0, lineWidth:2 } );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // add mouse-over highlight&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; vis.controls.add(new HoverControl(NodeSprite, 0,&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; // highlight on mouse over&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; function(e:SelectionEvent):void {&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; e.item.filters = [new GlowFilter(0xFFFF55, 0.8, 6, 6, 10)];&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; },&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; // remove higlight on mouse out&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; function(e:SelectionEvent):void {&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;&amp;nbsp;&amp;nbsp; e.item.filters = null&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; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // add tooltip showing data values&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; vis.controls.add(new TooltipControl(DataSprite, null,&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; function(e:TooltipEvent):void {&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; var data:Object = e.node.data;&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; TextSprite(e.tooltip).htmlText = Strings.format(&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;&amp;nbsp;&amp;nbsp; _tipText, data.Name, data.Value, data.Date);&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; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; vis.update();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //I added an eventlistener to the canvas to when it was resized, it then called this function
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //Which resizes the visualization to the canvas&amp;#39; new size&amp;nbsp; &amp;nbsp;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public function resize(w:Number, h:Number):void&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var rect:Rectangle = new Rectangle(0, 0, w - 25, h - 25);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _width = w;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _height = h;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; vis.bounds = rect.clone();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; vis.update();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Because we are working with a sprite, when we add this to our Main.mxml, we should first add it to a UIComponent, then add it to the Canvas or else you get an error.&amp;nbsp; Can is a canvas that is created in another portion of the code.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&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; exp = new LineChartExperiment(rev.dataArray, can.width, can.height);&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; exp.width = can.width;&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; exp.height = can.height;&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; var ui:UIComponent = new UIComponent();&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; can.addChild(ui);&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; ui.addChild(exp);
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Hopefully that is helpful to those who are starting out with flare too.&amp;nbsp;
&lt;/p&gt;</description><pubDate>Sat, 11 Jul 2009 00:29:00 -0700</pubDate><a10:updated>2010-10-27T12:55:18-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/84"><guid isPermaLink="false">84</guid><title>DRM for Good not Evil?</title><description>&lt;p&gt;
I just had a meeting revolving around a project I&amp;#39;m starting to work on
regarding a digital library of Indigenous archive material.&amp;nbsp; The meeting
discussed security and protocols for the archive material, and access.&amp;nbsp;
Indigenous protocols may be very complex on occasion.&amp;nbsp; For example, men
and women cannot have access to the same stories.&amp;nbsp; Different methods were
suggested, including Digital Rights Management (DRM).&amp;nbsp; Yep, the evil
DRM.&amp;nbsp; I jokingly responded with &amp;quot;DRM is a bad word isn&amp;#39;t
it?&amp;quot;&amp;nbsp; It is definitely reviled by most users, making a simple act of
copying a file from one computer to another a chore, and, it has been suggested, a
bit of misnomer given that it actually inhibits the rights of the user rather
than providing them with rights like the Bill of Rights.&amp;nbsp; Perhaps though,
we are just looking at it from one context; a large profit
driven conglomerate of global media corporations is putting certain conditions
on their content.&amp;nbsp; Restrictive conditions on their content to be
exact.&amp;nbsp; Does this suck from a user&amp;#39;s perspective - yes.&amp;nbsp; I hate DRM,
especially on the two eBooks I bought.&amp;nbsp; After discovering I could print 10
pages - ever - I stopped buying eBooks.&amp;nbsp; Sometimes you just need to print
out a section to take with you.
&lt;/p&gt;
&lt;p&gt;
However, what if DRM was used in another context?&amp;nbsp; Not by a corporation
but by a group of Traditional Owners wanting to protect their knowledge and
culture from exploitation and misuse.&amp;nbsp; There is a push for free open information and public data, but that comes with a cost.&amp;nbsp; By giving
information and putting it out there to say Google, you gave it to Google, and
it&amp;#39;s theirs no getting it back (extreme example warning).&amp;nbsp; This is a
system of power, so a group which has been marginalized by this system of power
for centuries might be a wee bit reluctant to just hand over their culture and
knowledge.&amp;nbsp; But what if the costs to archive the data is paid for by public funds?&amp;nbsp; Does that mean it is for the public?&amp;nbsp; The US is the only place I know where this arguments holds, definitely not in Australia or the UK.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
Soooooo....Is DRM good in some contexts and bad in others?&amp;nbsp; Don&amp;#39;t
know.&amp;nbsp; I think it is an interesting suggestion, and will pursue it.&amp;nbsp;
I also think it is worth looking at DRM in potential positive contexts. &amp;nbsp; 
&lt;/p&gt;</description><pubDate>Wed, 08 Jul 2009 22:32:00 -0700</pubDate><a10:updated>2010-10-27T13:09:54-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/77"><guid isPermaLink="false">77</guid><title>SQLite and AIR</title><description>&lt;p&gt;
I&amp;#39;ve mentioned that I was curious about using AIR in conjunction with Spatialite in a previous post.&amp;nbsp; Unfortunately this isn&amp;#39;t possible, but you can use the overarching SQLite database in AIR to create a compact database for your applications.&amp;nbsp; There are a number of good examples out there on how to connect to SQLite in AIR.&amp;nbsp; Two things that took me a little while to figure out:&amp;nbsp; 1)&amp;nbsp; SQLite is not available in just FLEX, you need AIR, 2)&amp;nbsp; What is the SQLResult?&amp;nbsp; Most of the tutorials just stop with telling you how to send a query, parameterized or otherwise, and set up an event listener to catch the result.&amp;nbsp; But what is the result?
&lt;/p&gt;
&lt;p&gt;
The result comes as part of a class called SQLResult.&amp;nbsp; The table that you requested from the database is stored in the Data property of the SQLResult class, SQLResult.Data.&amp;nbsp; This is actually just an Array.&amp;nbsp; BUT!&amp;nbsp; That array stores an object, where the properties of that object are the Column names (or aliases) and the values returned by that property is the row value.&amp;nbsp; So what does that mean?&amp;nbsp; Here is an example, presuming you&amp;#39;ve gotten as far as setting all this up.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; var q:SQLStatement = new SQLStatement;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; q.sqlConnection = yourConnection;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; q..text = &amp;quot;SELECT Venue.Venue_Name AS Name, DATE(revenue_data.Rev_Date) AS Date FROM revenue_data INNER JOIN Venue ON revenue_data.Venue_ID = Venue.Venue_ID&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; q.addEventListener(SQLEvent.RESULT, onResult);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; q.addEventListener(SQLErrorEvent.ERROR, onError);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; q.execute();
&lt;/p&gt;
&lt;p&gt;
In this example we are using a SELECT statement and an INNER JOIN to return the name and date from these two tables.&amp;nbsp; I&amp;#39;ve also assigned aliases to the columns, which I&amp;#39;ll explain why in a minute.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; var result:SQLResult = SQLStatement(e.target).getResult();
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  var darray:Array = results.Data;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp; trace(String(darray[0].Name));
&lt;/p&gt;
&lt;p&gt;
In this next part I&amp;#39;ve gottent he results and assigned the data to an Array.&amp;nbsp; Then with a simple trace I&amp;#39;ve pulled the first Row (0) with the Column name (Name).&amp;nbsp; That provides me with direct access to the data.&amp;nbsp; Now you might actually want to look at this in a Table.&amp;nbsp; So you can use a DataGrid component for this, and simply set the DataProvider property equal to your Array, darray in the above example.&amp;nbsp; No problemo.&amp;nbsp; The problem I had was setting up the columns, and my work around was to change the Column names to an alias in the query, that way I could simplify the process putting more emphasis on building the query.&amp;nbsp; This really is pretty inelegant in my opinion...it would be nice to be able to retrieve the schema of the query results.&amp;nbsp; One other problem I have not had a work around for at the moment is the column order in the datagrid is automatically set up in alphabetic order not the returned order of the query.&amp;nbsp; I&amp;#39;ll have to look into that one further. 
&lt;/p&gt;</description><pubDate>Wed, 08 Jul 2009 20:28:00 -0700</pubDate><a10:updated>2010-10-27T13:05:14-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/47"><guid isPermaLink="false">47</guid><title>Garmin Frustrations</title><description>&lt;p&gt;
First the good news.&amp;nbsp; I am quite pleased that this blog was referenced by Kelso&amp;#39;s Corner, a very enjoyable cartography oriented blog, not &lt;a href="http://kelsocartography.com/blog/?p=2469"&gt;once&lt;/a&gt; but&lt;a href="http://kelsocartography.com/blog/?p=2441"&gt; twice&lt;/a&gt;.&amp;nbsp; Unfortunately, the flow map entry on my blog wasn&amp;#39;t particularly interesting.&amp;nbsp; However, it did get me off my duff and start to look at &amp;quot;porting&amp;quot; the idea to something that works with shapefiles.&amp;nbsp; I&amp;#39;ve gotten as far as creating the hierarchical clustering, then I&amp;#39;m a bit lost in how the paths are drawn based on these clusters.&amp;nbsp; Plus I&amp;#39;m using it as an excuse to study up on c# which has become much easier syntax wise since I&amp;#39;ve learned a lot about AS3.&amp;nbsp; I&amp;#39;m no expert in any of the languages by any means.&amp;nbsp; Also, I might have a little problem in the hierarchical clustering too that arose when I tried it with some more complex data - all 50 US states.&amp;nbsp; Of course, I&amp;#39;ve been busy with paid stuff so I can&amp;#39;t really focus on this at the moment...now I&amp;#39;ll forget where I left off and then have to start over again :).
&lt;/p&gt;
&lt;p&gt;
Now for the real part of this blog.&amp;nbsp; I don&amp;#39;t work with GPS units too often.&amp;nbsp; Other than downloading data.&amp;nbsp; Well with the current project I&amp;#39;m working on, I will be doing some ESL GPS training (that&amp;#39;s English as a Second Language).&amp;nbsp; We purchased two Garmin 60CSx units through a US based colleague, and hence have very dodgy Australia data.&amp;nbsp; So I thought to myself, &amp;quot;No big deal, I&amp;#39;ll just use my own data.&amp;quot;&amp;nbsp; Phsssh, adding data to a Garmin GPS is a huge pain in the ass!&amp;nbsp; Here are the steps I went through to get the data into the Garmin GPS.&amp;nbsp; I took some of this from &lt;a href="http://freegeographytools.com/2007/adding-garmin-img-files-to-mapsource"&gt;site&lt;/a&gt;.&amp;nbsp; To do this required 4 separate&amp;nbsp;pieces of software - Mapsouce (comes with Garmin GPS), &lt;a href="http://www.globalmapper.com/"&gt;Global Mapper &lt;/a&gt;(I used version 9, which I have a license for),&amp;nbsp;&lt;a href="http://www.cgpsmapper.com/buy.htm"&gt;cGPSMapper&lt;/a&gt; (free edition), and finally &lt;a href="http://cypherman1.googlepages.com/"&gt;MapSetToolKit&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Step 1:&amp;nbsp; Make sure everything is installed on your computer.
&lt;/p&gt;
&lt;p&gt;
Step 2:&amp;nbsp; Open Global Mapper, load your data.&amp;nbsp; I used shapefiles, and changed the projection to WGS84.&amp;nbsp; To change the projection, you use the &lt;a href="http://www.globalmapper.com/helpv9/Help_Config.html#projection"&gt;configuration dialog&lt;/a&gt;.&amp;nbsp; I&amp;#39;m presuming some familiarity with Global Mapper.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
Step 3:&amp;nbsp; Make sure that each layer has a style/type associated with this.&amp;nbsp; Go to Tools--&amp;gt; Control Center (alt-c) select a layer, and then click Options.&amp;nbsp; Choose a type from the Classify Feature As drop down.&amp;nbsp; This is important, because you will get errors later saying that you have an unknown type = 0, and in the end breaking your installation of MapSource.
&lt;/p&gt;
&lt;p&gt;
Step 3 Alternate:&amp;nbsp; The alternate method is to click the Edit tool.&amp;nbsp; Select all the features for one layer (you can use the Control Center to turn them off) and then right-click Edit Selected Features.&amp;nbsp; In the dialog, under feature attributes, choose New.&amp;nbsp; In this dialog use MP_TYPE for the attribute name, and then under value you need to enter the HEX code for that type, e.g. 0x01.&amp;nbsp; You can find different HEX codes in the cGPSmapper manual (C:\Program Files\cGPSmapper\cGPSmapper-UsrMan-v02.4.4.pdf&amp;nbsp;&amp;nbsp;&amp;nbsp; if installed in default location, page 113, 111).&amp;nbsp; It&amp;#39;s much easier to use the previous other Step 3.
&lt;/p&gt;
&lt;p&gt;
Step 4:&amp;nbsp; In Global Mapper, File --&amp;gt; Export Vector Data -- Export Polish Map.&amp;nbsp; Choose a name, and region for export.&amp;nbsp; Click ok and you will be prompted for a file location.&amp;nbsp; I&amp;#39;ve been saving mine under C:\Garmin\prjfolder.
&lt;/p&gt;
&lt;p&gt;
Step 5:&amp;nbsp; Go to Start --&amp;gt; Run and enter cmd.&amp;nbsp; This should bring up a DOS prompt navigate to the cGPSmapper install folder.&amp;nbsp; cd c:\program files\cgpsmapper
&lt;/p&gt;
&lt;p&gt;
Step 6:&amp;nbsp; Type cgpsmapper.exe c:\Garmin\prjfolder\filename.mp -o c:\garmin\prjfolder\20090618.img
&lt;/p&gt;
&lt;p&gt;
Change the paths to reflect your file system.&amp;nbsp; The *.img filenmae needs 8 numeric characters.&amp;nbsp; I find using YEARMMDD format works best.
&lt;/p&gt;
&lt;p&gt;
Press return and wait till it is done processing.&amp;nbsp; If you see the unknown type error, follow step 3 - 6 till it produces no errors.
&lt;/p&gt;
&lt;p&gt;
Step 7:&amp;nbsp; Open the MapSetToolKit.exe from whereever you unzipped it.&amp;nbsp;&amp;nbsp;&amp;nbsp;Click Select IMG and navigate to c:\garmin\prjfolder\ and it should automatically find 20090618.img for you.&amp;nbsp; Click Add --&amp;gt; and it will add it to the right pane.&amp;nbsp; Click the elipse ... next to Mapsetdirectory and select c:\garmin\prjfolder\.&amp;nbsp; Give the mapset a name.&amp;nbsp; Under family ID enter 3 unique numerical digits.&amp;nbsp; Under cgpsmapper/cpreview folder, click the elipse ... and navigate to where the cgpsmapper.exe folder is (c:\program files\cgpsmapper\).&amp;nbsp; Check Install in Mapsource, and Blank Overview Maps.&amp;nbsp; Click Start.&amp;nbsp; It should say something like operation termined [sic], and ad to the list of Mapset installed.
&lt;/p&gt;
&lt;p&gt;
Step 8:&amp;nbsp; Plug in and turn on your GPS unit if you have not done so.&amp;nbsp; Start Mapsource.
&lt;/p&gt;
&lt;p&gt;
Step 9:&amp;nbsp; Go to View --&amp;gt; Switch To Product and pick your named mapset.&amp;nbsp; It should switch to this in the view.&amp;nbsp; Click the Map Tool button (looks like a polygon) and select the mapset.&amp;nbsp; Click the Send to Device button and follow the instructions.
&lt;/p&gt;
&lt;p&gt;
Step 10:&amp;nbsp; Assuming you are in the area, go outside and test it.&amp;nbsp; If you only see outline boxes but not the map, keep zooming in until you see the presumably more detailed map that you downloaded.
&lt;/p&gt;
&lt;p&gt;
It might in the end be cheaper and easier to just by something that does all this for you, if you don&amp;#39;t have a license of Global Mapper.&amp;nbsp; However, you will get much more use out of Global Mapper as a tool for loading different datasets and reprojecting or converting than you would with something specifically taylored for Garmin GPS mapsets.&amp;nbsp; That is if you are a GISer or cartographer or use spatial datasets a lot.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;Hope that helps in some way or another.&amp;nbsp; I partially put that here so that I can remember how I did it :).
&lt;/p&gt;</description><pubDate>Wed, 17 Jun 2009 20:07:00 -0700</pubDate><a10:updated>2010-10-27T12:43:50-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/89"><guid isPermaLink="false">89</guid><title>Spatialite</title><description>&lt;p&gt;
I&amp;#39;ve noticed more and more people talking about SQLite and in particular Spatialite.&amp;nbsp; This is typically surrounded by talk about the hopeful end of shapefiles as a defacto exchange format.&amp;nbsp; I suppose the success of shapefiles has mostly been because of the openess, so every proprietary GIS software was able to support it.&amp;nbsp; Now pretty much everything spatial is available in shapefiles.&amp;nbsp; In typical government fashion the U.S. Census Bureau is just now releasing their data as shapefiles instead of Tigerline files...that&amp;#39;s why it seems appropriate to move to another format now.&amp;nbsp; Is there any greater sign of the death of technology when a government takes it on board?&amp;nbsp; When I worked on the FEMA map modernization one of my greatest frustrations was that they required ESRI coverages to be submitted with the final product.&amp;nbsp; Not only is ESRI stopping support for coverages, it requires an ArcInfo license...and even then you have manually add the coverages toolbox.&amp;nbsp; Of course, if you want to try and edit a coverage you have to go back into ArcInfo workstation.&amp;nbsp; Anyhoo, that&amp;#39;s not relevant to this entry.&amp;nbsp; I decided to take a look at Spatialite and see what it was about.&amp;nbsp; First lesson learned - it&amp;#39;s spelled with one L.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
So what is the beauty of this format?&amp;nbsp; It doesn&amp;#39;t install ANYTHING. Even the gui interface can just be run from the exe file.&amp;nbsp; This makes it really really easy to get started.&amp;nbsp; So I created a simple spatialite db and imported some Open Street Map shapefiles which contained thousands of polygons and polylines to check out the stability.&amp;nbsp; I thought I&amp;#39;d start with some simple SQL commands and started with AREA for the polygon geometry.&amp;nbsp; Well this crashed the gui without any explanation.&amp;nbsp; So then I moved to IsValid (this uses the GEOS API) to see what was wrong with the polygon geometry, and this crashed the gui again.&amp;nbsp; I switched at this point to the commandline thinking the gui just couldn&amp;#39;t handle the amount of data I was using.&amp;nbsp; At least when the commandline came up with an error it told me what the error was and where it was stopping.&amp;nbsp; The first thing I discovered was I had a dozen or so polygons that were not closed (start and end point did not match).&amp;nbsp; I extracted these and moved them to another table using this select statement:
&lt;/p&gt;
&lt;p&gt;
CREATE TABLE buildings_err &lt;br /&gt;
AS SELECT * FROM buildings WHERE IsClosed(ExteriorRing(Geometry)) = 0&lt;br /&gt;
DELETE FROM buildings WHERE IsClosed(ExteriorRing(Geometry)) = 0
&lt;/p&gt;
&lt;p&gt;
After this it still would crash if I ran IsValid.&amp;nbsp; So I tried this Select statment to extract all the polygons that had less than or equal to three points creating it:
&lt;/p&gt;
&lt;p&gt;
INSERT INTO buildings_err SELECT * from buildings where NumPoints(ExteriorRing(Geometry)) &amp;lt;= 3;&lt;br /&gt;
DELETE from buildings where NumPoints(ExteriorRing(Geometry)) &amp;lt;= 3;
&lt;/p&gt;
&lt;p&gt;
Finally I then removed all the invalid polygons:
&lt;/p&gt;
&lt;p&gt;
INSERT INTO buildings_err SELECT * from buildings where IsValid(Geometry) &amp;lt;= 0;&lt;br /&gt;
DELETE from buildings where IsValid(Geometry) &amp;lt;= 0;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
And then ran an itnersect with another polygon table (cleaned that one up as well):
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;SELECT *, intersection(buildings.Geometry, natural.Geometry) FROM [buildings], [natural]
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;This hung up on me too.&amp;nbsp; I&amp;#39;m not sure where all the polygon errors were coming from, either the shapefile, or the import has issues.&amp;nbsp; The GEOS api seemed pretty sensitive to these errors as well.&amp;nbsp; So I gave up on trying after it crashed and moved on.&amp;nbsp; One thing I discovered is the geometry column, and thus the table, can only store one type of Geometry.&amp;nbsp; This extends to MULTI as well.&amp;nbsp; So you have to separate your POLYGONs from your MULTIPOLYGONS or I guess explode the multipolygons to polygons.&amp;nbsp; I think that might get confusing...Note the David in this&lt;a href="http://groups.google.com/group/spatialite-users/browse_thread/thread/785faeff1b1b0d6c/291eaf2e048f357e?lnk=gst&amp;amp;q=multipolygon#291eaf2e048f357e"&gt; google group&lt;/a&gt; is not me.
&lt;/p&gt;
&lt;p&gt;
Finally, after all this I thought to myself - &amp;quot;Hey wait a second, AIR uses a SQLite database!&amp;quot;&amp;nbsp; But the SQLite functionality is all built-in so you can&amp;#39;t swap dlls, and actionscript doesn&amp;#39;t reference external libraries unfortunately.&amp;nbsp; So I tried the handy built-in SQLite function load_extension, but this too is not apart of the AIR SQLite functionality!!&amp;nbsp; KAAAAAAAHHHHHNNNNNNN!!!!! &amp;nbsp; Sorry for the Star Trek reference.&amp;nbsp; So no go to use a Spatialite database with FLEX/AIR.&amp;nbsp; And it is sort of moot anyway because I don&amp;#39;t know any commercial GIS that fully supports Spatialite.&amp;nbsp; I think FME does...ESRI certainly doesn&amp;#39;t.&amp;nbsp; So thus was my foray into Spatialite.&amp;nbsp; Still think it is pretty cool, but I&amp;#39;m a visual person and need to see the data not just type in a few sql statements.
&lt;/p&gt;</description><pubDate>Fri, 15 May 2009 00:00:00 -0700</pubDate><a10:updated>2010-10-27T13:11:34-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/49"><guid isPermaLink="false">49</guid><title>Shapefiles, Actionscript 3.0, and Google Maps</title><description>&lt;p&gt;
&amp;nbsp;I&amp;#39;m working an Adobe AIR application and I wanted to be able to have the user select a shapefile, and then parse it to create a KML file.&amp;nbsp; I didn&amp;#39;t want to have the user be responsible for creating a KML file.&amp;nbsp; I thought I might try and crack the shapefile enigma since it is a well documented format, but that would have taken time and I suddenly realized I&amp;#39;m not actually a developer :).&amp;nbsp; Instead, I found this set of &lt;a href="http://code.google.com/p/vanrijkom-flashlibs/"&gt;Actionscript Classes&lt;/a&gt; to parse a shapefile in Flash.&amp;nbsp; Unfortunately, I didn&amp;#39;t find a very good tutorial on how to work with the classes.&amp;nbsp; The example is a little confusing (at least for me) and also uses a far file.&amp;nbsp; I&amp;#39;d never heard of far compressed files.&amp;nbsp; So I took the classes and created my own parser.&amp;nbsp; I thought I would post a tutorial on how to use these shapefile classes in conjunction with AIR and the Google Maps API for flash.&amp;nbsp; This technique would work with flex as well, I just didn&amp;#39;t want to have to write the code to upload a file.&amp;nbsp; I presume a few things with this.&amp;nbsp; The shapefile you are using for this should already have a geographic projection (e.g. latitude and longitude Geographic NAD 83).&amp;nbsp; In order to use the &lt;a href="http://code.google.com/apis/maps/documentation/flash/tutorial-flexbuilder.html#AIRDevelopment"&gt;Google Maps API with AIR&lt;/a&gt;, you need a URL with a key associated with it.&amp;nbsp; Below are two zipfiles available for download.&amp;nbsp; The testfile.zip is the shapefile I was using.&amp;nbsp; The vanrikom.zip is the downloaded actionscript classes from the Google Code repository.&amp;nbsp; I had trouble downloading the using an svn so I did it manually.&amp;nbsp; I&amp;#39;ll save you the time by making it available here...unless the original author asks me to remove them.&amp;nbsp; There are parts that I find confusing with the way the reader was set up.&amp;nbsp; For some reason polyline inherits from polygon.&amp;nbsp; Intuitively to me it should be the other way around...but like I said, I&amp;#39;m not a developer.
&lt;/p&gt;
&lt;p&gt;
This was all done using FlashDevelop and the Flex SDK 3.&amp;nbsp; There are 4 custom classes in addition to the mxml file.&amp;nbsp; Each are shown here. 
&lt;/p&gt;
&lt;p&gt;
This is what the Main.mxml file looks like.&amp;nbsp; It should be relatively straight forward if you are familiar with mxml.&amp;nbsp; The map component comes from the Google Maps API swc that you should download from the above link.&amp;nbsp; I have added comments so hopefully the code is explanatory.&amp;nbsp; I apologize for how crappy this looks, but the formatting doesn&amp;#39;t work to well with .net blog engine. 
&lt;/p&gt;
&lt;p&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;mx:WindowedApplication xmlns:mx=&amp;quot;http://www.adobe.com/2006/mxml&amp;quot; xmlns:maps=&amp;quot;com.google.maps.*&amp;quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;mx:Script&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;![CDATA[&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; import com.google.maps.LatLng;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; import com.google.maps.LatLngBounds;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; import com.google.maps.Map;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; import com.google.maps.MapEvent;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; import com.google.maps.MapType;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; import org.bsw.flex.shapeParse;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; import org.bsw.flex.polylineClass;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; import com.google.maps.overlays.Polyline;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; private function onMapReady(event:Event):void {
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //This is a custom class that parses the shapefile. The constructor takes three arguments.&amp;nbsp; The path, the filename, and the name of a field
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; //I don&amp;#39;t cover attributes in this example but show how to access them 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var parser:shapeParse = new shapeParse(&amp;quot;C:\\Workspace&amp;quot;, &amp;quot;testfile&amp;quot;, &amp;quot;Id&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (parser.pc != null)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p&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; //I&amp;#39;ll explain this one later
&lt;/p&gt;
&lt;p&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; var bnds:LatLngBounds = parser.pc.getBounds.latlongBounds;&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; 
&lt;/p&gt;
&lt;p&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; //I use the bounds of the shapefile to set the extents and the zoom
&lt;/p&gt;
&lt;p&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; this.map.setCenter(bnds.getCenter());&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; this.map.setZoom(map.getBoundsZoomLevel(bnds));&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; this.map.enableScrollWheelZoom();&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; this.map.continuousZoomEnabled();&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; &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; for (var i:int = 0; i &amp;lt; parser.pc.length; i++)&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; {&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; var p:polylineClass = parser.pc.getPolylineAtIndex(i);&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; var gp:Polyline = p.gmapPolyline();&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; map.addOverlay(gp);&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; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ]]&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/mx:Script&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;mx:Canvas width=&amp;quot;100%&amp;quot; height=&amp;quot;100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;maps:Map id=&amp;quot;map&amp;quot; mapevent_mapready=&amp;quot;onMapReady(event)&amp;quot; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; width=&amp;quot;100%&amp;quot; height=&amp;quot;100%&amp;quot; key=&amp;quot;your key&amp;quot; url=&amp;quot;your url&amp;quot;/&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/mx:Canvas&amp;gt;&lt;br /&gt;
&amp;lt;/mx:WindowedApplication&amp;gt;
&lt;/p&gt;
&lt;p&gt;
shapeParse.as
&lt;/p&gt;
&lt;p&gt;
package org.bsw.flex &lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flash.geom.Point;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flash.utils.ByteArray;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import mx.collections.ArrayCollection;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; //be sure to import these&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import org.vanrijkom.shp.*;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import org.vanrijkom.dbf.*;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; //I think these are only available in AIR&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flash.filesystem.File;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flash.filesystem.FileMode;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flash.filesystem.FileStream;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; /**&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;* ...&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;* @author dsl&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*/&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public class shapeParse &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; private var filePath:String;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; private var fileName:String;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; private var idFieldName:String;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //Custom classes&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public var pc:polylineCollection = null;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public var shapeBounds:boundingBox;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public function shapeParse(filePath:String, fileName:String, idFieldName:String) &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.fileName = fileName;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.filePath = filePath;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.idFieldName = idFieldName;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; init();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; private function init():void&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //get access to the two files *.shp and *.dbf&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var shpfile:File = File.desktopDirectory.resolvePath(filePath + &amp;quot;\\&amp;quot; + fileName + &amp;quot;.shp&amp;quot;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var dbffile:File = File.desktopDirectory.resolvePath(filePath + &amp;quot;\\&amp;quot; + fileName + &amp;quot;.dbf&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var shpFS:FileStream = new FileStream;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var dbfFS:FileStream = new FileStream;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //this is the key to using the shapefile classes.&amp;nbsp; You need a bytearray to send to the &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //shpheader class&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var shpBA:ByteArray = new ByteArray;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var dbfBA:ByteArray = new ByteArray;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; try {&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; shpFS.open(shpfile, FileMode.READ);&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; dbfFS.open(dbffile, FileMode.READ);&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; shpFS.readBytes(shpBA);&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; dbfFS.readBytes(dbfBA);&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; dbfFS.close();&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; shpFS.close();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }catch (e:Error)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&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; trace(e.message);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //Shapeheader has the base information&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var shp:ShpHeader = new ShpHeader(shpBA);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var dbf:DbfHeader = new DbfHeader(dbfBA);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //Check what type of shapefile it is.&amp;nbsp; I only worked with polylines.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (shp.shapeType == ShpType.SHAPE_POLYLINE);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&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; //custom class&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; pc = new polylineCollection();&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; &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; //the boundsXY property for the shapeheader class does not seem to function properly&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; //shapeBounds = new boundingBox(shp.boundsXY);&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; &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; //To good all the records in the shapefile you need an array, and then use the ShpTools class&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; var polyArray:Array = ShpTools.readRecords(shpBA);&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; //loop through the records&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; for (var iPoly:int = 0; iPoly &amp;lt; polyArray.length; iPoly++)&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; {&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; //custom polylineclass&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; var internalPoly:polylineClass = new polylineClass&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; //from the vanrijkom classes, create a shpPolyline from the array item&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; var poly:ShpPolyline = polyArray[iPoly].shape as ShpPolyline;&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; //the polyline contains an array of &amp;quot;rings&amp;quot;&amp;nbsp; These are the actual polylines.&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; var ring:Array = poly.rings;&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; //loop through the rings&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; for (var iRing:int = 0; iRing &amp;lt; ring.length; iRing++)&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; {&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;&amp;nbsp;&amp;nbsp; //get the point collection from the rings &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;&amp;nbsp;&amp;nbsp; //(e.g. all the points that make up the line &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;&amp;nbsp;&amp;nbsp; //segments that make up the polyline)&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;&amp;nbsp;&amp;nbsp; var pntArray:Array = ring[iRing];&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;&amp;nbsp;&amp;nbsp; &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;&amp;nbsp;&amp;nbsp; if (pntArray != null)&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;&amp;nbsp;&amp;nbsp; {&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;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //Loop through to get all the points&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;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for (var j:int = 0; j &amp;lt; pntArray.length; j++)&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;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&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;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //Access shpPoint&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;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var pnt:ShpPoint = ShpPoint(pntArray[j]);&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;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //trace(&amp;quot;X &amp;quot; + pnt.x + &amp;quot; Y &amp;quot; + pnt.y);&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;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //Add the points to polylineClass&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;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; internalPoly.addPoint(new Point(pnt.x, pnt.y));&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;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&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;&amp;nbsp;&amp;nbsp; }&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; }&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; pc.addPolyline(internalPoly);&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; //This is how to access the attributes.&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; var dr:DbfRecord = DbfTools.getRecord(dbfBA, dbf, iPoly);&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; var xsID:String = dr.values[idFieldName];&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; trace(xsID);&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; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //place holders to work with points&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (shp.shapeType == ShpType.SHAPE_POINT)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&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; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //place holder to work with polygons&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (shp.shapeType == ShpType.SHAPE_POLYGON)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&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; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
}&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
polylineClass.as
&lt;/p&gt;
&lt;p&gt;
package org.bsw.flex &lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import com.google.maps.LatLng;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import com.google.maps.overlays.Polyline;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import com.google.maps.overlays.PolylineOptions;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flash.geom.Point&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flash.geom.Rectangle;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flash.sampler.NewObjectSample;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import mx.collections.ArrayCollection;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; /**&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;* ...&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;* @author ACE&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*/&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public class polylineClass &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //collection of points that make the polyline&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; private var pointColl:ArrayCollection;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public function polylineClass() &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pointColl = new ArrayCollection;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //add points to the collection&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public function addPoint(pnt:Point):void&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pointColl.addItem(pnt);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //start point of the polyline&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public function get StartPoint():Point&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return Point(pointColl[0]);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //endpoint of the line&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public function get EndPoint():Point&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return Point(pointColl[pointColl.length - 1]);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public function get Length():Number&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var runningTotal:Number = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for (var i:int; i &amp;lt; pointColl.length; i++)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&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; var pnt1:Point = pointColl[i];&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; var pnt2:Point = pointColl[i + 1];&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; var dX:Number = pnt1.x - pnt2.x;&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; var dY:Number = pnt1.y - pnt2.y;&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; var dist:Number = Math.sqrt((dX * dX) + (dY * dY))&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; runningTotal += dist;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return runningTotal;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //this returns a polyline that works with the google maps api&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public function gmapPolyline(pOpt:PolylineOptions = null):Polyline&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //default polyline style...setup through polylineoptions&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (pOpt == null)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&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; pOpt = new PolylineOptions({&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; strokeStyle: {&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;&amp;nbsp;&amp;nbsp; thickness: 2,&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;&amp;nbsp;&amp;nbsp; color: 0x123456,&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;&amp;nbsp;&amp;nbsp; alpha: 1,&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;&amp;nbsp;&amp;nbsp; pixelHinting: true&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; }&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; });&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //a polyline uses an array of LatLng (from google maps api)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var latlngArray:Array = new Array;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for (var i:int; i &amp;lt; pointColl.length; i++)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&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; var pnt:Point = Point(pointColl[i]);&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; var ll:LatLng = new LatLng(pnt.y, pnt.x);&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; latlngArray.push(ll);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //create and return the polyline (gmaps) type&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var poly:Polyline = new Polyline(latlngArray, pOpt);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return poly;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //Found the boundxy from vanrijkom classes was inaccurate, so I created my own bounding box&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //this creates the bounding box&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public function get Bounds():boundingBox&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var right:Number = -(Math.pow(10,10));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var left:Number = Math.pow(10,10);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var top:Number = -(Math.pow(10,10));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var bottom:Number = Math.pow(10,10);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for (var i:int; i &amp;lt; pointColl.length; i++)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&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; var pnt:Point = Point(pointColl[i]);&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; if (pnt.x &amp;lt; left)&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; {&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; left = pnt.x;&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; }&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; if (pnt.y &amp;lt; bottom)&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; {&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; bottom = pnt.y;&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; }&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; if (pnt.y &amp;gt; top)&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; {&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; top = pnt.y;&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; }&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; if (pnt.x &amp;gt; right)&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; {&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; right = pnt.x;&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; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var bnds:boundingBox = new boundingBox(left, right, top, bottom)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return bnds;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
} 
&lt;/p&gt;
&lt;p&gt;
polylinecollection.as
&lt;/p&gt;
&lt;p&gt;
package org.bsw.flex &lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import mx.collections.ArrayCollection;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flash.geom.Rectangle;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; /**&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;* ...&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;* @author dsl&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*/&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public class polylineCollection &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //stores a collection of PolylineClasses &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; private var coll:ArrayCollection;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public function polylineCollection() &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; coll = new ArrayCollection;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public function addPolyline(poly:polylineClass):void&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; coll.addItem(poly);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public function getPolylineAtIndex(i:int):polylineClass&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return polylineClass(coll[i]);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public function get length():Number&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return coll.length;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //calculates the bounds for all the polylines in the collection&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public function get getBounds():boundingBox&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var right:Number = -(Math.pow(10,10));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var left:Number = Math.pow(10,10);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var top:Number = -(Math.pow(10,10));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var bottom:Number = Math.pow(10, 10);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for (var i:int = 0; i &amp;lt; coll.length; i++)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&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; var cP:polylineClass = polylineClass(coll[i]);&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; var bnds:boundingBox = cP.Bounds;&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; if (bnds.left &amp;lt; left)&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; {&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; left = bnds.left;&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; }&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; if (bnds.bottom &amp;lt; bottom)&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; {&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; bottom = bnds.bottom;&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; }&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; if (bnds.top &amp;gt; top)&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; {&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; top = bnds.top;&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; }&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; if (bnds.right &amp;gt; right)&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; {&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; right = bnds.right;&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; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //var rect:Rectangle = new Rectangle(left, top, left - right, top - bottom)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var newbnds:boundingBox = new boundingBox(left, right, top, bottom)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return newbnds;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
}
&lt;/p&gt;
&lt;p&gt;
boundingbox.as 
&lt;/p&gt;
&lt;p&gt;
package org.bsw.flex &lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import com.google.maps.LatLngBounds;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import flash.geom.Rectangle;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; import com.google.maps.LatLng;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; /**&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;* ...&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;* @author dsl&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;* */&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public class boundingBox &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public var left:Number = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public var right:Number = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public var top:Number = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public var bottom:Number = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //Apparently there is no constructor overloads for AS3&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public function boundingBox(left:Number, right:Number, top:Number, bottom:Number) &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.left = left;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.right = right;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.top = top;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.bottom = bottom;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //public function boundingBox(rect:Rectangle) &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //this.left = rect.left&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //this.right = rect.right;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //this.top = rect.top;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //this.bottom = rect.bottom;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //returns a LatLngBounds from the google maps api&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public function get latlongBounds():LatLngBounds&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var bounds:LatLngBounds = new LatLngBounds(&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; new LatLng(bottom, left),&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; new LatLng(top, right));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return bounds;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
} 
&lt;/p&gt;
&lt;p&gt;
Here is the flashdevelop project: 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="/blog/file.axd?file=2009%2f4%2fShapeReaderAIRTest.zip"&gt;ShapeReaderAIRTest.zip (936.60 kb)&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="/blog/file.axd?file=2009%2f4%2fvanrijkom.zip"&gt;vanrijkom.zip (17.38 kb)&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="/blog/file.axd?file=2009%2f4%2ftestfile.zip"&gt;testfile.zip (1.33 kb)&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
This is what it should look like.
&lt;/p&gt;
&lt;img src="/Blog/GetFile/29-04-2009+10-49-27+PM.jpg" alt="" width="493" height="386" /&gt;
&lt;p&gt;
&lt;a href="/blog/file.axd?file=2009%2f4%2fShapeReaderAIRTest.zip"&gt;&lt;br /&gt;
&lt;/a&gt;
&lt;/p&gt;</description><pubDate>Wed, 29 Apr 2009 05:10:00 -0700</pubDate><a10:updated>2010-10-27T12:45:30-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/21"><guid isPermaLink="false">21</guid><title>Flex Label Component Rotation and TextField Rotation</title><description>&lt;p&gt;
I have had some frustrations trying to get a label to rotate 90 degrees in Flex, both as an mxml component and in Actionscript.&amp;nbsp; The key to this problem has to do with embedding fonts.&amp;nbsp; The easiest way to embed a font in flex is to use a style component.&amp;nbsp;
&lt;/p&gt;
&lt;br /&gt;
&lt;code&gt;
&amp;lt;mx:Style&amp;gt; &lt;br /&gt;
@font-face { &lt;br /&gt;
src:local(&amp;quot;Times New Roman&amp;quot;);&lt;br /&gt;
fontFamily: myTNR;&lt;br /&gt;
advancedAntiAliasing: true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/mx:Style&amp;gt;&lt;br /&gt;
&lt;/code&gt;
&lt;br /&gt;
&lt;p&gt;
The style component is essentially CSS, so you can store the style.&amp;nbsp; Now when you add a label component to your mxml then you can set the fontFamily property equal to myTNR.
&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;
&amp;nbsp;&amp;lt;mx:Label text=&amp;quot;Label&amp;quot; rotation=&amp;quot;90&amp;quot; fontFamily=&amp;quot;myTNR&amp;quot;/&amp;gt;&amp;nbsp;&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
What happens though when you are working with an Actionscript class and not with an mxml file?&amp;nbsp; In your main mxml file, add the same style component.&amp;nbsp; In your Actionscript class add a variable before your label variable of the type TextFormat.
&lt;/p&gt;
&lt;code&gt;
var fmt:TextFormat = new TextFormat;&lt;br /&gt;
fmt.font = &amp;quot;myTNR&amp;quot;;&amp;nbsp;&lt;br /&gt;
fmt.size = 11;&amp;nbsp;&lt;br /&gt;
//This should be true&amp;nbsp; if it worked.&lt;br /&gt;
trace(Application.application.systemManager.isFontFaceEmbedded(fmt);&lt;br /&gt;
 
var lbl:Label = new TextField; //using a textfield variable&lt;br /&gt;
lbl.defaultTextFormat = fmt;&lt;br /&gt;
lbl.embedFonts = true;&lt;br /&gt;
lbl.text = &amp;quot;some text&amp;quot;;&amp;nbsp;&lt;br /&gt;
lbl.x = 0;&lt;br /&gt;
lbl.y = 0;&amp;nbsp;&lt;br /&gt;
//add the textfield as a child to some component&amp;nbsp;&lt;br /&gt;
addChild(lbl);&lt;br /&gt;
//then rotate&amp;nbsp;&lt;br /&gt;
lable.rotation = -90;&lt;br /&gt;
&lt;/code&gt;
&lt;p&gt;
There are other ways to embed fonts, but I found this to be the easiest way.
&lt;/p&gt;</description><pubDate>Sat, 25 Apr 2009 17:43:00 -0700</pubDate><a10:updated>2009-11-24T22:56:50-08:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/102"><guid isPermaLink="false">102</guid><title>ZXing</title><description>&lt;p&gt;
Made a simple QRCode reader in .Net the other day.&amp;nbsp; I used the Open Source &lt;a href="http://code.google.com/p/zxing/"&gt;ZXing&lt;/a&gt; barcode processing library.&amp;nbsp; You need to build the C# code, which was easy enough with C# express 2008, then add the dll as a reference to your project.&amp;nbsp; This code is in vb2008.&amp;nbsp; I created a simple QR Barcode using the &lt;a href="http://zxing.appspot.com/generator/"&gt;ZXing tool.&lt;/a&gt;&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
&amp;#39;Need to reference the System.Drawing assembly from .Net 2.0 if you are working with VB 2008 .Net 3.5&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Imports com.google.zxing&lt;br /&gt;
Imports System.Drawing.Bitmap&lt;br /&gt;
Imports System.Drawing&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Class Window1&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Try&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; Dim re As Reader&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; re = New qrcode.QRCodeReader&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;#39;Created a new qrcode reader... &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;Created a bitmap from the QR code download 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim Img As New Bitmap(&amp;quot;C:\workspace\geochart.png&amp;quot;) &amp;#39;location where I saved the image
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;#39;In XAML I have an image object named imgQR so I can see it.&lt;br /&gt;
 
&lt;/p&gt;
&lt;p&gt;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; imgQR.Source = New System.Windows.Media.Imaging.BitmapImage(New Uri(&amp;quot;c:\workspace\geochart.png&amp;quot;))
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim bufimg As com.google.zxing.client.j2se.BufferedImageMonochromeBitmapSource &amp;#39;not sure what this does&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; bufimg = New client.j2se.BufferedImageMonochromeBitmapSource(Img, False)&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; Dim res As com.google.zxing.Result = re.decode(bufimg)&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tb1.Text = res.getText() &amp;#39;raw text&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Catch ex As Exception&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; MessageBox.Show(ex.ToString)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Try&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; End Sub&lt;br /&gt;
End Class 
&lt;/p&gt;</description><pubDate>Tue, 07 Apr 2009 22:03:00 -0700</pubDate><a10:updated>2010-10-27T13:20:17-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/52"><guid isPermaLink="false">52</guid><title>Crowdsourcing</title><description>I would have probably given up this topic by now, but I was listening to the excellent &lt;a href="http://www.bbc.co.uk/programmes/p002mbt8"&gt;Digital Planet&lt;/a&gt; the other day when it came up again.&amp;nbsp; It was an interesting take on it.&amp;nbsp; They are using volunteers (&amp;quot;non-experts&amp;quot;) to classify and organize the hundreds of thousands of images of galaxies produced by the Hubble telescope (or others).&amp;nbsp; The organizer was originally worried that the experts would challenge the results, but he found that the volunteers actually worked better than an expert.&amp;nbsp; This was because the volunteers did not approach the problem with the same pre-conceived notions that an expert would.&amp;nbsp; This happened to coincide with something I was reading, where the author explained why philosophy has a fixation with jargon and creating new words.&amp;nbsp; Essentially it is the same, by using new words it allows the reader to step back and not approach the problem with all their pre-conceived notions.&amp;nbsp; I can appreciate this.&amp;nbsp; Just thought I would share.</description><pubDate>Tue, 07 Apr 2009 21:14:00 -0700</pubDate><a10:updated>2010-10-27T12:52:25-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/41"><guid isPermaLink="false">41</guid><title>AAG Wrapup - Some more thoughts</title><description>&lt;p&gt;
I was thinking about this &amp;quot;digital divide&amp;quot;* between the geoweb community and the geography academic community, and remembered the video I watched about the Rocky Mountain News Closing.&amp;nbsp; The journalists being interviewed made the comment that people cannot trust the blogs (I think they were referring to mine specifically) because we don&amp;#39;t know where the information is coming from.&amp;nbsp; Basically criticising the accuracy of their information, and praising newspapers for their rigorous ethics.&amp;nbsp; When I saw/heard this, my immediate thought turned towards Hearst and the Spanish American War when he fabricated stories to turn the American people against the Spanish in Cuba.&amp;nbsp; Hmmm, this all sounds familiar.&amp;nbsp; Anyway, these are the same criticisms that Geographers have laid against the Geoweb and Volunteered Geographic Information - accuracy!&amp;nbsp; Well anyone who worked with U.S. Census data prior to their accuracy initiative knows all about poor accuracy.&amp;nbsp; This was something Dr. Goodchild touched on in his plenary; metadata is the link because even if the data is inaccurate it is documented inaccuracy unlike (some) Volunteered Geographic Information.&amp;nbsp; Not entirely sure where I was going with this...On a side note Dr. Mordechai Haklay made an interesting point/observation during his presentation.&amp;nbsp; He said that most blogs comment and reference media sources such as newspapers, not really creating their own information.&amp;nbsp; Of course I&amp;#39;ve simplified and paraphrased this, but I thought that was an interesting observation.&amp;nbsp; It seems to create a conundrum for blogs then, as newspapers file for bankruptcy and go to the wayside how will blogs get their information? 
&lt;/p&gt;
&lt;p&gt;
One other thing, can we as a group (Geographers and the Geoweb) pick a single name and stick with it - Geoweb, Neogeography Volunteered Geographic Information, Crowdsourced Geographic Information...etc.&amp;nbsp; All this debate over naming is getting out of hand...Personally I like Neogeography (and Crowdsourced GI) because I think it pushes Geography to re-examine its priorities.
&lt;/p&gt;
&lt;p&gt;
Informal Poll:&amp;nbsp; The words I heard most at the AAG conference (obviously biased towards the sessions I attended, and has no valid statistical basis)
&lt;/p&gt;
&lt;p&gt;
Google Earth
&lt;/p&gt;
&lt;p&gt;
Space
&lt;/p&gt;
&lt;p&gt;
Spatial&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
*Note:&amp;nbsp; The actual digital divide refers to the division between the internet haves and have nots (e.g. who has access to the internet).&amp;nbsp;
&lt;/p&gt;</description><pubDate>Wed, 01 Apr 2009 16:30:00 -0700</pubDate><a10:updated>2010-10-27T12:40:43-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/36"><guid isPermaLink="false">36</guid><title>AAG Wrapup (1?)</title><description>&lt;p&gt;
Back from Las Vegas.&amp;nbsp; The conference was really enjoyable - intellectually stimulating and intimidating at the same time.&amp;nbsp; My presentation went well, even though no one really attended.&amp;nbsp; So I pretty much gave the presentation to the other 4 presenters &lt;img src="/blog/editors/tiny_mce/plugins/emotions/images/smiley-smile.gif" border="0" alt="Smile" title="Smile" /&gt;.&amp;nbsp; Mine was on the first day in the first session block, so unfortunately I missed out on those sessions.&amp;nbsp; Some of the sessions I went to were really interesting, and some were not so, and I wish I had attended some others, but overall it was good.
&lt;/p&gt;
&lt;p&gt;
The last session I attended was &amp;quot;Is Google Good For Geography?&amp;quot;&amp;nbsp; This was on the last day on the last session block, and I think this was missed placed.&amp;nbsp; It would have generated more of a discussion afterwards had it been placed on Monday or Tuesday.&amp;nbsp; There were some heavy hitters there including Michael Goodchild, of which I&amp;#39;m sure whomever reads this blog has read one of his books.&amp;nbsp; I liked that they included a voice from the industry as well - &lt;a href="http://blog.fortiusone.com/"&gt;Sean Gorman&lt;/a&gt;. Overall I agree with most of his presentation and particularly liked his challenging the session title questioning if there had ever been a session called &amp;quot;Is ESRI Good for Geography?&amp;quot;&amp;nbsp; Also, I liked that he said &amp;quot;Google does not equal the Geoweb.&amp;quot;&amp;nbsp; I think there are a couple of things I&amp;#39;d like to point out - Geography does not equal GIS (and I wish I had attended this &lt;a href="http://digitalurban.blogspot.com/2009/03/thoughts-reports-and-rambles-from-aag_25.html"&gt;session&lt;/a&gt;); this seems to be overlooked by the Geoweb community.&amp;nbsp; I didn&amp;#39;t like Gorman&amp;#39;s twitter comments about some of the other presenters - &amp;quot;&lt;span class="status-body"&gt;&lt;span class="entry-content"&gt;Ahh yes the critical theory conspiracy theorists have arrived - the tyranical [sic] majority in a dystopian algorithmic space&amp;quot; and &amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class="status-body"&gt;&lt;span class="entry-content"&gt;Wondering if he has ever written an algorithm guessing if he did it did not go well.&amp;quot;&amp;nbsp; Same question could be asked of Gorman - has he ever read any Derrida, Foucault, or other critical theorists (at least beyond their Wikipedia page).&amp;nbsp; This is a weird backlash against academics...perhaps some sort of criticism of intellectual elitism (which I do share at times) ironically coming from the technorati elite?&amp;nbsp; On the other hand, academics have been critical of the GeoWeb community, so defensiveness would seem natural.&amp;nbsp; I am also a bit wary how loosely the term democratization was thrown around in his presentation (amongst others - including Dr. Goodchild&amp;#39;s plenary).&amp;nbsp; The Internet is not a democratic space.&amp;nbsp; I live in Australia, a western country with the infrastructure for Internet usage.&amp;nbsp; Yet marginalized groups in this country don&amp;#39;t even have access to electricity let alone the capability of mapping their spaces through the so-called egalitarian Open-Street Map.&amp;nbsp; Isn&amp;#39;t this just a form of colonial place naming by rich (white?) westerners?&amp;nbsp; Ok, I&amp;#39;ll get off my soap-box.&amp;nbsp; In his &lt;a href="http://blog.fortiusone.com/2009/03/31/notes-from-the-aag-is-google-good-for-geography-is-microsoft-better-for-geography/"&gt;blog post&lt;/a&gt; Gorman quotes Michael Goodchild&amp;#39;s closing discussions about next year having a &amp;quot;Is Microsoft Better for Geography?&amp;quot; session.&amp;nbsp; I think he takes this out of context, having attended the session I thought Dr. Goodchild&amp;#39;s statement was toungue and cheek and was actually supporting Gorman&amp;#39;s comments about singling out a particular organisation.&amp;nbsp; Overall I agree with what &lt;a href="http://www.thetimoneygroup.com/"&gt;Brian Timmoney&lt;/a&gt; commented on Gorman&amp;#39;s blog entry - that academic Geography is out of touch and too slow to adapting to the changes in the Geoweb.&amp;nbsp; More Geographers need to start blogs, and open source academic journals to adapt to these changes.&amp;nbsp; This disconnect is evident when searching for Neogeography and Geoweb in top tier journals like Transactions of the Institute of British Geographers and Progress in Human Geography.&amp;nbsp; The excruciatingly slow review process is partly to blame.&amp;nbsp; I question the AAG as well - Why are these sessions not recorded and videos available through their website?&amp;nbsp; I also agree with Timmoney&amp;#39;s comments about GIS education at Universities, in particular spatial databases.&amp;nbsp; I would add to the list a lack of fundamental programming/scripting skills.&amp;nbsp; I&amp;#39;ve said this to my former GIS professor.&amp;nbsp; When you look through GIS textbooks (even those from ESRI) rarely do any of them discuss or show any practical examples on how to run a spatial query in a spatial database, or create a simple Python script.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;I think my favorite session that I attended was entitled:&amp;nbsp; Virtual Learning Environments and Geographic Education.&amp;nbsp; Dr. Michael N. DeMers gave a presentation on how he is using Second Life to instruct GIS students in theoretical topics such as map projections and topology.&amp;nbsp; He said that the students perform better on the tests.&amp;nbsp; L Jesse Rouse of http://veryspatial.com/ fame, gave a presentation on constructing virtual worlds using Microsoft&amp;#39;s XNA framework.&amp;nbsp; This is the type of stuff I remember hearing about in Junior high school when they talked about virtual reality in the classrooms taking students into history.&amp;nbsp; The session concluded with Dr. Nicholas Hedley on Mixed Realites.&amp;nbsp; I have to say I really really prefer the term Mixed Realities to Augmented Reality.&amp;nbsp; Dr. Hedley was an excellent presenter and demonstrated some use of Mixed Realities using a TIN overlaid on the &amp;quot;real&amp;quot; landscape while out on the field.&amp;nbsp; Pretty cool.&amp;nbsp; This lead me to find a few tools to create mixed reality applications - FLARToolkit (ActionScript) and ARToolkit (C++).&amp;nbsp; Haven&amp;#39;t tried them out yet, but if you do a search you&amp;#39;ll find them.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;I might post more about the conference as I gather my thoughts. 
&lt;/p&gt;</description><pubDate>Tue, 31 Mar 2009 22:25:00 -0700</pubDate><a10:updated>2010-10-27T12:38:16-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/44"><guid isPermaLink="false">44</guid><title>Service Areas</title><description>&lt;p&gt;
Back in Colorado for the week.&amp;nbsp; Then headed to the AAG Conference in Las Vegas next week.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;Before I left, I needed to create some Service Areas using Network Analyst.&amp;nbsp; It didn&amp;#39;t need to be exact but more of a visual example.&amp;nbsp; I started by calculating the length of each road segment using the geometry calculator.&amp;nbsp; Then I assigned average speeds to each type of road (e.g. 30 kmh for a 4wd road).&amp;nbsp; Then for travel time I divided the length (in km) by the speed to get the time it would take to travel that segment.&amp;nbsp; I also calculated this in minutes by multiplying the travel time in hours by 60.&amp;nbsp; Finally I created the network dataset using ArcCatalog, created a new service area layer then processed it calculating a 2 hour service area.&amp;nbsp; It kept stopping at 45 minutes and I thought I was doing something wrong, given that I had never done this before.&amp;nbsp; Turned out I had an overshoot at one the point where it would stop calculating.&amp;nbsp; The lesson - never trust someone elses data.&amp;nbsp; I should have run a topology before doing any of this, and saved myself a headache.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;I was jetlagged last night and woke up at midnight.&amp;nbsp; So I spent my time learning about Augmented reality.&amp;nbsp; I still dislike the term, because I feel that the data that supposedly augments reality is really part of reality anyway.&amp;nbsp; The wikipedia page as a good &lt;a href="http://en.wikipedia.org/wiki/Augmented_reality"&gt;introduction&lt;/a&gt;.&amp;nbsp; It also had a link to a video about Wikitude Travel.&amp;nbsp; Now that is pretty &lt;a href="http://www.youtube.com/watch?gl=GB&amp;amp;hl=en-GB&amp;amp;v=8EA8xlicmT8"&gt;cool&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Was thinking about the Seattle Examiner switching to online only.&amp;nbsp; We hear a lot about big brother references, but this one made me think of it again.&amp;nbsp; In 1984 Winston Smith&amp;#39;s job is to alter newstories to fit whatever the government&amp;#39;s current thinking is, new allies were always allies and never enemies, etc...At least with a hardcopy paper newspaper, it is harder to change the story.&amp;nbsp; But if everything is online, it is easy to change history because the newspaper stores the data.&amp;nbsp; Not really a conspiracy theorist, just thought it was interesting given the Seattle Examiner&amp;#39;s shift and the NYTimes and Guardians APIs realeasing historical newstories.&amp;nbsp; What does this have to do with GIS - absolutely nothing... 
&lt;/p&gt;</description><pubDate>Sun, 15 Mar 2009 10:27:00 -0700</pubDate><a10:updated>2010-10-27T12:42:11-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/64"><guid isPermaLink="false">64</guid><title>Realspace and Mobilespace</title><description>&lt;p&gt;
As part of a project, I&amp;#39;ve looked into technology that allow a person with a portable device to somehow connect with where they are.&amp;nbsp; What I mean by this is say a person is walking down the street, and is curious about some building with a unique architecture.&amp;nbsp; This person notices a barcode looking thingy like the one on below.&amp;nbsp; The person takes a picture using their smart phone and are automatically taken to a webpage about that building.&amp;nbsp; &amp;#39;Real&amp;#39;space connecting to &amp;#39;mobile&amp;#39;space.&amp;nbsp; Now its easy to argue about what is real, and I would personally say these are part of the same social space, etc. etc.&amp;nbsp; But the idea is to connect to physical locations through mobile technology.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="/Blog/GetFile/chart.png" alt="" width="168" height="168" /&gt;
&lt;/p&gt;
&lt;p&gt;
This is called a 2D barcode, and it encodes a website url.&amp;nbsp; Special software is installed on your phone that can decode this and take you using your phone&amp;#39;s browser to the url.&amp;nbsp; The way I see this, is it is all part of the location based services push and there are really two strains.&amp;nbsp; One I call wireless (somewhat misleading), the other is physical.&amp;nbsp; The wireless category ties location to your mobile phone through the mobile&amp;#39;s built-in GPS unit.&amp;nbsp; This is a prime example &lt;a href="http://www.youtube.com/watch?v=fMA7wAU5BH0"&gt;here&lt;/a&gt;.&amp;nbsp; Kit Eaton calls this &lt;a href="http://www.fastcompany.com/blog/kit-eaton/technomix/why-your-next-gen-smartphone-will-do-augmented-reality"&gt;augmented reality&lt;/a&gt;, but I step away from a term like reality.&amp;nbsp; Basically the software on this device tracks your location, and through a simple spatial query identifies points of interest near you (NRU).&amp;nbsp; Obviously I am glossing over the massive database of businesses that would be needed to do this.&amp;nbsp; Presumably this would work best in a largeish city.&amp;nbsp; The physical based technologies come in at least two modes - the aforementioned barcodes, and &lt;a href="http://en.wikipedia.org/wiki/RFID"&gt;RFID &lt;/a&gt;technology.&amp;nbsp; I call these physical because they require attaching something to the location physically.&amp;nbsp; In the barcode case, it is the barcode, but the RFID requires a magnetic device and the device to read it.&amp;nbsp; This is all pretty cool, and part of me can&amp;#39;t waits till I&amp;#39;m in the USA to get the technology.&amp;nbsp; It&amp;#39;s probably available here, but then Darwin&amp;#39;s so small it doesn&amp;#39;t matter.
&lt;/p&gt;
&lt;p&gt;
Now, what happens if you are in the middle of nowhere, and want to all tourists/visitors to learn about that location?&amp;nbsp; Well, honestly, I think the first two are out (gps/wireless, and barcodes).&amp;nbsp; They require too much - internet reception, phone with camera, phone with&amp;nbsp; barcode reading software, and, well, a phone.&amp;nbsp; So then is it RFID or nothing?&amp;nbsp; That requires a device with a reader attached, something probably not everyone has.&amp;nbsp; So that leaves renting the device and the joys that come with that...
&lt;/p&gt;
&lt;p&gt;
Either way in the next couple years we&amp;#39;ll probably see these things become standard technology.&amp;nbsp; Especially if smartphone prices begin to drop. 
&lt;/p&gt;</description><pubDate>Tue, 10 Mar 2009 21:59:00 -0700</pubDate><a10:updated>2010-10-27T12:57:42-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/94"><guid isPermaLink="false">94</guid><title>Conference</title><description>I&amp;#39;ll be presenting at the American Association of Geographers Conference on &lt;a href="http://communicate.aag.org/eseries/aag_org/program/SessionDetail.cfm?SessionID=8161"&gt;Sunday 22nd of March&lt;/a&gt;.&amp;nbsp; It isn&amp;#39;t a GIS paper, but about the geography of gambling in remote areas.</description><pubDate>Wed, 04 Mar 2009 19:33:00 -0800</pubDate><a10:updated>2010-10-27T13:16:54-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/68"><guid isPermaLink="false">68</guid><title>Maybe just one more comic...</title><description>&lt;a href="http://www.toothpastefordinner.com/022209/cartographers-anonymous.gif" title="Toothpaste for Dinner"&gt;&lt;img src="http://www.toothpastefordinner.com/022209/cartographers-anonymous.gif" alt="" width="386" height="254" /&gt;&lt;/a&gt;</description><pubDate>Wed, 04 Mar 2009 19:31:00 -0800</pubDate><a10:updated>2010-10-27T12:59:45-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/104"><guid isPermaLink="false">104</guid><title>Flashdevelop</title><description>&lt;p&gt;
I&amp;#39;m still playing around with Flex/flash and learning some new tricks.&amp;nbsp; I decided to try the open source version of Flex/Flash, FlashDevelop.&amp;nbsp; It basically is just the IDE for the Flex SDK.&amp;nbsp; I have to say I find it much better, at least for coding.&amp;nbsp; The intellisense is great.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;Here are some instructions:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.britishideas.com/2008/02/27/first-steps-with-flash-using-the-flex-3-sdk/"&gt;http://www.britishideas.com/2008/02/27/first-steps-with-flash-using-the-flex-3-sdk/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;</description><pubDate>Fri, 27 Feb 2009 21:48:00 -0800</pubDate><a10:updated>2010-10-27T13:24:17-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/100"><guid isPermaLink="false">100</guid><title>Map Humor</title><description>&lt;a href="http://www.superpoop.com/121708/killer-circles-threaten-america.jpg" title="Killer circles threaten America"&gt;&lt;img src="http://www.superpoop.com/121708/killer-circles-threaten-america.jpg" alt="" /&gt;&lt;/a&gt;</description><pubDate>Thu, 26 Feb 2009 21:15:00 -0800</pubDate><a10:updated>2010-10-27T13:19:29-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/85"><guid isPermaLink="false">85</guid><title>What is Twitter?</title><description>I&amp;#39;m not quite sure what twitter is, but I signed up for it, because everyone is doing it.&lt;br /&gt;
&lt;br /&gt;
http://twitter.com/boxshapedworld&lt;br /&gt;
&lt;br /&gt;
I don&amp;#39;t really say anything useful, but for those who have read the entries on this blog, you already knew this.  Anyway, I&amp;#39;m always interested in what people have to say about the spatial world (is that redundant?) in 140 characters or less.</description><pubDate>Mon, 23 Feb 2009 22:05:00 -0800</pubDate><a10:updated>2010-10-27T13:10:36-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/51"><guid isPermaLink="false">51</guid><title>For the Skiers</title><description>Being from Colorado originally, I always get asked if I ski. Well, yes and no. I used to downhill ski, but before I left I tried and really enjoyed cross country skiing. Either way, I still find these interactive &lt;a href="http://www.ski.com/interactive/maps.aspx"&gt;maps&lt;/a&gt; pretty cool.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.ski.com/interactive/maps.aspx" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 120px; height: 112px" src="http://www.ski.com/interactive/_images/snowmass_thumb.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.ski.com/interactive/maps.aspx" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 120px; height: 110px" src="http://www.ski.com/interactive/_images/highlands_thumb.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.ski.com/interactive/maps.aspx" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 120px; height: 112px" src="http://www.ski.com/interactive/_images/aspen_thumb.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;
*Can&amp;#39;t seem to get anything but the Park City map to load.  Probably a conspiracy by Utah to steal Colorado&amp;#39;s glory, but maybe you&amp;#39;ll have more luck  :).</description><pubDate>Wed, 18 Feb 2009 16:58:00 -0800</pubDate><a10:updated>2010-10-27T12:52:00-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/62"><guid isPermaLink="false">62</guid><title>Speaking of software...</title><description>That never changes its interface.&lt;br /&gt;
&lt;br /&gt;
Just received an announcement from Clark Labs.  They just released the latest incarnation of IDRISI software called &lt;a href="http://www.clarklabs.org/"&gt;Taiga&lt;/a&gt;.  If you are looking for a low cost Image processing software, or raster based GIS, this should be one that you look at.</description><pubDate>Fri, 13 Feb 2009 00:15:00 -0800</pubDate><a10:updated>2010-10-27T12:57:12-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/12"><guid isPermaLink="false">12</guid><title>More APIs</title><description>So, when will we see the first Google Maps/New York Times Article mashup?&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://open.blogs.nytimes.com/2009/02/04/announcing-the-article-search-api/"&gt;http://open.blogs.nytimes.com/2009/02/04/announcing-the-article-search-api/&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.readwriteweb.com/archives/nytimes_exposes_huge_api.php"&gt;http://www.readwriteweb.com/archives/nytimes_exposes_huge_api.php&lt;/a&gt;</description><pubDate>Wed, 11 Feb 2009 22:01:00 -0800</pubDate><a10:updated>2009-02-26T21:23:55-08:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/97"><guid isPermaLink="false">97</guid><title>GIS Jobs and Blog News</title><description>While I hope that you are not one of the thousands/tens of thousands of people that have lost their job in the last year, I thought I would post this on here. It&amp;#39;s hard to tell what it is really like in the U.S. being in Australia, and Darwin for that matter (which, cross fingers, doesn&amp;#39;t seem to be hit too hard at the moment). If you are one of the unfortunate few, or perhaps wanting to find another job, this might interest you.&lt;br /&gt;
&lt;br /&gt;
There are a handful of &lt;span class="blsp-spelling-error"&gt;GIS&lt;/span&gt; specific job websites out there, but I think the best one is actually a general job site called&lt;a href="http://www.indeed.com/q-GIS-jobs.html"&gt; indeed.com&lt;/a&gt;. You can search for all the U.S. or by location. The feature I like best about it is that you can subscribe to a search and get updated automatically in your favorite reader (e.g. google reader).&lt;br /&gt;
&lt;br /&gt;
=============================&lt;br /&gt;
&lt;br /&gt;
On a different note. I&amp;#39;ve decided to revamp the blog and tutorials section by migrating over to my main web site. I&amp;#39;ve been neglecting that site quite a bit, and it really just became a testing ground for web projects and learning projects. And I&amp;#39;ll face it, I&amp;#39;m a bit of a google &lt;span class="blsp-spelling-error"&gt;fan&amp;#39;person&lt;/span&gt;&amp;#39; and they made it really easy to blog and create &lt;span class="blsp-spelling-error"&gt;webpages&lt;/span&gt; without having to set up html and &lt;span class="blsp-spelling-error"&gt;css&lt;/span&gt; and the like. On the other hand I don&amp;#39;t want to be dependent on google (for example they are getting rid of google pages), and they don&amp;#39;t make it easy to get my work back. I think it will be better to have everything on one site, though. Luckily I set up the feeds for this blog through &lt;span class="blsp-spelling-error"&gt;feedburner&lt;/span&gt; and hopefully I can just switch the &lt;span class="blsp-spelling-error"&gt;rss&lt;/span&gt; over and anyone subscribed won&amp;#39;t notice a difference.</description><pubDate>Wed, 11 Feb 2009 21:28:00 -0800</pubDate><a10:updated>2010-10-27T13:18:28-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/95"><guid isPermaLink="false">95</guid><title>Venturing deeper in to the murky waters of the Geoweb...</title><description>or Neogeography...or Web 2.0...or whatever you want to call it...&lt;br /&gt;
&lt;br /&gt;
Basically to keep up with the ever changing world of the GIS Analyst/Geographer, I&amp;#39;ve set upon myself the tiny minor little task of learning how to create Rich Internet Applications (RIA).  I already know a little about AJAX, and have used it for small things.  For those that don&amp;#39;t know what AJAX is, it stands for Asynchronous Javascript and XML.  Basically it is a way for a webpage to stay put, and the content to change.  Whereas before to change the content you had to go to another webpage, this really slows things down, and isn&amp;#39;t a good user experience.  So AJAX talks to the server via Javascript and the server sends back information in XML format, and Javascript parses that info.  The advantage of this process is that doesn&amp;#39;t require any third-party extensions to get a Flashy (Adobe Flash that is) experience.  I don&amp;#39;t particularly like programming in Javascript.  And in some instances you have to set up your code depending on browser the user is using, because not each browser is the necessarily the same.&lt;br /&gt;
&lt;br /&gt;
So along comes Microsoft and their new product called&lt;a href="http://silverlight.net/"&gt; Silverlight&lt;/a&gt;.  The so-called &amp;quot;Flash-Killer.&amp;quot;  Well, it&amp;#39;s not going to kill Flash, but some healthy competition doesn&amp;#39;t hurt anyone.  The appeal was that I could program in VB.NET to create the RIA, and it could all be developed using the &lt;a href="http://www.microsoft.com/express/vwd/"&gt;Web Developer 2008 Express Edition&lt;/a&gt;.  Develop Flash-like apps for free?  Sounds better than 600$ for the cost of &lt;a href="http://www.adobe.com/products/flash/"&gt;Adobe Flash&lt;/a&gt; software.  The disadvantage is that Silverlight has 1% of the market to Flash&amp;#39;s 98% (and an extra 1% for all the people still using Netscape Navigator 4), so no one really has the plugin to view the application.  Forcing people to download a plug-in leaves me with a bad taste in my mouth (hence the appeal of AJAX).  Granted by the time everyone upgrades to Windows 7, Silverlight will be pre-installed.&lt;br /&gt;
&lt;br /&gt;
Now I&amp;#39;m not just doing this for fun, but it is related to an actual project.  The project lead has a Mac, and &lt;del&gt;Silverlight plugins aren&amp;#39;t available for the mac&lt;/del&gt; (they are now).  So I switched my attention to Adobe Flash, and learned about &lt;a href="http://www.adobe.com/products/flex/"&gt;Adobe Flex&lt;/a&gt;.  Flex is for developers (or dabblers like me) and Flash is for designers, to put it succinctly.  There is a lot of overlap between them, such as the main language - ActionScript.  Also, Flex 3.0 SDK is free, so you can, in theory, create Flex apps for free.  They also sell Flex Builder (an IDE), or as a 60 day trial.  Since I&amp;#39;m at an academic institution, they also provide it for free.&lt;br /&gt;
&lt;br /&gt;
I was a little daunted at trying to learn another programming language (or half-learning like I usually do), but I&amp;#39;ve been pleasantly surprised by the whole experience.  Flex Builder is just ok as an IDE, I much prefer working in Web Developer Express (it has much better intellisense), but I&amp;#39;m also used to working in it.  I think that in general Flex is easier to work with than Silverlight because it has the documentation and community support/examples that Silverlight doesn&amp;#39;t (yet?).  I have a copy of Adobe Flex 3 Bible by Gassner and that is helping quite a bit.  Flex also has a lot of built-in functions to make typical tasks much easier, like fading in or out.  I found Silverlight&amp;#39;s animation less intuitive.  An extra bonus is that Google released a &lt;a href="http://code.google.com/apis/maps/documentation/flash/tutorial-flexbuilder.html"&gt;Google Maps control&lt;/a&gt; for flash/flex.  There is a &lt;a href="http://www.codeplex.com/views"&gt;Virtual Earth wrapper&lt;/a&gt; for Silverlight that is really good to work with, but Google Maps has better imagery in the project area.&lt;br /&gt;
&lt;br /&gt;
Anyway, if you&amp;#39;ve wanted to start working with RIA&amp;#39;s, I think I would recommend Flex first, then AJAX, then Silverlight.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="/gmaps/Multimedia.html"&gt;Here&lt;/a&gt; is a beta version of the project I&amp;#39;ve been working on.  I attempted to set up the Flex front end to be generic so that all the content is received via RSS, so in theory I could just switch urls to a different RSS that read a different database.  Of course, the code is a little sloppy as it was a learner project, but I should be able to clean it up for the final incarnation.  There are little buggy problems with this, but I wanted to get a test up on the web.  All the markers are stored as geometry in a SQL Server 2008 database and put into a &lt;a href="http://www.directionsmag.com/article.php?article_id=2197&amp;amp;trv=1"&gt;GeoRSS&lt;/a&gt; so that it&amp;#39;s readable by Flex.  The &amp;quot;media&amp;quot; is stored in a separate table with each item using a foreign key reference to the spatial data, so that they are &amp;quot;geotagged.&amp;quot;  This way, as the database is updated so is the little Flex program.  In the beta version of the blogspot engine, they have geotagging, so hopefully I&amp;#39;ll be able to add blog entries as media content as well.  I could try that, but then would need to add the entries to the media content table.  So far images and videos are stored in a bucket on my host&amp;#39;s server, with the link stored in the table.  Any feedback or suggestions would be appreciated.</description><pubDate>Tue, 27 Jan 2009 20:19:00 -0800</pubDate><a10:updated>2010-10-27T13:17:10-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/70"><guid isPermaLink="false">70</guid><title>Google Analytics</title><description>Hasn&amp;#39;t really been a year since this blog was started, but the year has ended.  Shortly after starting it I tracked it with Google Analytics which is free and pretty easy to embed in the blog.  I&amp;#39;ve had 1,700 unique visitors and 2,100 visits from 108 countries.  The top country is the U.S.A followed by Australia (which is probably me logging into the site :)), then the UK.  Which makes sense since this is an English-language blog.  I wouldn&amp;#39;t mind posting in another language, but I don&amp;#39;t know any sufficiently to do that.  Anyway, thanks to all that read this blog.  I hope it is of some use to you, because I mainly post here to give back to the Internet community.  I have learned much from that community, so if I can contribute even a little that makes me happy.</description><pubDate>Sun, 18 Jan 2009 23:34:00 -0800</pubDate><a10:updated>2010-10-27T13:00:22-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/113"><guid isPermaLink="false">113</guid><title>Minard</title><description>This is perhaps my favorite illustration.  It is by Charles Joseph Minard and shows Napoleon&amp;#39;s invasion of Moscow, Russia and the subsequent retreat to Poland.  It is a space-time illustration, using multivariate data.  Edward R. Tufte (author the Visual Display of Quantitative Data) suggests it is the greatest visualization ever made.  It is very engaging, and simple to read (sorry but this one is in French, there are English variants).&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.latebytes.nl/archives/2008/04/14/Minard.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer" src="http://www.latebytes.nl/archives/2008/04/14/Minard.png" border="0" alt="" width="320" height="152" /&gt;&lt;/a&gt;</description><pubDate>Sun, 18 Jan 2009 21:16:00 -0800</pubDate><a10:updated>2010-10-27T13:28:51-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/63"><guid isPermaLink="false">63</guid><title>Hello</title><description>&lt;a href="http://boxshapedworld.blogspot.com/2009/01/vietnam-and-cambodia-and-then-vietnam.html"&gt;Been traveling in Southeast Asia for the holidays&lt;/a&gt;.  Will hopefully post something here in a couple of days when I get settled in again.</description><pubDate>Sun, 11 Jan 2009 21:03:00 -0800</pubDate><a10:updated>2010-10-27T12:57:30-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/28"><guid isPermaLink="false">28</guid><title>Camels</title><description>Well, the final report on the Camel project has officially been released.  Here is a&lt;a href="http://www.desertknowledgecrc.com.au/publications/contractresearch.html"&gt; link&lt;/a&gt; where you can download it.  There is a separate &lt;a href="http://www.desertknowledgecrc.com.au/publications/downloads/DKCRC-Report-53-A-multiple-criteria-decision-support-framework-for-the-management-of-feral-camels.pdf"&gt;report&lt;/a&gt; (54) for the stuff I worked on.  THis was incorporated into chapter 11 of the main report.  Essentially it is a multi-criteria evaluation using weighted linear combination.  There is python code in the appendix for performing (modularly) a weighted linear combination, including calculating weights.  To calculate the weights you need NumPy.</description><pubDate>Thu, 11 Dec 2008 16:51:00 -0800</pubDate><a10:updated>2010-10-27T12:32:12-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/83"><guid isPermaLink="false">83</guid><title>Google Earth In Marketing</title><description>Was in Brisbane last week and noticed a new marketing campaign for Qantas.  Here is a picture of one their posters.  Map pushpins have been around since the seventies at least, that is according to old cop movies.   But I think the notion of a pushpin being put into 3-dimensional space is really influenced by Google Earth.  Perhaps I can even coin a term - ge-marketing.  :)&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://4.bp.blogspot.com/_Q9-AnW3J69M/SUG1VLpsB3I/AAAAAAAABOY/X-MtE1t4ePc/s1600-h/2008+12+06_brisbane_0001sm.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img id="BLOGGER_PHOTO_ID_5278699613764454258" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 266px" src="http://4.bp.blogspot.com/_Q9-AnW3J69M/SUG1VLpsB3I/AAAAAAAABOY/X-MtE1t4ePc/s400/2008+12+06_brisbane_0001sm.jpg" border="0" alt="" /&gt;&lt;/a&gt;</description><pubDate>Thu, 11 Dec 2008 16:36:00 -0800</pubDate><a10:updated>2010-10-27T13:09:23-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/106"><guid isPermaLink="false">106</guid><title>Cool</title><description>I do have interests outside of GIS and Geography.  One is movies...It's great when the two meet.  Here is a really beautiful &lt;a href="http://www.nytimes.com/interactive/2008/02/23/movies/20080223_REVENUE_GRAPHIC.html?ex=1204606800&amp;amp;en=c4801bb1af4569a0&amp;amp;ei=5070&amp;amp;emc=eta3#"&gt;information visualization&lt;/a&gt; of movie revenues for the past 30 years.  To me it looks the way oil paint can layer together.  Very well made.</description><pubDate>Sun, 30 Nov 2008 21:50:00 -0800</pubDate><a10:updated>2010-10-27T13:24:40-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/92"><guid isPermaLink="false">92</guid><title>Correction Manifold and SQL Server 2008</title><description>I misunderstood about Manifold and SQL Server 2008.  It sounds like you actually need the Enterprise edition of the product to use the native spatial data type...A point for MapInfo on this one, minus 1 for Manifold....If anyone is keeping a tally.</description><pubDate>Sun, 30 Nov 2008 00:59:00 -0800</pubDate><a10:updated>2010-10-27T13:16:18-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/96"><guid isPermaLink="false">96</guid><title>Tutorials</title><description>My tutorials page is fairly dormant, which I apologize for.  I&amp;#39;d like to add to it, but I&amp;#39;ve been busy.  Also, the page is hosted on Google Pages, and it has been announced that Google Pages will be discontinued and migrated to Google Sites.  I think having the tutorials on Google Sites will actually be better, but I&amp;#39;m not sure when this &amp;quot;migration&amp;quot; will actually happen.  I just hope that I don&amp;#39;t lose any of that work...</description><pubDate>Sat, 29 Nov 2008 21:46:00 -0800</pubDate><a10:updated>2010-10-27T13:18:03-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/73"><guid isPermaLink="false">73</guid><title>You've Got the Points - Now What?</title><description>So in the last post I showed how I got some points into SQL Server 2008.  Not the most elegant bit of code (I&amp;#39;m a dabbler not a developer), but it worked.  Now what can you do with it.  Besides the many Transact SQL (Microsoft own brand of SQL) methods available for interacting with spatial data (see OGC ones&lt;a href="http://msdn.microsoft.com/en-us/library/bb933960.aspx"&gt; here&lt;/a&gt;), you could create your own GeoRSS feed.  I&amp;#39;m fairly new to creating RSS feeds, so this might not be exactly correct, but you may find the query useful.  The key here is adding a reference to Microsoft.SqlServer.Types.  Then you can actually use their geometry type and the methods associated with it to retrieve your results.&lt;br /&gt;
&lt;br /&gt;
This is all in an generic handler (*.ashx).  The Imports:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
Imports System&lt;br /&gt;
Imports System.Web&lt;br /&gt;
Imports System.Xml&lt;br /&gt;
Imports System.Data&lt;br /&gt;
Imports System.Configuration&lt;br /&gt;
Imports System.Collections&lt;br /&gt;
Imports System.Web.Security&lt;br /&gt;
Imports System.Web.UI&lt;br /&gt;
Imports System.Web.UI.WebControls&lt;br /&gt;
Imports System.Web.UI.WebControls.WebParts&lt;br /&gt;
Imports System.Web.UI.HtmlControls&lt;br /&gt;
Imports System.Data.SqlClient&lt;br /&gt;
Imports System.Net&lt;br /&gt;
Imports System.Threading&lt;br /&gt;
Imports Microsoft.VisualBasic&lt;br /&gt;
Imports System.IO&lt;br /&gt;
Imports Microsoft.SqlServer.Types&lt;br /&gt;
&lt;/code&gt;
&lt;br /&gt;
And the Class:&lt;br /&gt;
&lt;code&gt;
Public Class geo_content : Implements IHttpHandler
Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
context.Response.ClearHeaders()
context.Response.Clear()
context.Response.ContentType = &amp;quot;text/xml&amp;quot;
context.Response.ContentEncoding = System.Text.Encoding.UTF8
context.Response.AddHeader(&amp;quot;ContentType&amp;quot;, &amp;quot;text/xml; charset=utf-8&amp;quot;)
Dim xmlWriter As New XmlTextWriter(context.Response.Output)
xmlWriter.WriteStartDocument()
xmlWriter.WriteStartElement(&amp;quot;rss&amp;quot;)
xmlWriter.WriteAttributeString(&amp;quot;version&amp;quot;, &amp;quot;2.0&amp;quot;)
&amp;#39;xmlWriter.WriteStartElement(&amp;quot;rdf:RDF&amp;quot;, &amp;quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&amp;quot;)
&amp;#39;xmlWriter.WriteAttributeString(&amp;quot;xmlns&amp;quot;, &amp;quot;rdf&amp;quot;, Nothing, &amp;quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&amp;quot;)
xmlWriter.WriteAttributeString(&amp;quot;xmlns&amp;quot;, &amp;quot;geo&amp;quot;, Nothing, &amp;quot;http://www.w3.org/2003/01/geo/wgs84_pos#&amp;quot;)
xmlWriter.WriteStartElement(&amp;quot;channel&amp;quot;)
xmlWriter.WriteElementString(&amp;quot;title&amp;quot;, &amp;quot;geoContentRSS&amp;quot;)
xmlWriter.WriteElementString(&amp;quot;description&amp;quot;, &amp;quot;latitude and longitude from sql server 2008&amp;quot;)
xmlWriter.WriteElementString(&amp;quot;language&amp;quot;, &amp;quot;en-US&amp;quot;)
Dim con As SqlConnection = Create_Connection()
If con.State = ConnectionState.Closed Then
con.Open()
End If
Dim geoReader As SqlDataReader = Create_Geo_reader(con)
Try
Dim q As String = &amp;quot;&amp;quot;&amp;quot;&amp;quot;
If Not IsNothing(geoReader) Then
If geoReader.HasRows Then
Do While geoReader.Read
xmlWriter.WriteStartElement(&amp;quot;item&amp;quot;)
Dim geom As New SqlGeometry
geom = CType(geoReader(&amp;quot;Geom_Data&amp;quot;), SqlGeometry)
Dim lat As Double = CType(geom.STY, Double)
Dim lng As Double = CType(geom.STX, Double)
Dim id As Integer = CType(geoReader(&amp;quot;GeoID&amp;quot;), Integer)
Dim name As String = CType(geoReader(&amp;quot;Name&amp;quot;), String)
xmlWriter.WriteStartElement(&amp;quot;title&amp;quot;)
xmlWriter.WriteCData(name)
xmlWriter.WriteEndElement()
xmlWriter.WriteStartElement(&amp;quot;description&amp;quot;)
xmlWriter.WriteCData(Name)
xmlWriter.WriteEndElement()
xmlWriter.WriteElementString(&amp;quot;link&amp;quot;, &amp;quot;http://www.boxshapedworld.com&amp;quot;)
xmlWriter.WriteElementString(&amp;quot;id&amp;quot;, id)
xmlWriter.WriteStartElement(&amp;quot;source&amp;quot;)
xmlWriter.WriteAttributeString(&amp;quot;url&amp;quot;, &amp;quot;http://www.boxshapedworld.com&amp;quot;)
xmlWriter.WriteString(name)
xmlWriter.WriteEndElement()
xmlWriter.WriteElementString(&amp;quot;geo:lat&amp;quot;, CStr(lat))
xmlWriter.WriteElementString(&amp;quot;geo:lng&amp;quot;, CStr(lng))
&amp;#39;close item element
xmlWriter.WriteEndElement()
Loop
End If
End If
If con.State = ConnectionState.Open Then
con.Close()
End If
Catch ex As Exception
MsgBox(ex.ToString)
con.Close()
End Try
xmlWriter.WriteEndElement()
xmlWriter.WriteEndElement()
xmlWriter.WriteEndDocument()
xmlWriter.Close()
End Sub
Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
Get
Return False
End Get
End Property
Private Function Create_Connection() As SqlConnection
Try
Dim Connection As New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings(&amp;quot;baseBSWstr&amp;quot;).ConnectionString)
Return Connection
Catch ex As Exception
MsgBox(ex.ToString)
Return Nothing
End Try
End Function
Private Function Create_Geo_reader(ByVal Connection As SqlConnection) As SqlDataReader
Dim programReader As SqlDataReader
Dim sqlStatement As String
Dim command As New SqlCommand
Dim dt As New DataTable(&amp;quot;geograph_data&amp;quot;)
sqlStatement = &amp;quot;SELECT * FROM geograph_data WHERE [GeoID] &amp;lt;&amp;gt; @negGeoID ORDER BY [Name]&amp;quot;
Try
If Connection.State = ConnectionState.Closed Then
Connection.Open()
End If
With command
.CommandText = sqlStatement
.Parameters.AddWithValue(&amp;quot;@negGeoID&amp;quot;, -9999)
.CommandType = CommandType.Text
.Connection = Connection
End With
programReader = command.ExecuteReader
Return programReader
Catch ex As Exception
MsgBox(ex.ToString)
Connection.Close()
Return Nothing
End Try
End Function
End Class
&lt;/code&gt;
&lt;br /&gt;
This starts by creating an xmltextwriter that is set to the context output stream.  I add the xml namespace for geo.  There is a separate function to create the connection string, and a separate function to create the sqldatareader.  In this function you see a simple SELECT statement with parameters for the where value.  This is returned and the geoReader starts to cycle through each row.  A variable called geom is used to house the geometry, and you can see that it is of a type SqlGeometry.  Using this type gave access to the STY and STX methods.  Again, not the most elegant bit of code, but it works.</description><pubDate>Sat, 29 Nov 2008 21:34:00 -0800</pubDate><a10:updated>2010-10-27T13:04:24-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/108"><guid isPermaLink="false">108</guid><title>SQL Server 2008 Express</title><description>&lt;p&gt;
I&amp;#39;ve finally gotten a chance to play around with SQL Server 2008 express edition. In case you haven&amp;#39;t heard 2008 introduced native spatial support. I&amp;#39;m not sure how the internals store spatial data but you can add geometry (or geography) data types as Well-Known Text or Well-Known Binary. Well-Known Text is pretty easy to understand and work with. It&amp;#39;s pretty easy to work with SQL Server using the Management Studio Express Edition. If you have MapInfo 9.5, or Manifold version 8 you can directly connect to express edition and edit geometry that way. I don&amp;#39;t think there is support for this in ArcGIS 9.3 without SDE (personal or otherwise) which means you probably need an ArcEditor license. I happened to have an XML file with latitude and longitude locations in it that I used to store locations for a mini (personal) google maps project. Using VB.NET 3.5 I could easily connect to both the xml file and sql server to add the geometry as point locations.&lt;br /&gt;
&lt;br /&gt;
Here is the code that I used. It is server side code, with the connection string stored in the web.config file. 
&lt;/p&gt;
&lt;p&gt;
Dim xDoc As New XmlDocumentxDoc.Load(Server.MapPath(&amp;quot;cities.xml&amp;quot;))
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;Dim cNodes As XmlNodeListcNodes = xDoc.GetElementsByTagName(&amp;quot;marker&amp;quot;) 
&lt;/p&gt;
&lt;p&gt;
Dim i As Integer = 0 
&lt;/p&gt;
&lt;p&gt;
Dim con As Data.SqlClient.SqlConnectioncon = New Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings _
&lt;/p&gt;
&lt;p&gt;
(&amp;quot;baseBSWstr&amp;quot;).ConnectionString) For Each XNode As XmlNode In cNodes
&lt;/p&gt;
&lt;p&gt;
Dim ac As XmlAttributeCollection = XNode.Attributes 
&lt;/p&gt;
&lt;p&gt;
Dim lat As Double = CDbl(ac.Item(0).InnerText.ToString) 
&lt;/p&gt;
&lt;p&gt;
Dim lng As Double = CDbl(ac.Item(1).InnerText.ToString) Dim name As String = CStr(ac.Item(2).InnerText.ToString)con.Open() 
&lt;/p&gt;
&lt;p&gt;
Dim cmd As New SqlCommand(&amp;quot;INSERT INTO geograph_dataVALUES (&amp;quot; &amp;amp; i &amp;amp; &amp;quot;,&amp;quot; &amp;amp; &amp;quot;geometry::STGeomFromText(&amp;#39;POINT(&amp;quot; &amp;amp; lng &amp;amp; &amp;quot; &amp;quot; &amp;amp; lat &amp;amp; &amp;quot;)&amp;#39;, 0), &amp;#39;&amp;quot; &amp;amp; name &amp;amp; &amp;quot;&amp;#39;)&amp;quot;, _ &amp;nbsp; con)&amp;#39;cmd.CommandText = &amp;quot;INSERT INTO geograph _ 
&lt;/p&gt;
&lt;p&gt;
dataVALUES (&amp;quot; &amp;amp; i &amp;amp; &amp;quot;,&amp;quot; &amp;amp; &amp;quot;geometry::STGeomFromText(&amp;#39;POINT(&amp;quot; &amp;amp; lat &amp;amp; &amp;quot; &amp;quot; &amp;amp; lng &amp;amp; &amp;quot;)&amp;#39;, 0), &amp;#39;&amp;quot; &amp;amp; name &amp;amp; &amp;nbsp;&amp;quot;&amp;#39;)&amp;quot;cmd.ExecuteNonQuery()con.Close()i += 1 
&lt;/p&gt;
&lt;p&gt;
Next &lt;br /&gt;
This was just run on my hard drive with a local instance, so I wasn&amp;#39;t too concerned about security. From what I understand using parameters is meant to be more secure. Here is an &lt;a href="http://viswaug.wordpress.com/2008/09/29/inserting-spatial-data-in-sql-server-2008/"&gt;example&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Now if you want to play around with sql server 2008 with just management studio here are some tutorials.&lt;br /&gt;
&lt;a href="http://www.bostongis.com/?content_name=sql2008_tut03#187"&gt;Boston GIS&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.jasonfollas.com/blog/archive/2008/03/14/sql-server-2008-spatial-data-part-1.aspx"&gt;Jason&lt;/a&gt;Follas - this describes the difference between geometry and geography...pretty good series.&lt;br /&gt;
&lt;a href="http://www.developerfusion.com/article/8325/spatial-data-in-sql-server-2008/5/"&gt;Developer Fusion&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://msdn.microsoft.com/en-au/library/bb895270.aspx"&gt;MSDN&lt;/a&gt; 
&lt;/p&gt;</description><pubDate>Thu, 27 Nov 2008 18:08:00 -0800</pubDate><a10:updated>2010-10-27T13:24:54-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/56"><guid isPermaLink="false">56</guid><title>Book Recommendation</title><description>A colleague let me glance over this &lt;a href="http://www.amazon.com/Introduction-Geographic-Information-Systems-CD-ROM/dp/0073101710/ref=sr_1_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1227684077&amp;amp;sr=1-2"&gt;book&lt;/a&gt; by Chang.  I have to say it is one of the better introductory GIS texts I have seen.  I&amp;#39;ve owned a few.  The one for my undergrad courses was weak, but in fairness it was one of the least expensive textbooks I had to purchase.  Longley et al. produced a nice &lt;a href="http://www.amazon.com/Geographic-Information-Systems-Science-Longley/dp/047087001X/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1227684811&amp;amp;sr=1-1"&gt;one&lt;/a&gt; as well.  I would go with Chang over Longely, though.  Chang&amp;#39;s book is ESRI-biased, but I think it is of value to everyone.  There are a number of worked examples that show how the little black box works, e.g. affine transformations, and ordinary kriging.  I&amp;#39;m not talking about point and click, I mean actual mathematics.  My colleague also said the section on modeling is excellent, but I didn&amp;#39;t look through it in great detail.&lt;br /&gt;
&lt;br /&gt;
Unfortunately the book budget is a little low right now, as I&amp;#39;ve made a number of purchases recently so I don&amp;#39;t own a copy.  Speaking of which, I also recommend &lt;a href="http://www.amazon.com/Applied-Spatial-Data-Analysis-Use/dp/0387781706/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1227685043&amp;amp;sr=1-1"&gt;Bivand&lt;/a&gt; et al.&amp;#39;s spatial statistic book for R.  This fills a void in Spatial Statistic books that has been growing.  Most spatial stat books focus heavily on theoretical, which is fine, but for someone like me that is not in a course there is a lack of worked examples.  Waller and Gotway&amp;#39;s book is &lt;a href="http://www.amazon.com/Applied-Spatial-Statistics-Public-Health/dp/0471387711/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1227685147&amp;amp;sr=1-1"&gt;theoretical&lt;/a&gt; and has exercises, but now answer key so who knows if I produced the &amp;quot;correct&amp;quot; results....Andy Mitchell&amp;#39;s &lt;a href="http://www.amazon.com/ESRI-Guide-GIS-Analysis-Measurements/dp/158948116X/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1227685363&amp;amp;sr=1-1"&gt;book&lt;/a&gt; is a great start, but doesn&amp;#39;t go into much depth (doesn&amp;#39;t talk much about first and second order effects, doesn&amp;#39;t talk about inhomgeneous k-functions, etc...)</description><pubDate>Tue, 25 Nov 2008 23:30:00 -0800</pubDate><a10:updated>2010-10-27T12:53:45-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/80"><guid isPermaLink="false">80</guid><title>Find values in one table that are missing in another table MapInfo</title><description>Took me a little while to find an example of this, so I thought I would add one to the &amp;quot;interweb&amp;quot; to help other people.&lt;br /&gt;
&lt;br /&gt;
One part of MapInfo that is extremely powerful is the SQL functionality.  It isn&amp;#39;t comprehensive, but there are a number of things you can do with it.  Where I&amp;#39;m currently living/working (The Northern Territory) has a number of communities that could have several different names for the same location.  This comes from communities named by European settlers in the area, and Indigenous names.  Basically, you can have a spreadsheet of data that you want to tie to a geographic location via the name of an organisation, but the spreadsheet names might not necessarily match the database names that have the latitude and longitude.  So I want to find out which values in the spreadsheet are &amp;quot;missing&amp;quot; from the database.  In other words, which values did not join.&lt;br /&gt;
&lt;br /&gt;
Two Tables:  sdss_geography and tutorial_sample_2&lt;br /&gt;
Two Columns:  sdss_geography.Organisation_Name and tutorial_sample_2.School&lt;br /&gt;
&lt;br /&gt;
The first step is to perform a Join on the two tables.  Using Query --&amp;gt; SQL Select&lt;br /&gt;
&lt;br /&gt;
Select Columns:  *&lt;br /&gt;
From Tables:  sdss_geography, Tutorial_Sample_2&lt;br /&gt;
Where:  sdss_geography.Organisation_Name = Tutorial_Sample_2.School&lt;br /&gt;
Ordered By:  School&lt;br /&gt;
into Table Named: InitialJoin&lt;br /&gt;
&lt;br /&gt;
Next go to File --&amp;gt; Save Query and save the InitialJoin query as a table.  Then close the query table and load the InitialJoin.tab table.&lt;br /&gt;
&lt;br /&gt;
Once the table is loaded, go back to Query --&amp;gt; SQL Select.&lt;br /&gt;
&lt;br /&gt;
Select Columns:  *&lt;br /&gt;
From Tables:  Tutorial_Sample_2&lt;br /&gt;
Where:  not School in (select School from InitialJoin)&lt;br /&gt;
Ordered By:  School&lt;br /&gt;
into Table Named:MissingJoin&lt;br /&gt;
&lt;br /&gt;
Click OK.&lt;br /&gt;
&lt;br /&gt;
This produces a table of missing values.  I take this table and make sure the name and spelling matches the central database. &lt;br /&gt;
&lt;br /&gt;
Hopefully that helps someone else.</description><pubDate>Thu, 06 Nov 2008 15:54:00 -0800</pubDate><a10:updated>2010-10-27T13:08:42-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/13"><guid isPermaLink="false">13</guid><title>Does everyone have an API?</title><description>Came across this last night when I couldn&amp;#39;t sleep (yes I&amp;#39;m even looking at maps at 2am :)). &lt;br /&gt;
&lt;br /&gt;
It started through a great blog called &lt;a href="http://kelsocartography.com/blog/"&gt;Kelso&amp;#39;s Corner&lt;/a&gt;.  It&amp;#39;s a cartography/visualizations oriented blog/website, but he posts examples of some great (mostly interactive) cartography.  A lot of them, not surprisingly, come from the New York Times.  Newspapers don&amp;#39;t always produce the greatest or most appropriate maps, but the NYTimes seems to make the extra effort at doing this (The Economist is another one that does a great job).   Anyway, I &amp;quot;discovered&amp;quot; that they have an interactive visualization creator called &lt;a href="http://vizlab.nytimes.com/"&gt;Visualization lab&lt;/a&gt;.   They have a number of visualization techniques available for the user to create their own interactive visualization.  According to &lt;a href="http://open.blogs.nytimes.com/2008/10/27/the-new-york-times-data-visualization-lab/"&gt;this&lt;/a&gt;, it is based on technology from &lt;a href="http://services.alphaworks.ibm.com/manyeyes/"&gt;IBM Research&lt;/a&gt;.   I didn&amp;#39;t explore too deeply, so I don&amp;#39;t know if the NYTimes site allows you to load your own data, but the Many Eyes does.    Honestly, I&amp;#39;m a bit wary of these types of &amp;quot;map your own data&amp;quot; neogeography things.   But I think the NYTimes site has done a great job of restricting users so that they make an appropriate map (e.g. a choropleth using derived data instead of raw counts).   They are even using a good map projection for their world map data!  I&amp;#39;m not too keen on the bubble visualization, because when I see it I expect the countries to be in the right place, so I find it hard to read.   I guess I couldn&amp;#39;t really find any order to the arrangement (hey I&amp;#39;m a Geographer, I look for spatial patterns automatically).  Either way, I thought it was pretty well done, and fast.&lt;br /&gt;
&lt;br /&gt;
Naturally when I see something like the Visualization lab, I immediately think &amp;quot;How can I do that?&amp;quot;  Well the NYTimes has made it easier for me to try and make my own.  They didn&amp;#39;t release the code or anything, but they now have their own data API.  One of the first that they have released is the &lt;a href="http://developer.nytimes.com/docs/campaign_finance_api/#h3-common-params"&gt;campaign finance api&lt;/a&gt;.  I believe this would be the same data used for creating this interactive &lt;a href="http://kelsocartography.com/blog/?p=896"&gt;map&lt;/a&gt;.</description><pubDate>Mon, 03 Nov 2008 15:34:00 -0800</pubDate><a10:updated>2009-02-10T22:11:22-08:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/74"><guid isPermaLink="false">74</guid><title>Add tickmarks to the horizontal</title><description>I needed to add a bunch of tick marks to a line in a layout in ArcGIS.  I am not aware of a built-in tool to do this, so I created my own.  It is just for the horizontal, but may be modified for the vertical.  I made it fairly generic so that the inputs might be automated as well.&lt;br /&gt;
&lt;br /&gt;
It is available &lt;a href="http://boxshapedworld.googlepages.com/tickmarks"&gt;here&lt;/a&gt;...Hopefully it will help someone.</description><pubDate>Wed, 29 Oct 2008 21:48:00 -0700</pubDate><a10:updated>2010-10-27T13:04:40-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/43"><guid isPermaLink="false">43</guid><title>Forums</title><description>This is off topic...&lt;br /&gt;
&lt;br /&gt;
I&amp;#39;ve been trolling the technical forums a lot recently while learning more about Windows Presentation Foundation, which I&amp;#39;m using in a little project.  I&amp;#39;ve noticed certain commonalities in all forums that bug me...which I will now list...just giving you enough opportunity to ignore this entry.&lt;br /&gt;
&lt;br /&gt;
For one, certain forums award points to posters.  Sometimes this leads to a prize of some sort poster.  I suppose this is an incentive to get people to participate.  What bugs me is when a poster new or old ends the post with &amp;quot;If this answers your question be sure to mark it as answered.&amp;quot;  I like the people who don&amp;#39;t care about the points and just help answer the question. &lt;br /&gt;
&lt;br /&gt;
I also don&amp;#39;t like the posters who berate the question asker...especially if it is obvious English is a second language.  It&amp;#39;s just uncalled for.   On the other hand, I don&amp;#39;t like it when with the question asker writes &amp;quot;URGENT!!!!&amp;quot;, or when they don&amp;#39;t receive a response in an hour post &amp;quot;HELLO?  NO ANSWER!!!!??&amp;quot;  But I don&amp;#39;t think it warrants berating the question asker.&lt;br /&gt;
&lt;br /&gt;
Finally, I don&amp;#39;t like the forum lecturers.  These are the people that instead of helping or answering questions lecture the question asker or  poster about how to post.  Kind of like what I&amp;#39;m doing right now...no, no, it&amp;#39;s different, really it&amp;#39;s different.  :)&lt;br /&gt;
&lt;br /&gt;
Basically, I wish every forum could be like CartoTalk where the posters love the topic and helping people, and everyone is polite and friendly.  I just don&amp;#39;t get why some posters treat the question askers like they are waisting the poster&amp;#39;s time.  Don&amp;#39;t volunteer your time if you&amp;#39;re going to be a jerk about it.&lt;br /&gt;
&lt;br /&gt;
Just my 2 cents.</description><pubDate>Sun, 26 Oct 2008 20:35:00 -0700</pubDate><a10:updated>2010-10-27T12:41:51-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/55"><guid isPermaLink="false">55</guid><title>MapInfo MapCad 9.5</title><description>&lt;div&gt;
 
&lt;/div&gt;
I thought I should post a little more about MapCAD than just &amp;quot;I Couldn&amp;#39;t get it to install.&amp;quot;  If you are using 9.5 you should definitely download MapCAD.  It will give you more data editing control than previously, as well as speed up some general data editing tasks.&lt;br /&gt;
&lt;div&gt;
 
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
To add MapInfo MapCad.  Go To --&amp;gt; Tool Manager.  Click on Add Tool, and navigate to C:\Program Files\AGIS\MapCAD.  Then add the MapCAD.mbx.  Two new toolbars should be added.
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
 
&lt;/div&gt;
Highlights:&lt;br /&gt;
Basic CAD stuff like mirroring and filleting.  The Copy Style tool is cool, and can be useful at times.  This is a common feature in Word (AutoCAD has one as well).&lt;br /&gt;
&lt;br /&gt;
There are some more sophisticated options such as splitting a polyline (exploding) to different line segments.  There is a tool to add nodes at intervals on a segment.  The Calculate angle and direction tools will be useful for more precise drawing.&lt;br /&gt;
&lt;br /&gt;
I think the Create Lines and Create Polylines from database are interesting.  Seems to be a way to store geographic data without using a spatial object...but with SQL server 2008 express this might not be necessary...&lt;br /&gt;
&lt;br /&gt;
Basically they&amp;#39;ve added some nice little features that are part of a CAD application.&lt;br /&gt;
&lt;br /&gt;
I found the tools a little cumbersome initially, but it didn&amp;#39;t take long to figure them out.&lt;br /&gt;
-------------&lt;br /&gt;
&lt;br /&gt;
I&amp;#39;ve complained about Named Views on here a few times, so with that in mind here is a feeble attempt to produce something &amp;quot;different.&amp;quot;  This is my first MapBasic Application, so feel free to improve upon it.  Basically it adds to options to the Map Menu - Load Saved View and Save View.  All it does is write the centre coordinates and zoom to a text file.  Nothing fancy, but it might work for you.&lt;br /&gt;
&lt;br /&gt;
For the source&lt;a href="http://boxshapedworld.googlepages.com/SaveView.MB"&gt; code&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
For a compiled&lt;a href="http://boxshapedworld.googlepages.com/SaveView.MBX"&gt; file&lt;/a&gt; (mbx, version 9.5).</description><pubDate>Thu, 23 Oct 2008 19:59:00 -0700</pubDate><a10:updated>2010-10-27T12:53:13-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/110"><guid isPermaLink="false">110</guid><title>Good to know</title><description>Just wanted to thank &lt;a href="http://hampdengisit.blogspot.com/"&gt;Hampden GIS/IT&lt;/a&gt; for a very valuable MapInfo tip.  As I&amp;#39;ve said a few times, I&amp;#39;m not a fan of workspaces, but there is something you can do with a workspace that you can&amp;#39;t with any other proprietary program file I&amp;#39;ve worked with (e.g. *.dwg, *.mxd, *.map).  You can open it up in Notepad or WordPad.  This is excellent for fixing broken paths (which I&amp;#39;m needing to do right now).  It&amp;#39;s actually neat to read through it, because it is like reading a program...a LISP or FORTRAN program.  Sort of takes me back to working with AutoCAD commandline.  Personally, I think commandline is more efficient than searching for icons...This is probably a good workaround to the Named Views problem.  Pick a view that works at then use map basic to set it...even copy and paste it into the workspace in Notepad.  That&amp;#39;s much better than saving it at the application level.  In fact to rebuild this workspace, I&amp;#39;m just copying the Map Basic code because it wouldn&amp;#39;t load anymore.  That&amp;#39;s definitely a mark in the plus column for MapInfo.&lt;br /&gt;
&lt;br /&gt;
Still I couldn&amp;#39;t resist an experiment.  I started a new workspace with one Map Window and one Layout Window.  Saved the workspace, then added a piece of text to the layout, closed the layout window and saved as a new workspace.  I compared the two in Notepad, and the layout was gone in the second workspace.  I was secretly hoping that it just retained all the commands, but of course that really isn&amp;#39;t efficient to save all the commands.  Oh well, nothing is perfect.  In the end, I shouldn&amp;#39;t be trying to fit MapInfo into an AutoCAD ArcGIS mold, all three are different programs.  It&amp;#39;s useful to know the quirks so that I can compensate when using any of the programs.</description><pubDate>Thu, 23 Oct 2008 16:21:00 -0700</pubDate><a10:updated>2010-10-27T13:26:42-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/111"><guid isPermaLink="false">111</guid><title>Handy Information</title><description>&lt;p&gt;
Good demonstration on how to use Representations in ArcGIS to create the ED effect for building footprints...
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blogs.esri.com/Support/blogs/mappingcenter/archive/2008/10/21/3d-effect-for-a-building-footprints.aspx" target="_blank"&gt;Link.&lt;/a&gt;&amp;nbsp;
&lt;/p&gt;</description><pubDate>Tue, 21 Oct 2008 20:38:00 -0700</pubDate><a10:updated>2010-10-27T13:27:06-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/26"><guid isPermaLink="false">26</guid><title>MapInfo Tutorial</title><description>I can't help but laugh at this.  I'm back in government land putting together a "manual"/"tutorial" for working with MapInfo.  There was a copy of version 4.5 floating around with the manuals, so I was flipping through it.  It looks exactly the same!  And, this was for Windows 95!  So I went online and searched for MapInfo tutorials.  I didn't see any of the initial hits that were for greater than version 7.5...&lt;br /&gt;&lt;br /&gt;On the one hand, MapInfo is like a rock and doesn't change.  On the other hand, they haven't fixed fatal flaws with their program (IMHO), like workspaces.&lt;br /&gt;&lt;br /&gt;I'll post the tutorial (edited to remove gov' related info) when it is done.</description><pubDate>Thu, 09 Oct 2008 23:02:00 -0700</pubDate><a10:updated>2010-10-27T12:31:14-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/59"><guid isPermaLink="false">59</guid><title>More ArcScene Stuff</title><description>So, I spent all that time setting up the repair &lt;a href="http://boxshapedworldgis.blogspot.com/2008/09/repair-datasource.html"&gt;data source code&lt;/a&gt;, and then discovered that by right-clicking on the layer, going to Data --&amp;gt; Repair Data Source, ArcWhatever fixes all the ones that were in the same folder.  Same problem with the base heights though.&lt;br /&gt;
&lt;br /&gt;
Now I&amp;#39;m exporting ArcScene scenes to 2d images.  I had originally done this on my laptop and got everything setup on there.  There were problems exporting the image with background vector data (roads and coastline).  The coastline was a polygon and came out with extra lines cutting across the 3d.  So my work around was to export the vector and 3d as separate images and then make them as layers in PhotoShop Elements.  This works pretty well.  Now I&amp;#39;m working on the desktop and discovered that the images don&amp;#39;t export the same size.  The reason for this is the monitor size and resolution as the export dimensions are determined by this.  You can also change the export dimensions by changing the height and width of ArcScene.  This is a pain to duplicate, but at least now I know what the problem is.</description><pubDate>Mon, 29 Sep 2008 23:39:00 -0700</pubDate><a10:updated>2010-10-27T12:55:58-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/19"><guid isPermaLink="false">19</guid><title>Repair Datasource</title><description>I had a number of ArcScene documents (sxd) with several layers (&amp;gt;20) with a broken source, and I didn&amp;#39;t really feel like manually going through each one and repairing it, so I poked around trying to find an example to do it in VBA.  Most of the examples were for feature layers, whereas these were all raster layers, and none were for ArcScene.  I found one that worked for rasters, but then I lost the renderer and layer name which were both important in the file.&lt;br /&gt;
&lt;br /&gt;
This is the mesh that I came up with.  Probably a good idea to save your sxd as something else before running the code.  I also needed to close out and open back up before the settings took effect.  The base heights disappeared and I&amp;#39;m not sure why this happened but I already had a bit of code to set the base height to the layer because I&amp;#39;m lazy and didn&amp;#39;t want to go layer by layer setting the base heights.&lt;br /&gt;
&lt;br /&gt;
Here is the code to set the source:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;
&lt;code&gt;
Private Sub SetSource()
Dim pDoc As ISxDocument: Set pDoc = ThisDocument
Dim pScene As IScene: Set pScene = pDoc.Scene
Dim pSG As ISceneGraph: Set pSG = pScene.SceneGraph
Dim pSV As ISceneViewer: Set pSV = pSG.ActiveViewer
Dim il As Integer
Dim pNewWorkspaceName As IWorkspaceName
Set pNewWorkspaceName = New WorkspaceName
With pNewWorkspaceName
.PathName = &amp;quot;D:\gamblingout&amp;quot;
.WorkspaceFactoryProgID = &amp;quot;esriDataSourcesRaster.RasterWorkspaceFactory.1&amp;quot;
End With
For il = 1 To pScene.layerCount - 1
Dim pLayer As ILayer: Set pLayer = pScene.Layer(il)
Dim pRLayer As IRasterLayer: Set pRLayer = pLayer
Dim pDataLayer2 As IDataLayer2: Set pDataLayer2 = pRLayer
Dim pDatasetName As IDatasetName
Set pDatasetName = pDataLayer2.DataSourceName
Set pDatasetName.WorkspaceName = pNewWorkspaceName
pDataLayer2.DataSourceName = pDatasetName
pDoc.UpdateContents
Next
End Sub
&lt;/code&gt;
&lt;/pre&gt;
&lt;br /&gt;
You will probably need to change the start layer, as I had it set as 1 instead of 0.&lt;br /&gt;
&lt;br /&gt;
Here is the code for the base heights.&lt;br /&gt;
&lt;pre&gt;
&lt;code&gt;
Public Sub Set3d()
Dim pDoc As ISxDocument: Set pDoc = ThisDocument
Dim pScene As IScene: Set pScene = pDoc.Scene
Dim il As Integer
For il = 1 To pScene.layerCount
Dim pLayer As ILayer: Set pLayer = pScene.Layer(il)
Dim pLayerExt As ILayerExtensions: Set pLayerExt = pLayer
Dim p3dProps As I3DProperties
Dim i As Integer
&amp;#39;   look for 3D properties of layer:
For i = 0 To pLayerExt.ExtensionCount - 1
If TypeOf pLayerExt.Extension(i) Is I3DProperties Then
Set p3dProps = pLayerExt.Extension(i)
Exit For
End If
Next
Dim pSurf As IRasterSurface
Dim pBands As IRasterBandCollection
Dim pRasterLayer As IRasterLayer
Set pRasterLayer = pLayer
p3dProps.BaseOption = esriBaseSurface
Set pSurf = New RasterSurface
Set pBands = pRasterLayer.Raster
pSurf.RasterBand = pBands.Item(0)
Set p3dProps.BaseSurface = pSurf
p3dProps.Apply3DProperties pLayer
Next
pDoc.UpdateContents
End Sub
&lt;/code&gt;
&lt;/pre&gt;
&lt;br /&gt;
There are no checks to make sure the layer is raster and not a feature layer.  This is one area that could be expanded.  Since it is for a fairly custom file, I know which layers are what type.</description><pubDate>Mon, 29 Sep 2008 18:17:00 -0700</pubDate><a10:updated>2009-02-10T22:07:32-08:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/71"><guid isPermaLink="false">71</guid><title>Flow Mapping</title><description>Getting a head start on a new project that is more cartographic.  It will involve mapping migration/flows from Australia to the Northern Territory (probably smaller geographic units than states).  I like making maps, and so I&amp;#39;m excited to do some cartography beyond standard ArcGIS layouts.  There are different possibilities on how to map this.  Initially, I think I will use something like &lt;a href="http://graphics.stanford.edu/papers/flow_map_layout/"&gt;this&lt;/a&gt; that creates a more trunk/branch flow map instead of the typical straight line between places (Tobler&amp;#39;s Flowmapper).  The project lead doesn&amp;#39;t like this style too much, but thought the trunk/branch style might work.  We might pursue other mapping techniques, which would be cool to try and apply different map techniques to this area...&lt;br /&gt;
&lt;br /&gt;
The Flow Map Layout tool that comes with the article is actually pretty slick, at least when using the supplied examples.  Instructions are lacking unfortunately, so I&amp;#39;m not sure how to use multiple root points.  The output is nice, and allows for export to an eps file.  That could be brought into Adobe Illustrator and edited.  Ad ambitious as I can be, I&amp;#39;m thinking of creating something similar for ArcGIS but using a shapefile.  This would give a lot of control over the final product.  In their tool, you can move things around too...Anyway, there are limits and I&amp;#39;m a control freak.&lt;br /&gt;
&lt;br /&gt;
Camel project finished up as much  as that type of project can finish.  It&amp;#39;s one of those projects that you can keep adding to and making it more sophisticated.  It was part of a larger part, but it sounds like this will also be produced as a separate GIS/Model report.  See how that goes.  It was an interesting and fun project to work on.  Good people too.</description><pubDate>Wed, 17 Sep 2008 23:29:00 -0700</pubDate><a10:updated>2010-10-27T13:01:04-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/38"><guid isPermaLink="false">38</guid><title>Great Application</title><description>I&amp;#39;ve been traveling a broad, and two days after returning I caught a cold, so I haven&amp;#39;t felt much like posting.  But, this was too cool to pass up.&lt;br /&gt;
&lt;br /&gt;
http://www.turningthepages.com/&lt;br /&gt;
&lt;br /&gt;
You can look at Mercator&amp;#39;s Atlas  :).</description><pubDate>Tue, 16 Sep 2008 03:51:00 -0700</pubDate><a10:updated>2010-10-27T12:39:36-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item><item xml:base="http://www.boxshapedworlp.com/Blog/Post/32"><guid isPermaLink="false">32</guid><title>More Anti-Geoweb Rhetoric</title><description>Ok, like I&amp;#39;ve said before - I don&amp;#39;t see the Geoweb as GIS, but I do see it as part of the same spectrum.  Here is more evidence that the Geoweb is not GIS.  Just learned about the&lt;a href="http://code.google.com/apis/visualization/documentation/reference.html"&gt; Google Visualizations API&lt;/a&gt;.  Sounds pretty cool, and looks like a more advanced API than their Google Charts.  Instead of using a URL you actually use Javascript.  One of the first examples of a visualization in their gallery is a &lt;a href="http://code.google.com/apis/visualization/documentation/gallery/intensitymap.html"&gt;World Map of Population&lt;/a&gt;.  Fist off, they call it an &amp;quot;Intensity&amp;quot; map which doesn&amp;#39;t make much sense to me.  In reality they are creating a &lt;a href="http://en.wikipedia.org/wiki/Choropleth"&gt;choropleth map&lt;/a&gt; where color indicates a change in a range of values.  For one, this is an inappropriate use of a choropleth map.  The numbers should be derived not raw numbers.  So instead of population, it should be population density or deaths per 1000 or something like that.  Secondly, they do not divulge what type of classification scheme they are using (Jenk&amp;#39;s Natural Breaks, Quartile, Equal Interval, etc..)  That&amp;#39;s particularly important when creating a map of this type, because the type of classification used can create very different maps.  So I guess that is my problem with the Geoweb.  Making this available to everyone is not necessarily a good thing.  More often than not, there will be inappropriate uses.  I guess this is probably the same complaint of specialists everywhere.  I&amp;#39;m sure statisticians everywhere shudder when I use Excel for basic statistics.  I think though, it is even worst when the creators of the GeoWeb like Google are giving inappropriate examples themselves.  Its one thing when a user does it wrong, that&amp;#39;s out of Google&amp;#39;s hands, but when they do it wrong...&lt;br /&gt;
&lt;br /&gt;
Anyway, that&amp;#39;s my rant of the day...</description><pubDate>Sat, 16 Aug 2008 20:13:00 -0700</pubDate><a10:updated>2010-10-27T12:35:12-07:00</a10:updated><a10:rights type="text">Copyright Box Shaped World 2012</a10:rights></item></channel></rss>

