<?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>jduck.net &#187; gis</title>
	<atom:link href="http://jduck.net/category/gis/feed/" rel="self" type="application/rss+xml" />
	<link>http://jduck.net</link>
	<description></description>
	<lastBuildDate>Fri, 02 Jul 2010 13:01:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Getting to know PostGIS Part II</title>
		<link>http://jduck.net/2009/01/30/getting-to-know-postgis-part-ii/</link>
		<comments>http://jduck.net/2009/01/30/getting-to-know-postgis-part-ii/#comments</comments>
		<pubDate>Fri, 30 Jan 2009 19:27:36 +0000</pubDate>
		<dc:creator>Jonah</dc:creator>
				<category><![CDATA[geospatial]]></category>
		<category><![CDATA[gis]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[oss]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://jduck.net/?p=131</guid>
		<description><![CDATA[So its been over six months since I made my first tutorial post about PostGIS. I now use PostGIS on a regular basis and thought it would be good to update the tutorial with some meat on how to use PostGIS. Get some data and import it Grab populated places points wget http://edcftp.cr.usgs.gov/pub/data/nationalatlas/citiesx020.tar.gz Grab US [...]]]></description>
			<content:encoded><![CDATA[<p>So its been over six months since I made <a href="http://jduck.net/2007/11/06/getting-to-know-postgis/">my first tutorial</a> post about PostGIS.  I now use PostGIS on a regular basis and thought it would be good to update the tutorial with some meat on how to use PostGIS.</p>
<h3>Get some data and import it</h3>
<h4>Grab populated places points</h4>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>edcftp.cr.usgs.gov<span style="color: #000000; font-weight: bold;">/</span>pub<span style="color: #000000; font-weight: bold;">/</span>data<span style="color: #000000; font-weight: bold;">/</span>nationalatlas<span style="color: #000000; font-weight: bold;">/</span>citiesx020.tar.gz</pre></div></div>

<p>Grab US counties map:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>edcftp.cr.usgs.gov<span style="color: #000000; font-weight: bold;">/</span>pub<span style="color: #000000; font-weight: bold;">/</span>data<span style="color: #000000; font-weight: bold;">/</span>nationalatlas<span style="color: #000000; font-weight: bold;">/</span>countyp020.tar.gz</pre></div></div>

<p>Lots more data available in the <a href="http://www.nationalatlas.gov/atlasftp.html">National Atlas</a><br />
<span id="more-131"></span></p>
<h4>Extract shapefiles from the two archives</h4>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-xzvf</span> citiesx020.tar.gz
<span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-xzvf</span>  countyp020.tar.gz</pre></div></div>

<h4>Ogrinfo the files to have a look at them</h4>
<pre>
ogrinfo citiesx020.shp
INFO: Open of `citiesx020.shp'
      using driver `ESRI Shapefile' successful.
1: citiesx020 (Point) 

ogrinfo countyp020.shp
INFO: Open of `countyp020.shp'
      using driver `ESRI Shapefile' successful.
1: countyp020 (Polygon)
</pre>
<p>Notice that the cities shapefile is a point layer and the county layer is a polygon layer.</p>
<h4>Import the two shape files into your PostGIS db </h4>
<p>To get started with PostGIS see my <a href="http://jduck.net/2007/11/06/getting-to-know-postgis/">first tutorial</a>.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">ogr2ogr <span style="color: #660033;">-f</span> <span style="color: #ff0000;">&quot;PostgreSQL&quot;</span> -s_srs EPSG:<span style="color: #000000;">4269</span> <span style="color: #ff0000;">&quot;PG:dbname=mydbname&quot;</span> countyp020.shp <span style="color: #660033;">-nln</span> us_counties
ogr2ogr <span style="color: #660033;">-f</span> <span style="color: #ff0000;">&quot;PostgreSQL&quot;</span> -s_srs EPSG:<span style="color: #000000;">4269</span> <span style="color: #ff0000;">&quot;PG:dbname=mydbname&quot;</span> citiesx020.shp <span style="color: #660033;">-nln</span> us_cities</pre></div></div>

<p>Make sure you change mydbname to your database&#8217;s name.</p>
<li>-f &#8220;PostgreSQL&#8221; says that our destination &#8220;file type&#8221; is a PostgreSQL database</li>
<li>The -s_srs sets the source spatial reference system for the shapefiles.  Shapefiles from the National Atlas do not have a .prj file which defines their projection, so I looked in the .txt file which came with each archive from the National Atlas and found that the they are in <a href="http://spatialreference.org/ref/epsg/4269/">NAD83</a>, or EPSG:4269</li>
<li>&#8220;PG:dbname=mydbname&#8221; tells ogr2ogr what your destination is (in this case a PostGIS server).  More options are possible in the <a href="http://gdal.org/ogr/drv_pg.html">OGR driver</a></li>
<li>the shapfile name specifies the source</li>
<li>-nln specifies a new layer name which will be the name of the table in our database</li>
<h4>Checking the Import</h4>
<pre>
psql mydbname
mydbname# \d us_cities
                                   Table "public.us_cities"
    Column    |       Type       |                          Modifiers
--------------+------------------+-------------------------------------------------------------
 ogc_fid      | integer          | not null default nextval('us_cities_ogc_fid_seq'::regclass)
 wkb_geometry | geometry         |
 citiesx020   | double precision |
 feature      | character(27)    |
 name         | character(48)    |
 pop_range    | character(21)    |
 pop_2000     | numeric(8,0)     |
 fips55       | character(5)     |
 county       | character(55)    |
 fips         | character(5)     |
 state        | character(2)     |
 state_fips   | character(2)     |
 display      | numeric(1,0)     |
Indexes:
    "us_cities_pk" PRIMARY KEY, btree (ogc_fid)
    "us_cities_geom_idx" gist (wkb_geometry)
Check constraints:
    "enforce_dims_wkb_geometry" CHECK (ndims(wkb_geometry) = 2)
    "enforce_geotype_wkb_geometry" CHECK (geometrytype(wkb_geometry) = 'POINT'::text OR wkb_geometry IS NULL)
    "enforce_srid_wkb_geometry" CHECK (srid(wkb_geometry) = -1)
</pre>
<p>You can see that ogr2ogr has imported the shapefile, created a primary key (ogc_fid) and created a spatial index. What you can&#8217;t see is that ogr2ogr was also nice enough to add an entry to the geometry_columns table so that postgis tools know that there is a geometry column (wkb_geometry) in this table.</p>
<h4>Looking at the Data</h4>
<p>Lets fire off <a href="http://www.qgis.org/">qgis</a> and see what we have<br />
<a href="http://jduck.net/blog/blog/wp-content/uploads/2009/01/city_county.png"><img src="http://jduck.net/blog/blog/wp-content/uploads/2009/01/city_county-300x132.png" alt="city_county" title="city_county" width="300" height="132" class="aligncenter size-medium wp-image-151" /></a></p>
<p>Next time, querying with spatial predicates&#8230;.I promise it won&#8217;t take six months for the next post.</p>
]]></content:encoded>
			<wfw:commentRss>http://jduck.net/2009/01/30/getting-to-know-postgis-part-ii/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Using OGR to convert GIS Vector formats</title>
		<link>http://jduck.net/2008/07/18/using-ogr-to-convert-gis-vector-formats/</link>
		<comments>http://jduck.net/2008/07/18/using-ogr-to-convert-gis-vector-formats/#comments</comments>
		<pubDate>Fri, 18 Jul 2008 21:34:36 +0000</pubDate>
		<dc:creator>Jonah</dc:creator>
				<category><![CDATA[geospatial]]></category>
		<category><![CDATA[gis]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[oss]]></category>

		<guid isPermaLink="false">http://jduck.net/2008/07/18/using-ogr-to-convert-gis-vector-formats/</guid>
		<description><![CDATA[OGR is a part of GDAL and is very useful for converting between geospatial vector formats. What does that mean? When storing Vector GIS data there are a dizzying number of formats it can be stored in, some of the more popular of late, or at least well known are KML and SHP. A friend [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.gdal.org/ogr/">OGR</a> is a part of <a href="http://www.gdal.org/">GDAL</a> and is very useful for converting between geospatial <a href="http://www.gdal.org/ogr/ogr_formats.html">vector formats</a>.  What does that mean?  When storing Vector GIS data there are a dizzying number of formats it can be stored in, some of the more popular of late, or at least well known are KML and SHP.  A friend of a friend was looking to convert some SHP (Shapefiles) into KML so that he could make a Google Maps mashup and I helped him out.  Here is a workflow for how I went about performing the conversion.<br />
<span id="more-115"></span><br />
OGR can be installed on debian/ubuntu machines by installing the package gdal-bin:</p>
<pre>sudo apt-get install gdal-bin</pre>
<p>Once you have GDAL/OGR installed you get a slew of command line utilities, I&#8217;ll try to cover some others in later tutorials, but for now we&#8217;re interested in ogr2ogr.  ogr2ogr converts between the vector formats that OGR understands.</p>
<p>Example using a shapefile at the city of chicago website:<br />
Download the data</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>egov.cityofchicago.org<span style="color: #000000; font-weight: bold;">/</span>webportal<span style="color: #000000; font-weight: bold;">/</span>COCWebPortal<span style="color: #000000; font-weight: bold;">/</span>COC_ATTACH<span style="color: #000000; font-weight: bold;">/</span>TIFS2008.zip</pre></div></div>

<p>Unzip it</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">unzip</span> TIFS2008.zip</pre></div></div>

<p>Now we have to do the hard part (not really that hard, but important), look for the projection information in the metadata.  I looked in the tifs.shp.xml file and found that the projections is:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">NAD_1983_StatePlane_Illinois_East_FIPS_1201_Feet</pre></div></div>

<p>Google uses WGS84 spatial reference system.<br />
Now we have to lookup EPSG codes that OGR understands for these projections.  A good spot to do this is <a href="http://spatialreference.org">spatialreference.org</a>.  EPSG codes provide a short form of expressing projection and spatial reference information.<br />
Once we have that all sorted out we&#8217;re ready to run ogr2ogr:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">ogr2ogr <span style="color: #660033;">-f</span> <span style="color: #ff0000;">&quot;KML&quot;</span> -s_srs <span style="color: #ff0000;">&quot;EPSG:102671&quot;</span> -t_srs <span style="color: #ff0000;">&quot;EPSG:4326&quot;</span> tifs.kml tifs.shp</pre></div></div>

<p>The -f &#8220;KML&#8221; specifies that we want the output in KML.  -s_srs is the source (tifs.shp) spatial reference system and -t_srs is the target spatial reference system found at spatialreference.org, then we specify the output file tifs.kml and the input file tifs.shp.  That is it!</p>
<p>Lets shrink it down into a kmz (compressed kml) so that it takes up less disk space.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">zip</span> tifs.kmz tifs.kml</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://jduck.net/2008/07/18/using-ogr-to-convert-gis-vector-formats/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Getting to know PostGIS</title>
		<link>http://jduck.net/2007/11/06/getting-to-know-postgis/</link>
		<comments>http://jduck.net/2007/11/06/getting-to-know-postgis/#comments</comments>
		<pubDate>Tue, 06 Nov 2007 14:45:13 +0000</pubDate>
		<dc:creator>Jonah</dc:creator>
				<category><![CDATA[database]]></category>
		<category><![CDATA[geospatial]]></category>
		<category><![CDATA[gis]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://jduck.net/2007/11/06/getting-to-know-postgis/</guid>
		<description><![CDATA[I am making the plunge to get more informed with how to use PostGIS. It is pretty impressive so far. Here is a quick tutorial which shows you how to get started and loading in a shapefile to play around with some fun SQL querying. I assume a basic understanding of the linux command line [...]]]></description>
			<content:encoded><![CDATA[<p>I am making the plunge to get more informed with how to use PostGIS.  It is pretty impressive so far.  Here is a quick tutorial which shows you how to get started and loading in a shapefile to play around with some fun SQL querying.  I assume a basic understanding of the linux command line and some basic SQL skills. </p>
<p>To get started in ubuntu 7.04 (should work in 7.10 and debian too):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> postgis postgresql-<span style="color: #000000;">8.1</span>-postgis</pre></div></div>

<p>Next we&#8217;ll start setting up the PostGIS environment.<br />
<span id="more-104"></span></p>
<p>Then we need to set up a new database, I called mine geodb:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ createdb geodb</pre></div></div>

<p>We then need to bind it to the PostGIS libs with the following:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ createlang plpgsql geodb</pre></div></div>

<p>And finally add the PostGIS Tables:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ psql <span style="color: #660033;">-d</span> mytestdb <span style="color: #660033;">-f</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>postgresql-<span style="color: #000000;">8.1</span>-postgis<span style="color: #000000; font-weight: bold;">/</span>lwpostgis.sql
$ psql <span style="color: #660033;">-d</span> mytestdb <span style="color: #660033;">-f</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>postgresql-<span style="color: #000000;">8.1</span>-postgis<span style="color: #000000; font-weight: bold;">/</span>spatial_ref_sys.sql</pre></div></div>

<p>Phew&#8230;.that was a bit of work.</p>
<p>Now we&#8217;re ready to go.  We have a database called geodb and we&#8217;ve told PostgreSQL that it is a PostGIS database.</p>
<p>So now we can use the shp2pgsql command to import a shapefile into the db:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ shp2pgsql <span style="color: #660033;">-W</span> LATIN1 <span style="color: #660033;">-D</span> <span style="color: #660033;">-I</span> myshapefile.shp mytablename <span style="color: #000000; font-weight: bold;">|</span> psql geodb</pre></div></div>

<p>-W is for setting the encoding type, I had problems with many shapefiles as my locale is UTF8 and PostgreSQL seems to default to the locale.  For me LATIN1 has been working better.</p>
<p>-D sets the SQL output to be in dump format for insertion into the database.</p>
<p>-I flags it to compute the spatial indexing upon import.  For large complex vector features this can take awhile, so use with discretion.</p>
<p>All of this is piped to </p>
<p>This gives us a new table called &#8220;tablename&#8221;, which we can see by doing the following:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ psql geodb
Welcome to psql 8.1.8, the PostgreSQL interactive terminal.
&nbsp;
Type:  \\copyright <span style="color: #000000; font-weight: bold;">for</span> distribution terms
       \\h <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #7a0874; font-weight: bold;">help</span> with SQL commands
       \\? <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #7a0874; font-weight: bold;">help</span> with psql commands
       \\g or terminate with semicolon to execute query
       \\q to quit
&nbsp;
<span style="color: #007800;">geodb</span>=<span style="color: #666666; font-style: italic;">#</span></pre></div></div>

<p>At the PostgreSQL prompt you can enter various SQL commands including queries.  </p>
<pre>geodb=# \\d mytablename</pre>
<p>shows the columns and data types of the data in the table.</p>
<p>Notice the column called: the_geom</p>
<p>This is where the <a href="http://postgis.refractions.net/docs/ch04.html#RefObject">GIS Objects</a> are stored.</p>
<p>The sample query there would show all the data in the shapefile&#8217;s associated .dbf as well as a column called </p>
<p>Next time we&#8217;ll launch into some querying fun.</p>
<p><a href="http://jduck.net/2009/01/30/getting-to-know-postgis-part-ii/">Onward to Part II&#8230;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jduck.net/2007/11/06/getting-to-know-postgis/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>San Diego Fires on MODIS</title>
		<link>http://jduck.net/2007/10/24/san-diego-fires-on-modis/</link>
		<comments>http://jduck.net/2007/10/24/san-diego-fires-on-modis/#comments</comments>
		<pubDate>Wed, 24 Oct 2007 13:51:23 +0000</pubDate>
		<dc:creator>Jonah</dc:creator>
				<category><![CDATA[gis]]></category>
		<category><![CDATA[modis]]></category>
		<category><![CDATA[remote sensing]]></category>

		<guid isPermaLink="false">http://jduck.net/2007/10/24/san-diego-fires-on-modis/</guid>
		<description><![CDATA[Just whipped together an animation of the San Diego Fires from some recent MODIS scenes that I grabbed from the MODIS Rapid Response System. I put the animation together using GIMP. (Click for Larger Version 1.9MB)]]></description>
			<content:encoded><![CDATA[<p>Just whipped together an animation of the San Diego Fires from some recent MODIS scenes that I grabbed from the <a href="http://rapidfire.sci.gsfc.nasa.gov/">MODIS Rapid Response System</a>.  I put the animation together using GIMP.</p>
<p><a href="http://jduck.net/fire.gif"><img src="http://jduck.net/firethumb.gif" alt="San Diego Fires" /></a><br />
(Click for Larger Version 1.9MB) </p>
]]></content:encoded>
			<wfw:commentRss>http://jduck.net/2007/10/24/san-diego-fires-on-modis/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Woowee&#8230;</title>
		<link>http://jduck.net/2007/07/03/woowee/</link>
		<comments>http://jduck.net/2007/07/03/woowee/#comments</comments>
		<pubDate>Tue, 03 Jul 2007 19:51:12 +0000</pubDate>
		<dc:creator>Jonah</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[geospatial]]></category>
		<category><![CDATA[gis]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://jduck.net/2007/07/03/woowee/</guid>
		<description><![CDATA[The blog is getting mighty impersonal with all those del.icio.us posts. Maybe that can serve as a reminder for me to post more. I have been hacking on a bunch of convenience code in python for the LTM (Land Transformation Model) which serves as the land use projection portion of my research. Basically just wrapping [...]]]></description>
			<content:encoded><![CDATA[<p>The blog is getting mighty impersonal with all those del.icio.us posts.  Maybe that can serve as a reminder for me to post more.  </p>
<p>I have been hacking on a bunch of convenience code in python for the LTM (Land Transformation Model) which serves as the land use projection portion of my research.  Basically just wrapping a bunch of ArcGIS functions that do what I need done and then some file manipulation and config file writing before I launch code written by our postdoc.  Going to try and do some time projections for all of the state of Indiana and then go back to my Muskegon study area with the new tools to re-run the model up there.  It should make things run much more smoothly.</p>
]]></content:encoded>
			<wfw:commentRss>http://jduck.net/2007/07/03/woowee/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quick and dirty GIS Server</title>
		<link>http://jduck.net/2007/06/26/quick-and-dirty-gis-server/</link>
		<comments>http://jduck.net/2007/06/26/quick-and-dirty-gis-server/#comments</comments>
		<pubDate>Tue, 26 Jun 2007 16:18:26 +0000</pubDate>
		<dc:creator>Jonah</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[gis]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://jduck.net/2007/06/26/quick-and-dirty-gis-server/</guid>
		<description><![CDATA[Here is a quick and dirty ArcGIS geoprocessing server. I mostly did this so that I can call ArcGIS routines from scripts on my linux box across a cluster of ArcGIS servers. It is not without caveats, mostly security caveats. I work in a firewalled environment and would not recommend exposing the entire arcgisscripting geoprocessing [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a quick and dirty ArcGIS geoprocessing server.  I mostly did this so that I can call ArcGIS routines from scripts on my linux box across a cluster of ArcGIS servers.  </p>
<p>It is not without caveats, mostly security caveats.  I work in a firewalled environment and would not recommend exposing the entire arcgisscripting geoprocessing object in a non-firewalled environment, without adding some security.  With the client code I am able to write scripts that work on either Win32 or Linux with the same code.</p>
<p>Additionally, you will need to refer to files and directories in your scripts as they would appear to the server instance (with its windows permissions).  As ArcGIS scripting routines do not directly allow the passing of GIS data to them, you will have to point to them on the server&#8217;s filesystem, geodatabase or remote ArcSDE server as you would locally on the server.<br />
<span id="more-90"></span><br />
<strong>Server:</strong></p>
<pre>from SimpleXMLRPCServer import SimpleXMLRPCServer
import arcgisscripting as agis
geop = agis.create()
server = SimpleXMLRPCServer(("10.0.0.128",8000))
server.register_instance(geop)
print "Starting server..."
server.serve_forever()</pre>
<p><strong>Client:</strong></p>
<pre>#!/usr/bin/python
REMOTE_SERVER = "http://10.0.0.128:8000"
import sys
print "We're running on: ", sys.platform
if sys.platform == "win32":  # We're on win32, call instance of gp object as we normally would.
        print "Importing the geoprocessing object"
        import arcgisscripting as agis
        gp = agis.create()
else:  # Run our calls over XMLRPC to REMOTE_SERVER
        from xmlrpclib import ServerProxy
        print "Using XMLRPC to connect to:", REMOTE_SERVER
        gp = ServerProxy(REMOTE_SERVER)
# Just check that we can call the geoprocessing object.
print gp.ProductInfo() #Show which product we're running just to make sure it is working.</pre>
<p>Use:<br />
On the server run:</p>
<pre>python server.py</pre>
<pre>Starting server...</pre>
<p>On the client call the Client code at the top of your geoprocessing script, then refer to the gp object as you would normally.</p>
]]></content:encoded>
			<wfw:commentRss>http://jduck.net/2007/06/26/quick-and-dirty-gis-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>geopy</title>
		<link>http://jduck.net/2007/05/09/geopy/</link>
		<comments>http://jduck.net/2007/05/09/geopy/#comments</comments>
		<pubDate>Wed, 09 May 2007 15:57:18 +0000</pubDate>
		<dc:creator>Jonah</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[geospatial]]></category>
		<category><![CDATA[gis]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://jduck.net/2007/05/09/geopy/</guid>
		<description><![CDATA[Stumbled upon geopy while looking through a fantastic list of OSS and Linux GIS tools. Geopy lets me code a geocoder in 6 lines of python using the google maps API. Example: #!/usr/bin/python from geopy import geocoders import sys g = geocoders.Google('ENTER YOUR API KEY HERE') address = sys.argv[1] place, (lat,lng) = g.geocode(address) print "%s: [...]]]></description>
			<content:encoded><![CDATA[<p>Stumbled upon <a href="http://exogen.case.edu/projects/geopy/">geopy</a> while looking through a <a href="http://pkg-grass.alioth.debian.org/debiangis-status.html">fantastic list</a> of OSS and Linux GIS tools.</p>
<p>Geopy lets me code a geocoder in 6 lines of python using the google maps API.</p>
<p><span id="more-89"></span><br />
Example:</p>
<pre>
#!/usr/bin/python
from geopy import geocoders
import sys
g = geocoders.Google('ENTER YOUR API KEY HERE')
address = sys.argv[1]
place, (lat,lng) = g.geocode(address)
print "%s: %.5f, %.5f" % (place,lat,lng)
</pre>
<p>Then run from the command line like so:</p>
<pre>
# geoloc "500 Main St. 42367"
500 Main St, Powderly, KY 42367, USA: 37.23329, -87.16244
</pre>
<p>Nice!</p>
]]></content:encoded>
			<wfw:commentRss>http://jduck.net/2007/05/09/geopy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Histogram of an ASCII Raster</title>
		<link>http://jduck.net/2007/03/06/histogram-of-an-ascii-raster/</link>
		<comments>http://jduck.net/2007/03/06/histogram-of-an-ascii-raster/#comments</comments>
		<pubDate>Tue, 06 Mar 2007 21:37:49 +0000</pubDate>
		<dc:creator>Jonah</dc:creator>
				<category><![CDATA[gis]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://jduck.net/2007/03/06/histogram-of-an-ascii-raster/</guid>
		<description><![CDATA[Warning, esoteric GIS related post follows. I often like to be able to generate a quick histogram of an ASCII raster file that I use for some of my models. I can do this inside of ArcGIS on a GRID file, but I like to be able to do this directly on an ASCII sometimes. [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Warning, esoteric GIS related post follows.</strong></p>
<p>I often like to be able to generate a quick histogram of an ASCII raster file that I use for some of my models.  I can do this inside of ArcGIS on a GRID file, but I like to be able to do this directly on an ASCII sometimes.  Python to the rescue&#8230;</p>
<p><span id="more-81"></span></p>
<p>In a few lines of python I whipped this up:</p>
<pre>
#!/usr/bin/python
# By Jonah Duckles jonah@purdue.edu 7/17/2006
# Histogram Ascii will take a standard ESRI ascii file and output a histogram
#   of the values found in the file.

import sys, string, os
from operator import *

file = sys.argv[1]
histo = dict()
fh = open(file)
currow = 0
for line in fh.xreadlines():
    if currow > 6:
        line = string.rstrip(line, '/n')
        row = line.split(" ")
        row = row[:len(row)-1]
        for cell in row:
            if cell in histo:
                histo[cell] = histo[cell] + 1
            else:
                histo[cell] = 1
    currow += 1

k = histo.keys()
k.sort()

print "#Histogram for " + file
for element in k:
    print str(element) + "\t" + str(histo[element])
</pre>
<p>Now what if I want to be able to do this directly on a GRID file on Linux with no ArcGIS.  I admit this is a complete hack, but here it is.  A script that calls GDAL bin tools to convert the GRID to ASCII (it does it pretty fast actually), then calls hasc.py above and saves the histogram to a file.</p>
<pre>
#!/bin/bash
tmp=00-$1.asc
out=hist-$1.csv
gdal_translate -of AAIGrid $1 $tmp
echo "Computing histogram"
hasc $tmp > $out
echo "Histogram output to $out"
echo "Cleaning up"
rm $tmp
</pre>
<p><strong>EDIT:</strong> Fixed a minor bug per pyther&#8217;s comment.</p>
]]></content:encoded>
			<wfw:commentRss>http://jduck.net/2007/03/06/histogram-of-an-ascii-raster/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
