A few weeks ago, I posted about some .Net wrappers I created for the GeoIQ API. Due to ongoing project work, I have continued to extend them by adding methods to wrap GeoIQ analytical capabilities. Despite the recent acquistion of GeoIQ by Esri, it’s my understanding that GeoCommons and existing GeoIQ installations will continue for some time. That’s good, because analytics on the GeoIQ platform are powerful and fairly easy to use. This post will demonstrate how to use analytics in a .Net application.
As previously posted, the .Net wrappers can be found on github here.
The GeoIQ platform offers several functions to analyze data sets hosted on a GeoIQ instance or GeoCommons. I have not yet wrapped all of the functions but am working my way through them as I can.
For this post, I will intersect the locations of US GISPs as of 1/26/2011 with the Maryland Zip Code Boundaries to produce a data set containing the locations of GISPs in Maryland, depicted in the map below.
Okay, everybody calm the hell down. Anyone who thinks that the Esri acquisition of GeoIQ is strange hasn’t been paying attention to two things: 1) the direction that Esri says they want to go and 2) what the GeoIQ platform really is. I would be very surprised if GeoIQ becomes the 2012 version of Atlas GIS. This acquisition/merger makes more sense than may be initially apparent.
It’s no secret that I’ve worked with Esri tools for a long time and my recent work with the GeoIQ platform has been well-documented on this blog, including work integrating the two platforms at the API level. Based on what I’ve seen from both companies, here are thoughts on why I think this move makes a lot of sense:
A while back, I built a small interface between GeoIQ/GeoCommons and ArcGIS Desktop. From there, it became more of a full-fledged toolbar for ArcGIS. During that effort, I began developing some .Net classes to wrap the GeoIQ RESTful API. As we progressed with the toolbar, my colleague Hugo Estrada also contributed to the library.
The original intent was to wrap the entire API but it turns out that we were undertaking this in the middle of GeoIQ’s upgrade to version 2.0. In the intervening time, we got some projects implementing the GeoIQ platform for end users (such as the Climascope portal that Andrew Turner recently blogged about).
In my previous post, I described how I used a Python script to scrape power outage information from a local web site and convert it into an RSS feed. In this post, I’ll show how I used GeoCommons to visualize the changing information over time.
The process starts by creating a data set in GeoCommmons based on a URL link to the feed created in the previous post. The general process for doing that can be found here in the GeoCommons documentation.
I find myself pointing people to GeoCommons for data more often these days. With over 50,000 data sets, there’s a lot there. The people I work with seem to usually be able to find data of value there so I’ve been putting a little time into making it easier to get data from GeoCommons. As I’ve mentioned before, many of them are long-standing ESRI users. While they are becoming more aware of alternate tools and data sources, it is still important for them to be able to get data into the ESRI environment where their custom tools reside.
Given the content of my recent posts, it’s no secret that my recent project work has involved the ESRI Silverlight API so I decided extend it to more easily access data from GeoCommons.
Recently, GeoIQ pubished an update to their RESTful API that includes a “Features API,” which gives you a little more direct access to the features in a GeoIQ data set (GeoIQ is the platform upon which GeoCommons is built). Previously, if I needed to access data from GeoCommons in the ESRI Silverlight API, I would just access it as KML using the native KmlLayer class. The GeoIQ Features API, however, offers more fine-grained control over how much data we return in the form of various query parameters. Currently, the API only returns JSON (GeoIQ’s own syntax or GeoJSON) so it was time to do something different.