<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Random Nodes &#187; Formats</title>
	<atom:link href="http://www.jasonbirch.com/nodes/category/formats/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jasonbirch.com/nodes</link>
	<description>...Jason Birch's geospatial ramblings</description>
	<lastBuildDate>Wed, 01 Sep 2010 05:14:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>FDO&#8217;s SpatiaLite Support Goes Native</title>
		<link>http://www.jasonbirch.com/nodes/2010/08/30/518/fdos-spatialite-support-goes-native/</link>
		<comments>http://www.jasonbirch.com/nodes/2010/08/30/518/fdos-spatialite-support-goes-native/#comments</comments>
		<pubDate>Tue, 31 Aug 2010 07:55:46 +0000</pubDate>
		<dc:creator>Jason Birch</dc:creator>
				<category><![CDATA[FDO]]></category>
		<category><![CDATA[Formats]]></category>
		<category><![CDATA[SL-King]]></category>
		<category><![CDATA[Spatialite]]></category>

		<guid isPermaLink="false">http://www.jasonbirch.com/nodes/?p=518</guid>
		<description><![CDATA[Earlier today, Haris Kurtagic at SL-King announced the initial release of a new FDO1 provider for SpatiaLite. This is great news, adding to the native SpatiaLite2 support ecosystem which includes GDAL/OGR, QGIS, GeoAlchemy, and probably others (let me know in the comments!). Being in a precipitous mood, I decided to plunge in and get my [...]]]></description>
			<content:encoded><![CDATA[<p>Earlier today, Haris Kurtagic at SL-King <a href="http://lists.osgeo.org/pipermail/fdo-users/2010-August/002307.html">announced</a> the initial release of a new FDO<sup>1</sup> provider <a href="http://www.sl-king.com/fdospatialite">for SpatiaLite</a>.  This is great news, adding to the native SpatiaLite<sup>2</sup> support ecosystem which includes <a href="http://www.gdal.org/">GDAL</a>/OGR, <a href="http://www.qgis.org/">QGIS</a>, <a href="http://www.geoalchemy.org/">GeoAlchemy</a>, and probably others (let me know in the comments!).</p>
<p>Being in a precipitous mood, I decided to plunge in and get my clichés wet.  The first step was to attempt to use the new provider with <a href="http://themapguyde.blogspot.com/">Jackie Ng</a>&#8216;s <a href="http://code.google.com/p/fdotoolbox/">FDO Toolbox</a>, my go-to GUI tool for examining FDO data sets.  I followed these steps:</p>
<ol>
<li><a href="http://www.sl-king.com/fdospatialite/download/download.html">Downloaded the 32 bit FDO 3.5 version of the new SpatiaLite provider</a> from the SL-King website.</li>
<li>Copied all of the files into my <strong>C:\Program Files\FDO Toolbox\FDO</strong> directory.</li>
<li>Copied the contents of the <strong>providers_kingspatialite_entry.xml</strong> file into the <strong>providers.xml</strong> file before the closing FeatureProviderRegistry tag, modifying the FDO version string to 3.5.</li>
<li>Discovered that something had a dependency on the MS Visual C++ 7.1 runtime, so I found msvcr71.dll and msvcp71.dll on another PC and copied them into the same directory</li>
</ol>
<p>With this in place, I was able to quickly connect to the <a href="http://www.gaia-gis.it/spatialite/resources.html">SpatiaLite demo database</a>:</p>
<p><img src="http://www.jasonbirch.com/nodes/wp-content/uploads/2010/08/spatialite-fdotb-dataconn.jpg" alt="" title="spatialite-fdotb-dataconn" width="437" height="358" class="alignnone size-full wp-image-522" /></p>
<p>And browse and visualize the data:</p>
<p><img src="http://www.jasonbirch.com/nodes/wp-content/uploads/2010/08/spatialite-fdotb-gridview.jpg" alt="" title="spatialite-fdotb-gridview" width="426" height="329" class="alignnone size-full wp-image-524" /><img src="http://www.jasonbirch.com/nodes/wp-content/uploads/2010/08/spatialite-fdotb-mapview.jpg" alt="" title="spatialite-fdotb-mapview" width="427" height="328" class="alignnone size-full wp-image-525" /></p>
<p>Confidence buoyed, I decided to take it a step further and attempt to connect to the same data in MapGuide.  The initial steps were the same as for FDO Toolbox (adding the provider to the MapGuide FDO folder).  </p>
<p>Once configured, I was able to quickly add a connection to the test database, but I had to manually hack in a coordinate system reference and map extents.  This is due to an incompatibility between SpatiaLite and MapGuide&#8217;s coordinate system handling, and I&#8217;m hoping that the <a href="http://www.gaia-gis.it/spatialite-2.4.0-3/changelog.html">WKT projection support in the next version of SpatiaLite</a> allows Haris to fix this.</p>
<p><img src="http://www.jasonbirch.com/nodes/wp-content/uploads/2010/08/spatialite-mapguide-datasource.jpg" alt="" title="spatialite-mapguide-datasource" width="500" height="344" class="alignnone size-full wp-image-526" /></p>
<p>With the data connection and its spatial context override in place, creating layer and map definitions was dead easy, and allowed me to quickly get to data visualization.</p>
<p><img src="http://www.jasonbirch.com/nodes/wp-content/uploads/2010/08/spatialite-mapguide-map.jpg" alt="" title="spatialite-mapguide-map" width="550" height="426" class="alignnone size-full wp-image-527" /></p>
<p>Next Up?  Making the SpatiaLite FDO provider work with <a href="http://www.georest.org/">GeoREST</a>.  Out of time for tonight though&#8230;</p>
<p><strong>UPDATE</strong> (2010-09-01):  I was able to get the SpatiaLite provider working with the current preview version of GeoREST with very little difficulty, and the next official build of GeoREST will probably include this provider.  If you&#8217;d like to play around with it earlier, you can download a totally unsupported package of <a rel="nofollow" href="http://www.jasonbirch.com/temp/GeoREST-1.1.3.SpatiaLite.x86.7z">GeoREST with Spatialite</a> from my temp files area for a limited time only :)</p>
<p>-J</p>
<p>Notes:  </p>
<p>1. <a href="http://fdo.osgeo.org/">FDO</a> is a geospatial object/relational mapping framework, allowing consistent programmatic access to dozens of GIS data formats.  It is used by<a href="http://mapguide.osgeo.org/"> MapGuide Open Source</a>, <a href="http://code.google.com/p/fdotoolbox/">FDO Toolbox</a>, <a href="http://www.georest.org/">GeoREST</a>, <a href="http://www.autodesk.com/geospatial">Autodesk&#8217;s geospatial products</a> like Topobase, MapGuide Enterprise and AutoCAD Map 3D, and is also included in applications like <a href="http://www.safe.com/">Safe Software</a>&#8216;s FME and <a href="http://www.1spatial.com/">1Spatial</a>&#8216;s MapRelate.</p>
<p>2. <a href="http://www.gaia-gis.it/spatialite/">SpatiaLite</a> takes <a href="http://www.sqlite.org/">SQLite</a>&#8216;s concept of database-in-a-file, and turns it into geodatabase-in-a-file, offering a full suite of geospatial query abilities in a lightweight extension to SQLite.  FDO already has a robust SQLite provider that uses its own open geometry format, metadata, and spatial functions.  In contrast, <a href="http://www.sl-king.com/index.html">SL-King</a>&#8216;s new provider is intended for users who prefer to use the SpatiaLite geometry format, and takes advantage of SpatiaLite&#8217;s built-in GIS capabilities.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasonbirch.com/nodes/2010/08/30/518/fdos-spatialite-support-goes-native/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Validating against the OGC KML Schema in jEdit</title>
		<link>http://www.jasonbirch.com/nodes/2009/01/25/267/validating-against-the-ogc-kml-schema-in-jedit/</link>
		<comments>http://www.jasonbirch.com/nodes/2009/01/25/267/validating-against-the-ogc-kml-schema-in-jedit/#comments</comments>
		<pubDate>Sun, 25 Jan 2009 08:03:06 +0000</pubDate>
		<dc:creator>Jason Birch</dc:creator>
				<category><![CDATA[Formats]]></category>
		<category><![CDATA[KML]]></category>
		<category><![CDATA[jedit]]></category>
		<category><![CDATA[OGC]]></category>
		<category><![CDATA[validate]]></category>

		<guid isPermaLink="false">http://www.jasonbirch.com/nodes/2009/01/25/267/validating-against-the-ogc-kml-schema-in-jedit/</guid>
		<description><![CDATA[The Google Earth Outreach team has a good little tutorial on validating KML as you type in jEdit.&#160; Unfortunately, it&#8217;s a little bit out-of-date, so here are some pointers for validating against the newer OGC 2.2 schema, using the current version of jEdit. Follow the video instructions above for setting up jEdit, with the following [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://earth.google.com/outreach/">Google Earth Outreach</a> team has a <a href="http://earth.google.com/outreach/tutorial_jedit.html">good little tutorial</a> on validating KML as you type in <a href="http://www.jedit.org/">jEdit</a>.&#160; Unfortunately, it&#8217;s a little bit out-of-date, so here are some pointers for validating against the newer OGC 2.2 schema, using the current version of jEdit.</p>
<p>Follow the video instructions above for setting up jEdit, with the following exception: when you go to dock Sidekick, you click on Sidekick instead of Structure Browser and then, in order to start parsing the document, you need to select XML mode:</p>
<p><a href="https://www.jasonbirch.com/nodes/wp-content/uploads/2009/01/image5.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="229" alt="image" src="https://www.jasonbirch.com/nodes/wp-content/uploads/2009/01/image-thumb2.png" width="209" border="0" /></a> </p>
<p>Once you have loaded your KML file, replace the root kml entity with the following instead of the older Google schemas, and you will be able to validate against the OGC&#8217;s KML and partial Atom schemas as you work:</p>
<div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &#39;Courier New&#39;, courier, monospace; background-color: #f4f4f4">
<div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #0000ff">&lt;</span><span style="color: #800000">kml</span> </pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">  <span style="color: #ff0000">xmlns</span><span style="color: #0000ff">=&quot;http://www.opengis.net/kml/2.2&quot;</span> </pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">  <span style="color: #ff0000">xmlns:kml</span><span style="color: #0000ff">=&quot;http://www.opengis.net/kml/2.2&quot;</span> </pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">  <span style="color: #ff0000">xmlns:atom</span><span style="color: #0000ff">=&quot;http://www.w3.org/2005/Atom&quot;</span></pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">  <span style="color: #ff0000">xmlns:xsi</span><span style="color: #0000ff">=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span></pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">  <span style="color: #ff0000">xsi:schemaLocation</span><span style="color: #0000ff">=&quot;</span></pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">    http://www.opengis.net/kml/2.2 http://schemas.opengis.net/kml/2.2.0/ogckml22.xsd</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">    http://www.w3.org/2005/Atom http://schemas.opengis.net/kml/2.2.0/atom-author-link.xsd&quot;</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #0000ff">&gt;</span></pre>
</p></div>
</div>
<p>One odd thing that I noticed in validating my KML.&#160; When I placed the &lt;name&gt; entity anywhere other than right after its parent entity (such as Document or Placemark) the parser complained that it was not valid.&#160; I don&#8217;t know if not having the &lt;name&gt; as the first entity is truly invalid, or if this is just a little quirk of the schema or the parser.&#160; The <a href="http://www.kmlvalidator.com/">Galdos KML Validator</a> throws the same error.</p>
<p>The main reason I went through setting this up is that I decided that I had to, in good conscience, ignore the part of the OGC KML written standard that constrains Atom relation types to &quot;related&quot;.&#160; Not specifying the correct type of relationship means that I am contributing to the downfall of society, or at least to a less meaningful GeoWeb.&#160; See my <a href="http://www.jasonbirch.com/nodes/?p=261">previous post</a> and some <a href="http://sgillies.net/blog/866/kml-and-atomlink">follow-up</a> at <a href="http://sgillies.net/blog/">Sean Gillies&#8217; blog</a> for more on this.&#160; Using jEdit allows me to ensure that my documents validate against the schema, which gives me at least some level of comfort when ignoring the online validator.</p>
<p>-J</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasonbirch.com/nodes/2009/01/25/267/validating-against-the-ogc-kml-schema-in-jedit/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>KML Spec Bizarro?</title>
		<link>http://www.jasonbirch.com/nodes/2009/01/20/261/kml-spec-bizarro/</link>
		<comments>http://www.jasonbirch.com/nodes/2009/01/20/261/kml-spec-bizarro/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 04:13:48 +0000</pubDate>
		<dc:creator>Jason Birch</dc:creator>
				<category><![CDATA[Formats]]></category>
		<category><![CDATA[Google Earth]]></category>
		<category><![CDATA[atom]]></category>
		<category><![CDATA[KML]]></category>
		<category><![CDATA[OGC]]></category>
		<category><![CDATA[specification]]></category>

		<guid isPermaLink="false">http://www.jasonbirch.com/nodes/?p=261</guid>
		<description><![CDATA[I&#8217;m working on some new KML resources and, just as I try to do for my HTML, I want to at least attempt to get it to validate against an official specification.&#160; For KML, this means the OGC KML specification. These resources will be single-feature, and will each be related to exactly one HTML representation [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m working on some new KML resources and, just as I try to do for my HTML, I want to at least attempt to get it to validate against an official specification.&#160; For KML, this means the OGC KML specification. </p>
<p>These resources will be single-feature, and will each be related to exactly one HTML representation of the same feature.&#160; Now, it seems logical to me that I would specify an atom:link with rel=&quot;alternate&quot; inside of these KML files, either at the Document level or perhaps at the Placemark level.</p>
<p>Unfortunately, from section 9.1.3.5.1 of the official <a href="http://www.opengeospatial.org/standards/kml/">OGC KML specification</a>:</p>
<blockquote><p>The atom:link rel attribute shall be present and its value shall be related.</p>
</blockquote>
<p>What the heck?&#160; I&#8217;m not an XML guy by any means, but I think this means that the best I can do is specify a &quot;I think I met that guy in a bar a couple years ago&quot; kind of relationship, when what I really want is something more like &quot;hey, that&#8217;s me in a dress shirt.&quot;</p>
<p>Now, if I&#8217;m right, the question is:&#160; do I exclude the atom:link element from my KML, do I include the element and settle for a generic relationship, or do I intentionally break compliance with the OGC specification.&#160; Tough choice.</p>
<p>-J</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasonbirch.com/nodes/2009/01/20/261/kml-spec-bizarro/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SQLite Spatial Files in FME 2009 through the Magic of FDO</title>
		<link>http://www.jasonbirch.com/nodes/2008/12/02/229/sqlite-spatial-files-in-fme-2009-through-the-magic-of-fdo/</link>
		<comments>http://www.jasonbirch.com/nodes/2008/12/02/229/sqlite-spatial-files-in-fme-2009-through-the-magic-of-fdo/#comments</comments>
		<pubDate>Wed, 03 Dec 2008 06:11:47 +0000</pubDate>
		<dc:creator>Jason Birch</dc:creator>
				<category><![CDATA[FDO]]></category>
		<category><![CDATA[FME]]></category>
		<category><![CDATA[Formats]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[SQLite]]></category>

		<guid isPermaLink="false">http://www.jasonbirch.com/nodes/?p=229</guid>
		<description><![CDATA[Writing the FDO/GDAL style of SQLite spatial files (see previous post for details) just got a LOT easier for those of us using Safe Software&#8217;s FME Desktop, even the affordable Base edition. Over the past month, developers at Safe Software and the author of the FDO SQLite provider have put some time into ensuring that [...]]]></description>
			<content:encoded><![CDATA[<p>Writing the <a href="http://trac.osgeo.org/fdo/wiki/FDORfc16">FDO/GDAL style</a> of SQLite spatial files (see <a href="http://www.jasonbirch.com/nodes/2008/05/06/184/sqlite-for-fdo-with-sugar-free-ogr/">previous post</a> for details) just got a LOT easier for those of us using Safe Software&#8217;s <a href="http://www.safe.com/products/desktop/overview.php">FME Desktop</a>, even the affordable <a href="http://www.safe.com/products/desktop/formats/index.php">Base edition</a>.</p>
<p>Over the past month, developers at Safe Software and the author of the FDO SQLite provider have put some time into ensuring that the SQLite provider will work properly with FME 2009.  Reading worked fine out of the box, but writing required a bit of effort.  FME needed datastore creation and schema writing added to their generic FDO writer, and the FDO SQLite provider needed to account for the way that FME writes to multiple schemas.</p>
<p>Here&#8217;s how you can take advantage of this provider in FME (and in other FDO 3.3 consumers, such as MapGuide Open Source 2.0):</p>
<ul>
<li><a href="http://www.jasonbirch.com/fdosqlite/FdoSQLiteProvider_3.3.0_r4270.zip">Download the unofficial binaries</a> for the SQLite provider from my site</li>
<li>Open this zipfile and copy the SQLiteProvider.dll file into your FDO directory (default c:\Program Files\FME\plugins\fdo\)</li>
<li>Make a backup of the providers.xml file in that directory, and then edit the original, adding the contents of the sqlite_provider_entry.xml file in an appropriate location.</li>
</ul>
<p>Once this installed, writing to SQLite from within FME is dead easy&#8230;</p>
<p>1. Add new FDO Destination Dataset:</p>
<p><img src="http://www.jasonbirch.com/nodes/wp-content/uploads/2008/12/sqlite_fme001.png" alt="" title="sqlite_fme001" width="405" height="190" class="alignnone size-full wp-image-231" /></p>
<p>2. Go to Settings and specify OSGeo.SQLite.3.3 as the provider name:</p>
<p><img src="http://www.jasonbirch.com/nodes/wp-content/uploads/2008/12/sqlite_fme002.png" alt="" title="sqlite_fme002" width="321" height="111" class="alignnone size-full wp-image-232" /></p>
<p>3: Specify the filename you want to write to:</p>
<p><img src="http://www.jasonbirch.com/nodes/wp-content/uploads/2008/12/sqlite_fme003.png" alt="" title="sqlite_fme003" width="320" height="169" class="alignnone size-full wp-image-233" /></p>
<p>4. Optionally, set a spatial reference system, and click on OK:</p>
<p><img src="http://www.jasonbirch.com/nodes/wp-content/uploads/2008/12/sqlite_fme004.png" alt="" title="sqlite_fme004" width="405" height="191" class="alignnone size-full wp-image-230" /></p>
<p>That&#8217;s it; now you can start adding tables to your SQLite file as you would any other destination dataset in FME!  </p>
<p>As far as I know, Safe will not be distributing the SQLite provider directly with FME 2009 (it&#8217;s still in beta) primarily because the provider is not officially being released for FDO 3.3, and partially because the provider is still under heavy development.  Fear not, though.  I am building this provider against the 3.3 branch as often as necessary, and will post binaries as I do.</p>
<p>The relative ease with which this format was supported by FME can be attributed to Safe&#8217;s foresight in exposing FDO directly, rather than just using it behind-the-scenes in their SDF3 writer.  They also allow <a href="http://www.safe.com/solutions/application/autocad.php">FME to act as an FDO provider</a>, which enables users of products that use FDO for their data layer (such as <a href="http://www.autodesk.com/map3d">AutoCAD Map 3D</a>) to access the full range of formats that FME supports.</p>
<p>-J</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasonbirch.com/nodes/2008/12/02/229/sqlite-spatial-files-in-fme-2009-through-the-magic-of-fdo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>FDO for Informix</title>
		<link>http://www.jasonbirch.com/nodes/2008/08/05/193/fdo-for-informix/</link>
		<comments>http://www.jasonbirch.com/nodes/2008/08/05/193/fdo-for-informix/#comments</comments>
		<pubDate>Wed, 06 Aug 2008 06:13:55 +0000</pubDate>
		<dc:creator>Jason Birch</dc:creator>
				<category><![CDATA[FDO]]></category>
		<category><![CDATA[Formats]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Informix]]></category>

		<guid isPermaLink="false">http://www.jasonbirch.com/nodes/?p=193</guid>
		<description><![CDATA[Boy, the folks at SL-King are on a roll. This hasn&#8217;t been announced officially yet, but the SL-King website, the Autodesk website and an FDO RFC (draft) all point to a new open source FDO provider for IBM&#8217;s Informix Dynamic Server. The closest I&#8217;ve got to Informix is seeing it in an ESRI employee&#8217;s custom [...]]]></description>
			<content:encoded><![CDATA[<p>Boy, the folks at SL-King are on a roll.  This hasn&#8217;t been announced officially yet, but the <a href="http://www.sl-king.com/FdoInformix/FdoInformix.html">SL-King website</a>, the <a href="http://usa.autodesk.com/adsk/servlet/item?siteID=123112&#038;id=8824908">Autodesk website</a> and an <a href="http://trac.osgeo.org/fdo/wiki/FDORfc25">FDO RFC</a> (draft) all point to a new open source FDO provider for IBM&#8217;s <a href="http://www.ibm.com/software/data/informix/">Informix Dynamic Server</a>.</p>
<p>The closest I&#8217;ve got to Informix is seeing it in an ESRI employee&#8217;s custom command prompt (&#8220;Informix Rules>&#8221; or something like that) at the 2001 UC, but I&#8217;m sure that this is great news for corporations that have data stored via the <a href="http://www.ibm.com/software/data/informix/blades/spatial/">Spatial DataBlade</a>.  FDO increases transparency for Informix data, allowing simple web-based publishing with MapGuide Open Source, and updates and map production using desktop applications such as Autodesk Map 3D.</p>
<p>-J</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasonbirch.com/nodes/2008/08/05/193/fdo-for-informix/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SQLite for FDO with Sugar-Free OGR Synchronicity</title>
		<link>http://www.jasonbirch.com/nodes/2008/05/06/184/sqlite-for-fdo-with-sugar-free-ogr/</link>
		<comments>http://www.jasonbirch.com/nodes/2008/05/06/184/sqlite-for-fdo-with-sugar-free-ogr/#comments</comments>
		<pubDate>Tue, 06 May 2008 08:24:39 +0000</pubDate>
		<dc:creator>Jason Birch</dc:creator>
				<category><![CDATA[FDO]]></category>
		<category><![CDATA[Formats]]></category>
		<category><![CDATA[MapGuide]]></category>
		<category><![CDATA[OSGeo]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[OGR]]></category>
		<category><![CDATA[Sexy]]></category>
		<category><![CDATA[SQLite]]></category>

		<guid isPermaLink="false">http://www.jasonbirch.com/nodes/?p=184</guid>
		<description><![CDATA[James&#8217; recent post about the GIS Interchange File reminded me that I&#8217;ve been meaning to discuss some recent activity on the SQLite front in both FDO and OGR. Traian Stanev recently proposed the creation of an SQLite provider for FDO. He was quickly arm-wrestled into supporting something close to OGC&#8217;s Simple Features for SQL specification, [...]]]></description>
			<content:encoded><![CDATA[<p>James&#8217; recent post about the <a href="http://www.spatiallyadjusted.com/2008/05/05/the-gis-interchange-file/">GIS Interchange File</a> reminded me that I&#8217;ve been meaning to discuss some recent activity on the <a href="http://www.sqlite.org/">SQLite</a> front in both <a href="http://fdo.osgeo.org/">FDO</a> and <a href="http://www.gdal.org/ogr/">OGR</a>.</p>
<p>Traian Stanev recently <a href="http://lists.osgeo.org/pipermail/fdo-internals/2008-March/001785.html">proposed</a> the creation of an SQLite provider for FDO.  He was quickly arm-wrestled into supporting something close to OGC&#8217;s <a href="http://www.opengeospatial.org/standards/sfs">Simple Features for SQL</a> specification, and working with Frank Warmerdam hammered out a GIS spec for SQLite that would work for both OGR and FDO.  The beauty is that it&#8217;s a single file and can be read by any of the existing SQLite tools.</p>
<p>Traian completed initial development of the SQLite provider a couple weeks ago and Frank expanded OGR&#8217;s SQLite support to understand this common specification (this work is in the GDAL/OGR trunk for inclusion in the 1.6 release).  These implementations have different strengths.  The FDO provider was written to be blazing fast, features an in-memory spatial index, and writes to the FDO binary format.  The OGR driver was written for maximum portability and allows writing WKT and WKB.  Both implementations will read all three geometry formats and understand the dimension and projection information stored in the OGC-derived metadata tables.</p>
<p>You can download a <a href="http://www.jasonbirch.com/fdosqlite/FdoSQLiteProvider_3.3.0_r4270.zip">totally unofficial build</a> of the FDO provider from my website if you want to try it out with MapGuide 2.0 or maybe even Autodesk Map 3D 2009.  I have successfully tested it in MapGuide with WKT, WKB, and FGF data.  Adding this provider to MapGuide is easy:</p>
<ul>
<li>Drop the three files in the zipfile into your Server/bin/fdo directory</li>
<li>Edit your main providers.xml file to include the SQLite provider using the included XML snippet</li>
<li>Restart MapGuide</li>
</ul>
<p>You will need some data.  Testing can be done with <a href="http://download.osgeo.org/gdal/data/sqlite3/">SQLite files from the OGR sample data directory</a>, but you will eventually want to use your own.  It&#8217;s fairly simple to convert SDF and SHP.  Open up a command window in your Server/bin/fdo directory and type something like:</p>
<p><code>SQLiteConverter.exe&nbsp;c:\src.sdf&nbsp;c:\dest.db</code></p>
<p>When creating a new data connection to this file, the provider only takes one configuration parameter: the full path to the file.  If you run into any bugs, please <a href="http://trac.osgeo.org/fdo/wiki/SubmitTicket">post them on the FDO Trac instance</a>.</p>
<p>OGR users that are tracking the trunk build can also try this out.  With some amazement, I recently found that the enhancements to this driver had already <a href="http://www.gdal.org/ogr/drv_sqlite.html">been documented</a>&#8230;  obviously OGR places a premium on timely docs.  ogr2ogr allows you to do a similar import operation, probably something like (untested):</p>
<p><code>ogr2ogr&nbsp;-f&nbsp;"SQLite"&nbsp;-dsco&nbsp;FORMAT=WKB&nbsp;dest.db&nbsp;src.shp<br />
</code></p>
<p>You can use additional <a href="http://www.gdal.org/ogr/ogr2ogr.html">ogr2ogr</a> arguments to ensure that destination spatial reference and geometry type are written to the metadata tables.</p>
<p>Interestingly enough, a common SQLite GIS specification has been kicked around for quite some time.  Last year it was <a href="http://lists.osgeo.org/pipermail/discuss/2007-November/002707.html">discussed on the OSGeo Discuss mailing list</a>, and more recently further discussion was held <a href="http://www.postgis.org/pipermail/postgis-users/2008-April/019117.html">on the PostGIS mailing list</a> and a <a href="http://sqlitegis.org/wiki/index.php?title=Main_Page">wiki page was set up</a> to collaborate on this idea.  Obviously, there is considerable interest within the community.  My personal hope is that this specification helps the idea of SQLite as a GIS data store take off.</p>
<p>One area where it could be improved is some kind of integration with Alessandro Furieri&#8217;s <a href="http://www.gaia-gis.it/spatialite/">SpatiaLite </a> extension for SQLite that allows common RDBMS GIS functionality in a native SQLite interface.  Unfortunately, neither Frank nor Traian had the cycles to integrate this extension&#8217;s data format into the specification or the code at this point.  Maybe we&#8217;ll get lucky and Alessandro will decide to somehow support this spec, but if not I hope there will be some convergence in the long run.</p>
<p>I know that there was more that I wanted to say, but it&#8217;s getting late and I don&#8217;t even have time to cut the extra gunk out of this post.  Happy SQLiting!</p>
<p>-J</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasonbirch.com/nodes/2008/05/06/184/sqlite-for-fdo-with-sugar-free-ogr/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>GeoRSS and Google Maps for Fire Response Notifications</title>
		<link>http://www.jasonbirch.com/nodes/2008/02/18/160/georss-and-google-maps-for-fire-response-notifications/</link>
		<comments>http://www.jasonbirch.com/nodes/2008/02/18/160/georss-and-google-maps-for-fire-response-notifications/#comments</comments>
		<pubDate>Mon, 18 Feb 2008 18:19:53 +0000</pubDate>
		<dc:creator>Jason Birch</dc:creator>
				<category><![CDATA[Formats]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Nanaimo]]></category>
		<category><![CDATA[FME]]></category>
		<category><![CDATA[GeoRSS]]></category>
		<category><![CDATA[Google Maps]]></category>

		<guid isPermaLink="false">http://www.jasonbirch.com/nodes/2008/02/18/160/georss-and-google-maps-for-fire-response-notifications/</guid>
		<description><![CDATA[One of the developers in my section (Chris McLuckie) has been working on a replacement for our creaky old fire incident notification system, and launched the new City of Nanaimo Fire Daily Calls page last week. If you&#8217;re interested, you can read the official press release (pdf). Basic improvements include: automatic pull from our FDM [...]]]></description>
			<content:encoded><![CDATA[<p>One of the developers in my section (Chris McLuckie) has been working on a replacement for our creaky old fire incident notification system, and launched the new <a href="http://www.nanaimo.ca/residents/index_inside.asp?id=171&#038;parent=19&#038;sub_collection=52">City of Nanaimo Fire Daily Calls</a> page last week.  If you&#8217;re interested, you can read the official <a href="http://www.nanaimo.ca/uploadedfiles/Site_Structure/Corporate_Services/Corporate_Administration/FireIncidentReport.pdf">press release</a> (pdf).</p>
<p>Basic improvements include:</p>
<ul>
<li>automatic pull from our <a href="http://www.fdmsoft.com/">FDM</a> Computer Aided Dispatch (CAD&#8230; a popular acronym) database, removing requirement for dispatchers to manually update this list</li>
<li>publication of the incidents in multiple formats (GeoRSS, HTML&#8230; KML planned for an intermediate update)</li>
<li>integration with Google Maps</li>
</ul>
<p>This is what the query interface for incidents looks like:</p>
<p><img src='http://www.jasonbirch.com/nodes/wp-content/uploads/2008/02/call_details1.png' alt='Nanaimo Fire Daily Calls incident detail' /></p>
<p>This is the embedded Google Map (using the <a href="http://code.google.com/apis/maps/documentation/reference.html#GGeoXml">GGeoXML</a> class to hit the GeoRSS feed) showing incidents for the selected day:</p>
<p><img src='http://www.jasonbirch.com/nodes/wp-content/uploads/2008/02/call_gmap1.png' alt='Nanaimo Fire Daily Calls embedded GMap' /></p>
<p>This is the basic statistics interface allowing users to see incident activity for a date range (which also has a similar Google Map embedded):</p>
<p><img src='http://www.jasonbirch.com/nodes/wp-content/uploads/2008/02/call_stats1.png' alt='Nanaimo Fire Daily Calls statistics interface' /></p>
<p>And this is what the GeoRSS feed looks like in Google Maps</p>
<p><img src='http://www.jasonbirch.com/nodes/wp-content/uploads/2008/02/call_google_maps.png' alt='Nanaimo Fire Daily Calls GeoRSS in Google Maps' /></p>
<p>And now for the technical stuff&#8230;</p>
<p>Chris has put together a fairly strong process for extracting and displaying this information publicly, consisting of several components:</p>
<ul>
<li>A monthly FME process that reads the current 9-1-1 streets shape file and places it into a normalized database structure (one-to-many between lines and coordinates).  This allows easy formatting of coordinates for different output formats (GeoRSS, KML, etc) in native ASP.Net.</li>
<li>A SQL Server Integration Services job that pulls initial incident data from our CAD database, as well as updated information from the RMS (records management system), generalizes it to block ranges to reduce privacy concerns, and writes it our publicly accessible webserver.</li>
<li>An ASP.Net web application that transforms an XML serialized data set into GeoRSS (and eventually other formats) using XSLT.</li>
<li>An ASP.Net web application that provides the rudimentary user interface, including the incident query mechanism, incident statistics, and Google Maps integration.</li>
</ul>
<p>The current applications are accessed via IFRAMEs because although our standard for web apps on our main site has changed from ASP to ASP.Net, our web site migration is still under way.  Once the web site is redeveloped, these will be standard non-encapsulated web apps.</p>
<p>This is definitely just a starting point for us; the framework that has been used for this application was designed so that we can add other data sources that make sense for GeoRSS syndication, such as recent business licenses, building permits, etc.  This aligns with our website redevelopment, where we are using RSS/Atom as an alternate access mechanism wherever possible.</p>
<p>As an initial project, there are certainly limitations with this implementation.  For instance, we haven&#8217;t defined an API for pulling down specific categories or date ranges from the RSS feed.  Also, because the GGeoMap class doesn&#8217;t expose properties of specific features, we were unable to link the incident rows with the map (pan and pop-up).  There are third-party interfaces to Google Maps (<a href="http://www.dyasdesigns.com/geoxml/">GeoXML</a>, <a href="http://econym.googlepages.com/egeoxml.htm">EGeoXML</a>) that work around this, and of course the option of just creating the lines ourselves, but we were trying to keep coding and dependencies to a minimum.  There is a <a href="http://code.google.com/p/gmaps-api-issues/issues/detail?id=139">ticket in the Google Maps API issue tracker for this</a>, so hopefully it will be addressed eventually&#8230;</p>
<p>Ideally we&#8217;d be using a spatially-enable database (such as PostGIS) as the underlying data store for this application, but we don&#8217;t have PostGIS in place on our public webserver yet.</p>
<p>-J</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasonbirch.com/nodes/2008/02/18/160/georss-and-google-maps-for-fire-response-notifications/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>KML Schema Rides Again</title>
		<link>http://www.jasonbirch.com/nodes/2007/09/08/129/kml-schema-rides-again/</link>
		<comments>http://www.jasonbirch.com/nodes/2007/09/08/129/kml-schema-rides-again/#comments</comments>
		<pubDate>Sat, 08 Sep 2007 09:23:00 +0000</pubDate>
		<dc:creator>Jason Birch</dc:creator>
				<category><![CDATA[Formats]]></category>
		<category><![CDATA[Google Earth]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.jasonbirch.com/nodes/2007/09/08/129/kml-schema-rides-again/</guid>
		<description><![CDATA[I just read the news about the new ExtendedData tag in KML 2.2. With one mighty stroke of the pen, Google has saved the Schema tag, and my sanity along with it! What does it mean? Basically: KML can still act as a self-contained data exchange format, while getting rid of the nasty part of [...]]]></description>
			<content:encoded><![CDATA[<p>I just <a href="http://google-latlong.blogspot.com/2007/09/kml-22.html">read the news</a> about the new <a href="http://code.google.com/apis/kml/documentation/extendeddata.html">ExtendedData</a> tag in KML 2.2.  With one mighty stroke of the pen, Google has saved the Schema tag, and my sanity along with it!</p>
<p>What does it mean?  Basically:  KML can still act as a self-contained data exchange format, while getting rid of the nasty part of the original &lt;Schema&gt; tag that defined new elements on the fly.</p>
<p>To illustrate the changes, I&#8217;ll take you through my <a href="http://www.jasonbirch.com/nodes/2007/06/29/101/i-heart-kml-schema/">previous example</a> of Sammy G Newt.  Here he is in glorious colour under the new ExtendedData system:</p>
<p><a href="http://www.jasonbirch.com/files/newt_content.kml"><img id="image128" alt="Sammy in the sky with diamonds..." src="http://www.jasonbirch.com/nodes/wp-content/uploads/2007/09/sammyridesagain.png" /></a></p>
<p>The first part of this new system is defining the schema; you can see how to do this here:</p>
<p><code></p>
<p>&nbsp;&nbsp;&lt;Schema name="newt" id="newt_schema"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;SimpleField name="id" type="int"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;displayName&gt;&lt;![CDATA[&lt;b&gt;ID&lt;/b&gt;:]]&gt;&lt;/displayName&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/SimpleField&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;SimpleField name="breed" type="string"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;displayName&gt;&lt;![CDATA[&lt;b&gt;Breed&lt;/b&gt;:]]&gt;&lt;/displayName&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/SimpleField&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;SimpleField name="slime_factor" type="double"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;displayName&gt;&lt;![CDATA[&lt;b&gt;Slime Factor&lt;/b&gt;:]]&gt;&lt;/displayName&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/SimpleField&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;SimpleField name="tail_length" type="int"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;displayName&gt;&lt;![CDATA[&lt;b&gt;Tail Length&lt;/b&gt;:]]&gt;&lt;/displayName&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/SimpleField&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;SimpleField name="relative_id" type="string" /&gt;<br />
&nbsp;&nbsp;&lt;/Schema&gt;</p>
<p></code></p>
<p>Looks pretty basic, right?  Not much has changed in the Schema tag, except that has name and id attributes, and there is now an optional displayName element for each field.</p>
<p>OK, now that you&#8217;ve got the schema, you want to create a BalloonStyle that takes advantage of that schema.  Here&#8217;s mine:</p>
<p><code></p>
<p>&nbsp;&nbsp;&nbsp;&lt;BalloonStyle&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;bgColor&gt;ffffaa90&lt;/bgColor&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;textColor&gt;ffffffff&lt;/textColor&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;text&gt;&lt;![CDATA[<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;h1&gt;$[name]&lt;/h1&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;table&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;$[newt/breed/displayName]&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;$[newt/breed]&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;$[newt/tail_length/displayName]&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;$[newt/tail_length]&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;$[newt/slime_factor/displayName]&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;$[newt/slime_factor]&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td colspan="2"&gt;&lt;img src="http://www.jasonbirch.com/files/jason_small.jpg?id=$[newt/id]" /&gt;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/table&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;a href="#$[newt/relative_id];balloonFlyto"&gt;Please visit my Sister!&lt;/a&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;]]&gt;&lt;/text&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/BalloonStyle&gt;</p>
<p></code></p>
<p>Can I hear the ah-ha&#8217;s?</p>
<p>There are a couple neat things here.  First, it&#8217;s pretty obvious that if you want the data, you use the format $[nodeName/fieldName], and if you want the display name you use $[nodeName/fieldName/displayName].  Look close at the &lt;a&gt; tag though&#8230;  I am using an identifier stored in the extended data area to link to a different record in the same KML file, using its ID.  This will be great for &#8220;previous&#8221; and &#8220;next&#8221; applications among other things.  This could just as easily have been used to point to a different Placemark within a remote KML file.</p>
<p>Now that we have a schema and a style, we can create some some content that references these:</p>
<p><code></p>
<p>&nbsp;&nbsp;&lt;Placemark id="sammyg"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;name&gt;Sammy G&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;styleUrl&gt;#newt_style_boy&lt;/styleUrl&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;ExtendedData&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;SchemaData schemaUrl="#newt_schema"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;SimpleData name="id"&gt;36&lt;/SimpleData&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;SimpleData name="breed"&gt;Common Orange Slitherer&lt;/SimpleData&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;SimpleData name="slime_factor"&gt;7.2&lt;/SimpleData&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;SimpleData name="tail_length"&gt;6&lt;/SimpleData&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;SimpleData name="relative_id"&gt;phyllisk&lt;/SimpleData&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/SchemaData&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/ExtendedData&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;Point&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;coordinates&gt;1.75,1.75,0&lt;/coordinates&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/Point&gt;<br />
&nbsp;&nbsp;&lt;/Placemark&gt;</p>
<p></code></p>
<p>So, what&#8217;s special about this?  Two things.  First, I didn&#8217;t magically create any new KML tags on the fly.  Second, you can see that I am referencing both the style and the schema by URL.  This means that you can either store all of your schema, markup, and code in one file, or you can break them out into as many individual files as you would like.  You can have a look at my completed example here:</p>
<p>One File:</p>
<ul>
<li><a href="http://www.jasonbirch.com/files/newt_combined.kml">Combined KML</a></li>
<li><a href="http://www.jasonbirch.com/files/newt_combined.phps">Combined source</a></li>
</ul>
<p>Three files:</p>
<ul>
<li>Content <a href="http://www.jasonbirch.com/files/newt_content.kml">KML</a>  |  <a href="http://www.jasonbirch.com/files/newt_content.phps">source</a></li>
<li>Schema <a href="http://www.jasonbirch.com/files/newt_schema.kml">KML</a>  |  <a href="http://www.jasonbirch.com/files/newt_schema.phps">source</a></li>
<li>Style <a href="http://www.jasonbirch.com/files/newt_style.kml">KML</a>  |  <a href="http://www.jasonbirch.com/files/newt_style.phps">source</a></li>
</ul>
<p>Anyway, this last-minute addition to KML 2.2 has made me pretty happy.  If you have any questions or comments about it, be sure to chime in on the <a href="http://groups.google.com/group/kml-support-advanced/browse_frm/thread/c762b62b50548ef7/48651bcc2b026d5a#48651bcc2b026d5a">official thread</a>.</p>
<p>-J</p>
<p>P.S.  Another thing that I noticed in perusing the documentation is the ability to use <a href="http://code.google.com/apis/kml/documentation/kml_tags_beta1.html#atomauthor">atom tags to link</a> from a KML entity back to its web representation.  This is important because it adds another vector for Google to use when assigning relevance to KML files in spatial search.  I&#8217;m not an AtomPub expert, but I would imagine that it could also be used to allow a smart client to update features on the fly?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasonbirch.com/nodes/2007/09/08/129/kml-schema-rides-again/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Kilroy Was AtomPub</title>
		<link>http://www.jasonbirch.com/nodes/2007/09/06/126/kilroy-was-atompub/</link>
		<comments>http://www.jasonbirch.com/nodes/2007/09/06/126/kilroy-was-atompub/#comments</comments>
		<pubDate>Fri, 07 Sep 2007 03:48:36 +0000</pubDate>
		<dc:creator>Jason Birch</dc:creator>
				<category><![CDATA[Formats]]></category>
		<category><![CDATA[Loose Integration]]></category>

		<guid isPermaLink="false">http://www.jasonbirch.com/nodes/2007/09/06/126/kilroy-was-atompub/</guid>
		<description><![CDATA[I was happy to hear Charile&#8217;s news of the first successful Geo Web Rest interoperability day. I had seen Christopher&#8217;s post about a GeoRSS/AtomPub demo over at MetaCarta Labs earlier, and just had to spend some time checking it out. Being the cultured guy that I am, I chose to engage is some highly artistic [...]]]></description>
			<content:encoded><![CDATA[<p>I was happy to hear <a href="http://cfis.savagexi.com/articles/2007/09/06/gis-interoperability-via-atompub">Charile&#8217;s news</a> of the first successful <a href="http://groups.google.com/group/geo-web-rest/">Geo Web Rest</a> interoperability day.  I had seen <a href="http://labs.metacarta.com/blog/25.entry/browser-based-atompub-gis-client/">Christopher&#8217;s post</a> about a <a href="http://georss.org/">GeoRSS</a>/<a href="http://bitworking.org/projects/atom/draft-ietf-atompub-protocol-17.html">AtomPub</a> demo over at <a href="http://labs.metacarta.com/atompub/">MetaCarta Labs</a> earlier, and just had to spend some time checking it out.</p>
<p>Being the cultured guy that I am, I chose to engage is some highly artistic feature editing in this demo:</p>
<p><img id="image125" alt="Kilroy wuz here" src="http://www.jasonbirch.com/nodes/wp-content/uploads/2007/09/kilroyinappdemo.png" /></p>
<p>The OpenLayers demo is highly responsive.  The editing tools are intuitive, and even the node insertion feature is well implemented. What is most impressive though is what is going on in the background.  Every time you insert/update a feature, an AtomPub operation is triggered.  The data that is stored via these operations is (of course) also available as a GeoRSS feed, allowing you to <a href="http://labs.metacarta.com/atompub/featureserver/featureserver.cgi/scribble/recent.atom?maxfeatures=10">view it in any RSS browser</a>, or even in <a href="http://maps.google.com/maps?f=q&#038;hl=en&#038;geocode=&#038;q=http:%2F%2Flabs.metacarta.com%2Fatompub%2Ffeatureserver%2Ffeatureserver.cgi%2Fscribble%2Frecent.atom%3Fmaxfeatures%3D60&#038;ie=UTF8&#038;ll=28.459033,47.8125&#038;spn=43.717202,76.640625&#038;z=3&#038;om=0">Google Maps</a>:</p>
<p><a href="http://maps.google.com/maps?f=q&#038;hl=en&#038;geocode=&#038;q=http:%2F%2Flabs.metacarta.com%2Fatompub%2Ffeatureserver%2Ffeatureserver.cgi%2Fscribble%2Frecent.atom%3Fmaxfeatures%3D60&#038;ie=UTF8&#038;ll=28.459033,47.8125&#038;spn=43.717202,76.640625&#038;z=3&#038;om=0"><img id="image127" alt="Kilroy Was Also Hanging Out In Mountain View" src="http://www.jasonbirch.com/nodes/wp-content/uploads/2007/09/kilroyingooglemaps.png" boder="0" /></a></p>
<p>If you look close, you will see that Kilroy&#8217;s nose&#8217;s shape changed between the two screen shots.  In the two minutes it took me to get back to take a screenshot of my beautiful artwork in the original interface, some <em><strong>vandal</strong></em> had come by and given him a huge proboscis. :)</p>
<p>I did suffer from some disappointment in my experimentation, though not with this service.  I tried to pull this feed through Yahoo Pipes and do something interesting with it, and belatedly remembered how poor their GeoRSS support is.  If anyone from Yahoo is listening:  please add support for full GeoRSS geometries.  Points don&#8217;t cut it any more.</p>
<p>Anyway, in my opinion this represents the future of GIS interoperability.  Look at how AtomPub ties in with some of the service chaining (<a href="http://www.featureserver.org/">featureserver</a>/<a href="http://www.spatialreference.org/">spatialreference</a>/<a href="http://pipes.yahoo.com/pipes/">yahoopipes</a>/<a href="http://www.safe.com/">fme</a>) stuff I <a href="http://www.jasonbirch.com/nodes/2007/09/05/116/json-and-geojson-in-fme/">mentioned yesterday</a>.  As richer client tools such as <a href="http://earth.google.com/">Google Earth</a> and other proprietary and open source desktop GIS begin to play ball, I believe that we will see a revolution in social mapping.  Anyone not paying attention had better smarten up.  It&#8217;s no longer about ignoring the elephant; now it&#8217;s about getting out from under the steamroller.</p>
<p>-J</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasonbirch.com/nodes/2007/09/06/126/kilroy-was-atompub/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSON and GeoJSON in FME</title>
		<link>http://www.jasonbirch.com/nodes/2007/09/05/116/json-and-geojson-in-fme/</link>
		<comments>http://www.jasonbirch.com/nodes/2007/09/05/116/json-and-geojson-in-fme/#comments</comments>
		<pubDate>Wed, 05 Sep 2007 09:49:41 +0000</pubDate>
		<dc:creator>Jason Birch</dc:creator>
				<category><![CDATA[Data Transformation]]></category>
		<category><![CDATA[FME]]></category>
		<category><![CDATA[Formats]]></category>
		<category><![CDATA[Loose Integration]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.jasonbirch.com/nodes/2007/09/05/116/json-and-geojson-in-fme/</guid>
		<description><![CDATA[Many of you know about JSON, an object serialization scheme that has rapidly gained acceptance in AJAX-style applications. What you may not know is that there is an effort to standardise the representation of JSON-ified spatial features, known as GeoJSON. FME is usually quick to support new formats (like KML and GeoRSS) but this time [...]]]></description>
			<content:encoded><![CDATA[<p>Many of you know about <a href="http://www.json.org/">JSON</a>, an object serialization scheme that has rapidly gained acceptance in AJAX-style applications.  What you may not know is that there is an effort to standardise the representation of JSON-ified spatial features, known as <a href="http://wiki.geojson.org/Main_Page">GeoJSON</a>.</p>
<p><a href="http://www.safe.com/">FME</a> is usually quick to support new formats (like KML and GeoRSS) but this time Safe has surpassed themselves, getting early JSON and GeoJSON support into their betas before the GeoJSON specification has reached a release version.  Tonight I took some time out to play with this new support.</p>
<p>The basis of JSON support in FME is provided by two new read/write formats: JSON and GeoJSON.  These new formats are augmented by two new transformers:  JSONExploder and JSONExtractor.  To get started, I&#8217;m going to show you how to extract data from a JSON source I happen to have lying around (it&#8217;s <a href="http://pipes.yahoo.com/pipes/pipe.info?_id=cnolDm_Z2xG6wefdJZhxuA">publicly available</a> at Yahoo Pipes), which looks like this:</p>
<p><img id="image120" alt="JSON Raw" src="http://www.jasonbirch.com/nodes/wp-content/uploads/2007/09/json_raw.png" /></p>
<p>When you first import this data source into FME, it is imported with the top level of attributes broken out.  In this case, Pipes returns a top-level object with several attributes (link, description, etc) that you can see in my test workspace below:</p>
<p><img id="image115" alt="JSON Workspace" src="http://www.jasonbirch.com/nodes/wp-content/uploads/2007/09/fme_json_processing.png" /></p>
<p>Now, this isn&#8217;t much use, because my features are hidden inside the &#8220;items&#8221; attribute.  In order to get them out, I first need to explode my single object into multiple features.  The new JSONExploder transformer comes to the rescue here:</p>
<p><img id="image117" alt="JSONExploder" src="http://www.jasonbirch.com/nodes/wp-content/uploads/2007/09/fme_jsonexploder.png" /></p>
<p>Now, I have a unique feature for each of my feed items, but I really want some of the nested attributes.  In particular, I want the description from the root of the item, and the nested y:location["lat"] and y:location["lon"] attributes.  The JSONExtractor makes it easy to pull these out into new attributes:</p>
<p><img id="image118" alt="JSONExtractor" src="http://www.jasonbirch.com/nodes/wp-content/uploads/2007/09/fme_jsonextractor.png" /></p>
<p>And once adding a couple more of these, each of my features has some nice attributes attached to it, which I could then turn into points if I wanted:</p>
<p><img id="image119" alt="JSON Attributes" src="http://www.jasonbirch.com/nodes/wp-content/uploads/2007/09/fme_json_attributes.png" /></p>
<p>OK, so that&#8217;s kinda cool from a straight ETL standpoint.  I can take in JSON, mess with it, and then pump it out into whatever format I want.  But the fun stuff is when you start getting into GeoJSON.  Fortunately there are a couple early adopters, <a href="http://crschmidt.net/">Christopher Schmidt</a> and <a href="http://hobu.biz/the_pitch">Howard Butler</a>, who gave me some feeds to play around with.  The first of these comes from Christopher&#8217;s super-flexible <a href="http://www.featureserver.org/">FeatureServer</a> application (check it out, it&#8217;s open source):</p>
<p><a href="http://www.featureserver.org/demo.html"><img id="image121" alt="FeatureServer Demo in OpenLayers" src="http://www.jasonbirch.com/nodes/wp-content/uploads/2007/09/fs_ol_demo.png" border="0" /></a></p>
<p>The features displayed on this <a href="http://www.openlayers.org/">OpenLayers</a> map can be easily downloaded from FeatureServer in GeoJSON format (or KML, or GeoRSS, or whatever).  The URL for the GeoJSON representation is:</p>
<p>http://featureserver.org/featureserver.cgi/scribble?format=geojson</p>
<p>Pulling this into FME is as simple as creating a new FME data source, and specifying the URL:</p>
<p><img id="image122" alt="Add GeoJSON" src="http://www.jasonbirch.com/nodes/wp-content/uploads/2007/09/fme_add_geojson.png" /></p>
<p>As you can see, you can then treat this data like any other spatial data source:</p>
<p><img id="image123" alt="GeoJSON Visualizer" src="http://www.jasonbirch.com/nodes/wp-content/uploads/2007/09/geojson_fs_vis.png" /></p>
<p>Now, for a final example&#8230;  Howard has a GeoJSON resource collection of counties in Iowa, accessible in a pattern something like this:</p>
<p>http://geoservices.hobu.biz/political/json/johnson</p>
<p>Now we could take this feature, in its source projection of UTM Zone 15N NAD83, but Howard&#8217;s put together a really nifty (non-commercial use only, unless you want to pay Howard some $$$) JSON-based web processing projection service.  Not only that, but he&#8217;s also made it smart enough to interpret projections referenced locally, but also from the oh-so-cool (and built as a collaborative effort between Christopher and Howard) <a href="http://www.spatialreference.org/">SpatialReference.org</a>.  So, all you need to do is feed it the URL of your source data, the url of your source CRS (<a href="http://spatialreference.org/ref/epsg/26915/">http://spatialreference.org/ref/epsg/26915/</a>) and the url of your destination CRS (<a href="http://spatialreference.org/ref/epsg/4326/">http://spatialreference.org/ref/epsg/4326/</a>).  Like so:</p>
<p>http://geoservices.hobu.biz/project/?url=%22http://geoservices.hobu.biz/political/json/johnson%22&#038;inref=http://spatialreference.org/ref/epsg/26915/proj4/&#038;outref=http://spatialreference.org/ref/epsg/4326/proj4/</p>
<p>And, as just another link in the dynamic web chain, FME can read this transformed JSON feature:</p>
<p><img id="image124" alt="HoBu GeoJSON Example" src="http://www.jasonbirch.com/nodes/wp-content/uploads/2007/09/geojson_hobu_vis.png" /></p>
<p>Now, for desktop FME users, this gives us &#8220;Pipes on Steroids&#8221;: all the mashup flexibility of Yahoo Pipes, with the huge format support and rich processing model of FME.  As cool as this is, I think the real power will be seen whenever Safe integrates this functionality into their Server product.  It will allow them to play well on both the &#8220;enterprise&#8221; traditional GML/WFS/etc level and on the neogeography JSON/GeoRSS/KML mashup level with a single product from a single (or multiple if you want) data source.  For organisations that want turn-key interoperability solutions, <a href="http://www.fmepedia.com/index.php/What_is_FME_Server">FME Server</a> is going to rock your world.</p>
<p>-J</p>
<p>P.S.  I&#8217;m thinking about getting a personalized plate that says GEO JSN :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasonbirch.com/nodes/2007/09/05/116/json-and-geojson-in-fme/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
