<?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>mikejcorey.com</title>
	<atom:link href="http://www.mikejcorey.com/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mikejcorey.com/wordpress</link>
	<description>Online mapping, data visualization, and the future of journalism.</description>
	<lastBuildDate>Fri, 16 Jul 2010 15:32:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Google Maps API hands-on training, part 2</title>
		<link>http://www.mikejcorey.com/wordpress/2010/03/09/google-maps-api-hands-on-training-part-2/</link>
		<comments>http://www.mikejcorey.com/wordpress/2010/03/09/google-maps-api-hands-on-training-part-2/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 04:39:58 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://www.mikejcorey.com/wordpress/?p=235</guid>
		<description><![CDATA[The notes from a hands-on class I'm helping teach at NICAR 2010 in Phoenix this week.]]></description>
			<content:encoded><![CDATA[<style type="text/css">
.level1 {
	list-style-type : decimal ;
	margin-left : 10px ;
}
.level2 {
	list-style-type : upper-alpha ;
	margin-left : 10px ;
}
</style>
<p><a href="http://www.mikejcorey.com/wordpress/2010/03/07/google-maps-api-hands-on-training-part-1/">Go back to part one of the training</a>.<br />
<b>Assumed knowledge:</b><br />
	HTML<br />
	Moderate to advanced Javascript understanding<br />
	CSS<br />
	XML<br />
	Google Maps API basic skills:
<ul>
<li>Initialization of map</li>
<li>Adding map controls</li>
<li>Basic adding of points, click event listeners</li>
<li>Display of map points from flat XML</li>
</ul>
<p><b>Supporting files:</b></p>
<ul>
<li class="level1">Starter file, with a basic map, for you to follow along: <a href="http://mikejcorey.com/nicar2010/googlemapstartfile2.html" target="_new">googlemapstartfile2.html</a></li>
<li class="level1">XML file, which you will want to have locally so you can modify it: <a href="http://mikejcorey.com/nicar2010/basicmapxml.xml" target="_new">basicmapxml.xml</a></li>
<li class="level1">Completed file, if you&#8217;re stuck or just want to skip ahead: <a href="http://mikejcorey.com/nicar2010/googlemapspart2-complete.html" target="_new">googlemapspart2-complete.html</a></li>
</ul>
<p>		</p>
<ol>
<li class="level1"><B>Dynamic geocoding</b><br/><br />
Users often will want to figure out how your data relates to their own geographic location. They want to search against an address or by clicking on a point on the map. To do this kind of functionality you&#8217;ll need to use Google&#8217;s gecoder function.</p>
<ol>
<li class="level2">Create an instance of the geocoder to use for your searches. This should be placed in the code outside of the function that you use to create your map so you can use it anywhere on the page.<br/>
<pre class="brush: jscript; light: true;">var objGeocoder = new GClientGeocoder();</pre>
</li>
<p><br/></p>
<li class="level2">Now let&#8217;s put the geocoder to use. Whereas most of our actions are called against the map instance (objMap), in this case we use the geocoder. Lets do a really basic manual address query that in any real situation you&#8217;d probably collect from an HTML form. You&#8217;ll see that Google takes the address and returns a point &#8212; formatted as a lat,long pair &#8212; if it finds something, and returns as undefined if it can&#8217;t geocode the address. In this case, if it does find an address, we&#8217;ll center the map on that point at zoom level 10. This code goes INSIDE the loadMap function, after the map has been instantiated.<br/>
<pre class="brush: jscript; light: true;">var strTestAddress = &quot;Your address here&quot;;
objGeocoder.getLatLng(strTestAddress, function(objPoint) {
	if (!objPoint) {
		alert(strTestAddress + &quot; not found&quot;);
	} else {
		objMap.panTo(objPoint,10);
	}
});
</pre>
</li>
<p><br/></p>
<li class="level2">Another way to react to user activity is to ask Google for a lat-long pair based on a user&#8217;s click. This allows a user who doesn&#8217;t know the address for their desired location to still use a proximity feature. This involves applying an event listener to the entire map. When a user clicks on the map, we first make sure they&#8217;re not clicking on a marker. If they are, we let that marker&#8217;s earlier set click handler do its work and do nothing in our function. If it&#8217;s not a marker, we re-center the map and do whatever else we might want to. Often we&#8217;ll want to pass the geocoded point to another function.<br/>
<pre class="brush: jscript; light: true;">GEvent.addListener(objMap, 'click', function(objMarker,objPoint) {
	if (objMarker) {
	}
	else {
		objMap.panTo(objPoint,10);
		var objNewMarker = new GMarker(objPoint);
		objMap.addOverlay(objNewMarker);
		objNewMarker.openInfoWindowHtml(&quot;Pssst, pass it on: &quot; + objPoint);
	}
});</pre>
</li>
<p><br/>
	</ol>
</li>
<p><br/></p>
<li class="level1"><B>Polylines and polygons</b><br/><br />
Markers are the most commonly used overlays in the Google Maps API, but polylines and polygons are next. Polylines are familar to most Google Maps users from the driving directions feature, but you can use them for other applications. Polygons are useful for showing regions and other non-point data.<br/><br />
I know what you&#8217;re thinking: STOP! Please don&#8217;t think you can throw up a Google map showing all the counties in your state. It will be slow, slow slow &#8212; this is a major failing of the Javascript API to me, and is one of the main reasons we use Google Maps for Flash for complex polygon data.<br/><br />
That said, polygons used one at a time or a few at a time work well. Let&#8217;s start by drawing a basic line:<br/></p>
<ol>
<li class="level2">We&#8217;ll start by putting some points into an array:<br/>
<pre class="brush: jscript; light: true;">var arrLinePoints = new Array();
arrLinePoints.push(new GLatLng(33.5081, -112.2047));
arrLinePoints.push(new GLatLng(33.5642, -112.1154));
arrLinePoints.push(new GLatLng(33.5608, -112.0042));
arrLinePoints.push(new GLatLng(33.5116, -111.9211));</pre>
</li>
<p><br/></p>
<li class="level2">Then we&#8217;ll spit those points back out as a line. We specify an array that&#8217;s the source of the points, the color of the line, the line width, and the opacity of the line (0.1 to 1):<br/>
<pre class="brush: jscript; light: true;">var objMyLine = new GPolyline(arrLinePoints, &quot;#446891&quot;, 3, 1);
objMap.addOverlay(objMyLine);</pre>
</li>
<p><br/></p>
<li class="level2">Polygons work much the same, except that the last point in the array should be the same as the first one to close the polygon, and you specify a color and opacity for the fill color in addition to the stroke color and opacity:<br/>
<pre class="brush: jscript; light: true;">var arrShapePoints = new Array();
arrShapePoints.push(new GLatLng(33.4623, -112.1086));
arrShapePoints.push(new GLatLng(33.4632, -112.0382));
arrShapePoints.push(new GLatLng(33.4280, -112.0375));
arrShapePoints.push(new GLatLng(33.4285, -112.1075));
arrShapePoints.push(new GLatLng(33.4623, -112.1086));
var objMyPolygon = new GPolygon(arrShapePoints, &quot;#446891&quot;, 3, 1, &quot;#99C1D8&quot;, 0.2);
objMap.addOverlay(objMyPolygon);</pre>
</li>
<p>
	</ol>
</li>
<li class="level1"><B>Clustering markers</b><br/><br />
Many times you&#8217;ll have a lot of points that at wide zoom levels are too close together to distinguish. Using marker clustering is generally the best way to get around this. Google has built-in clustering functions, but we like one called ClusterMarker better because it has more flexibility. The approach works so well that we use ClusterMarker even when we&#8217;re not clustering icons because it makes it easy to trigger clicks to a particular point.<br/><br />
You can download the plugin here:<br/><br />
<a href="http://googlemapsapi.martinpearman.co.uk/downloads.php?cat_id=1" target="_new">http://googlemapsapi.martinpearman.co.uk/downloads.php?cat_id=1</a><br/><br />
And read more about using it here:<br/><br/></p>
<p>	<a href="http://googlemapsapi.martinpearman.co.uk/articles.php?cat_id=1" target="_new">http://googlemapsapi.martinpearman.co.uk/articles.php?cat_id=1</a><br/><br/></p>
<ol>
<li class="level2">For today&#8217;s example, in your HTML document&#8217;s &lt;HEAD&gt;, import the Javascript file that contains the clustering functions.<br/>
<pre class="brush: jscript; html-script: true; light: true;">&lt;script type=&quot;text/javascript&quot; src=&quot;http://www.mikejcorey.com/nicar2010/ClusterMarker.js&quot;&gt;&lt;/script&gt;
</pre>
</li>
<li class="level2">Create a custom icon to be used as your clustering icon. Since this icon has a different size and shape from the other icons from part one, we won&#8217;t base this on the baseIcon we created earlier. This should be defined with your other markers, outside the loadMap function<br/>
<pre class="brush: jscript; light: true;">var objGroupIcon = new GIcon();
objGroupIcon.image = &quot;http://www.mikejcorey.com/nicar2010/images/severalicons-brown.png&quot;;
objGroupIcon.shadow = &quot;http://www.mikejcorey.com/nicar2010/images/severalicons-brown-shadow.png&quot;;
objGroupIcon.iconSize = new GSize(41.0, 36.0);
objGroupIcon.shadowSize = new GSize(57.0, 34.0);
objGroupIcon.iconAnchor = new GPoint(20.5, 18.0);
objGroupIcon.infoWindowAnchor = new GPoint(20.5, 18.0);
</pre>
</li>
<p><br/></p>
<li class="level2">Create a new ClusterMarker instance for your map. We&#8217;ll also tell ClusterMarker what icon to use to mark a cluster. We can also easily turn the clustering on and off by setting the second line to true or false. <b>Note: For some reason my code display tags are freaking out after this point, so delete any backslashes in the code</b><br/>
<pre class="brush: jscript; light: true;">var objMyCluster;
var arrMarkerStorage = new Array();

objMyCluster = new ClusterMarker(objMap, { clusterMarkerIcon: objGroupIcon });
objMyCluster.clusteringEnabled = true;</pre>
</li>
<p><br/></p>
<li class="level2">Instead of manually adding a marker using map.addOverlay, when our marker function runs each time we&#8217;ll push each marker into the array we just created.<br/>
<pre class="brush: jscript; light: true;">function createMarker(objPoint,strHTML,strIconName) {
	var objMarker = new GMarker(objPoint,{ icon:strIconName });
	GEvent.addListener(objMarker, 'click', function() {
		objMarker.openInfoWindowHtml(strHTML);
	});
	arrMarkerStorage.push(objMarker);
	return objMarker;
</pre>
</li>
<p></p>
<li class="level2">Since the ClusterMarker is now going to handle the placement of markers, we can delete or comment out the line inside loadMyLocations that actually places the marker.<br/>
<pre class="brush: jscript; light: true;">
//objMap.addOverlay(objMarker);
</pre>
</li>
<p><br/></p>
<li class="level2">Once our XML loop has finished running, we&#8217;ll tell cluster marker to go to work on the array of points we&#8217;ve stored up. Make sure this is outside and after your loop but still inside the loadLocations function.<br/>
<pre class="brush: jscript; light: true;">
objMyCluster.addMarkers(arrMarkerStorage);
objMyCluster.refresh();
</pre>
</li>
</ol>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.mikejcorey.com/wordpress/2010/03/09/google-maps-api-hands-on-training-part-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Location-aware potholes map lives!</title>
		<link>http://www.mikejcorey.com/wordpress/2010/03/09/location-aware-potholes-map-lives/</link>
		<comments>http://www.mikejcorey.com/wordpress/2010/03/09/location-aware-potholes-map-lives/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 02:07:51 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[News and posts]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[BlackBerry]]></category>
		<category><![CDATA[des moines]]></category>
		<category><![CDATA[Droid]]></category>
		<category><![CDATA[geolocation]]></category>
		<category><![CDATA[Google Maps API]]></category>
		<category><![CDATA[Google Maps Static API]]></category>
		<category><![CDATA[government]]></category>
		<category><![CDATA[gps]]></category>
		<category><![CDATA[iowa]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[journalism]]></category>
		<category><![CDATA[Maps]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[potholes]]></category>

		<guid isPermaLink="false">http://www.mikejcorey.com/wordpress/?p=225</guid>
		<description><![CDATA[We launched a beta today of our mobile potholes map, which features extensive use of geolocation using the user&#8217;s Web browser. This has been on my and James Wilkerson&#8217;s plate for a long time, and it feels really good to get at least this version out in the public.
The mobile site is at http://dmreg.com/potholes.
You can [...]]]></description>
			<content:encoded><![CDATA[<p>We launched a beta today of our mobile potholes map, which features extensive use of geolocation using the user&#8217;s Web browser. This has been on my and James Wilkerson&#8217;s plate for a long time, and it feels really good to get at least this version out in the public.</p>
<p>The mobile site is at <a href="http://dmreg.com/potholes" target="_blank">http://dmreg.com/potholes</a>.</p>
<p>You can see the desktop browser version at <a href="http://DesMoinesRegister.com/potholes" target="_blank">DesMoinesRegister.com/potholes</a>, and <a href="http://www.mikejcorey.com/wordpress/2010/02/26/new-project-killing-potholes-with-user-input-local-government-support/">there&#8217;s more info on that project in a previous post</a>.</p>
<p>This is our first extensively location-aware site, and it&#8217;s our first really extensive specialty mobile site, so there&#8217;s a lot of figuring out still left on this one. But we&#8217;re pretty happy with the result.</p>
<p>We used quite a few methods that were different or modified from our other mapping projects.</p>
<p>1. For geolocation, we&#8217;re using the <a href="http://dev.w3.org/geo/api/spec-source.html" target="_blank">W3C geolocation API</a> built in to many phones&#8217; browsers. Safari for iPhone and most Google phones have it, but BlackBerries don&#8217;t. Theoretically we&#8217;re also supporting <a href="http://code.google.com/apis/gears/api_geolocation.html" target="_blank">Google Gears geolocation</a>, but we haven&#8217;t really tested it on mobile devices.</p>
<p>2. We used the <a href="http://code.google.com/apis/maps/documentation/staticmaps/" target="_blank">Google Static Maps API</a> instead of the more-familiar <a href="http://code.google.com/apis/maps/" target="_blank">Javascript API</a>. The Javascript API actually works fairly well, technically speaking, on iPhones and Google phones, but the user experience can quickly become confusing. Dragging things on the map is hard on a mobile device, and zooming in and out on the map often messes with the browser zoom. The static maps API is a lot lighter load for a mobile connection to bear. Almost as a bonus, <a href="http://www.mikejcorey.com/wordpress/2010/03/02/frustrated-with-all-things-blackberry/">because I was about ready to write off the BlackBerry browser</a>, using the static API also enables BlackBerry users to use the site (the lack of browser GPS still limits BlackBerry users, but they can at least submit a pothole using an address).</p>
<p>3. We&#8217;re using Prototype&#8217;s Ajax and JSON to load points and send new pothole data. We&#8217;ve done this a few times now, and it&#8217;s becoming our standard. JSON is lighter than XML on the server, and you can send data back and forth as Javascript objects, which makes sending complex data much easier (and much easier to modify later).</p>
<p>4. We did this as a website instead of an app in order to work with more platforms at once, and because we&#8217;re much better at Web design than objective C (which is to say I know not a bit, and learning will take a while). I&#8217;m curious to hear others&#8217; thoughts on this, because I think most journalism shops are going to have a hard time making the economics of iPhone, BlackBerry and Google apps a pretty tough thing to make work. As long as mobile browsers keep developing quickly, I think this is probably the way to go for now, unless you can afford to build your own apps, have a lot more time to devote to one project than we do, or can afford to pay someone else to build them for you.</p>
<p>Check it out, let me know what works and what doesn&#8217;t.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikejcorey.com/wordpress/2010/03/09/location-aware-potholes-map-lives/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google Maps API hands-on training, part 1</title>
		<link>http://www.mikejcorey.com/wordpress/2010/03/07/google-maps-api-hands-on-training-part-1/</link>
		<comments>http://www.mikejcorey.com/wordpress/2010/03/07/google-maps-api-hands-on-training-part-1/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 03:01:23 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://www.mikejcorey.com/wordpress/?p=197</guid>
		<description><![CDATA[The notes from a hands-on class I'm helping teach at NICAR 2010 in Phoenix this week.]]></description>
			<content:encoded><![CDATA[<style type="text/css">.level1 {
	list-style-type : decimal ;
	margin-left : 10px ;
}
.level2 {
	list-style-type : upper-alpha ;
	margin-left : 10px ;
}</style>
<p><a href="http://www.mikejcorey.com/wordpress/2010/03/09/google-maps-api-hands-on-training-part-2/">Go to part two of the training</a><br />
<b>Presumed knowledge:</b><br />
	HTML<br />
	Moderate Javascript understanding<br />
	CSS<br />
	Basic XML<br />
<b>What you&#8217;ll need:</b></p>
<ul>
<li class="level1">A Google Maps API key (one per server, make an include)</li>
<li class="level1">A text editor</li>
<li class="level1">Some addresses or Lat-Long coordinates<br />
		<b>Where to geocode points:</b></p>
<ul>
<li class="level2">geocoder.us</li>
<li class="level2">batchgeocode.com (feed it a tab-delimited file of addresses, get one back)</li>
</ul>
</li>
<li class="level1">A browser</li>
<li class="level1">Firebug is very helpful</li>
</ul>
<p>
<b>Supporting files:</b></p>
<ul>
<li class="level1">Starter file, with a basic map, for you to follow along: <a href="http://mikejcorey.com/nicar2010/googlemapstartfile.html" target="_new">googlemapstartfile.html</a></li>
<li class="level1">Completed file, if you&#8217;re stuck or just want to skip ahead: <a href="http://mikejcorey.com/nicar2010/googlemapspart1-complete.html" target="_new">googlemapspart1-complete.html</a></li>
</ul>
<p>
<b>Getting started:</b></p>
<ol>
<li class="level1">Make sure you&#8217;re using the API appropriately. The good news is that Google has very open terms, but be sure you understand the advertising caveat</li>
<p></p>
<li class="level1">Create a basic HTML page</li>
<p></p>
<li class="level1">Sign up for an API key at <a href="http://code.google.com/apis/maps/signup.html" target="_new">http://code.google.com/apis/maps/signup.html</a></li>
<p></p>
<li class="level1">Keep a tab open for the API reference at <a href="http://code.google.com/apis/maps/documentation/reference.html" target="_new">http://code.google.com/apis/maps/documentation/reference.html</a></li>
<p></p>
<li class="level1">Load your API key inside the &lt;HEAD&gt; of the HTML document
<pre class="brush: jscript; light: true;">&lt;!--mikejcorey.com key (will work offline, but not if you upload it to another site)--&gt;
&lt;script src=&quot;http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAnXJbcYra5cIfy6uPpLTD6hQ5QqU9rgaQFdjDVk398i-rXfaBgBTE1-zdxRWaL7MjmfClkvNiI-i4KA&amp;sensor=false&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre>
</li>
<p></p>
<li class="level1">Inside your HTML body, create a target &lt;DIV&gt; for your map
<pre class="brush: jscript; light: true;">&lt;div id=&quot;map&quot; style=&quot;width:500px;height:400px;border:1px solid #000;&quot;&gt;&lt;/div&gt;</pre>
</li>
<p></p>
<li class="level1">Inside your document&#8217;s &lt;/HEAD&gt; tag, write Javascript to initialize your map after the entire body of the document has loaded
<pre class="brush: jscript; light: true;">var objMap; //A variable we declare early so our map is accessible outside the function that creates it.
//A function that loads when the HTML page is finished loading, which creates the map
function loadMap() {
	if (GBrowserIsCompatible()) {
		objMap = new GMap2(document.getElementById(&quot;map&quot;));
	} else {
		document.getElementById(&quot;map&quot;).innerHTML = &quot;There's supposed to be a Google Map here, but your browser isn't capable of showing it.&quot;;
	}
}</pre>
</li>
<p></p>
<li class="level1">Set a center point (lat-long pair) and zoom level for the map
<pre class="brush: jscript; light: true;">objMap.setCenter(new GLatLng(33.453814, -112.073239), 12);</pre>
</li>
<p></p>
<li class="level1">Add this code to the &lt;BODY&gt; tag of your HTML document to initialize the map once the body has finished loading, and to prevent memory leaks
<pre class="brush: jscript; light: true;">&lt;body onload=&quot;loadMap()&quot; onunload=&quot;GUnload()&quot;&gt;</pre>
</li>
<p></p>
<li class="level1">Add a different map type, set the map to use that type
<pre class="brush: jscript; light: true;">objMap.addMapType(G_PHYSICAL_MAP);
objMap.setMapType(G_PHYSICAL_MAP);</pre>
</li>
<p></p>
<li class="level1">Add some controls to the map for zooming and changing the map type
<pre class="brush: jscript; light: true;">objMap.addControl(new GLargeMapControl());
objMap.addControl(new GMapTypeControl());</pre>
</li>
<p></p>
<li class="level1">A marker is one type of overlay. Other overlays include lines, polygons, and ground overlays. There&#8217;s several ways to add markers to the map. Let&#8217;s start with the simplest method, and add a marker to the map using the default icon.
<pre class="brush: jscript; light: true;">//The simplest way to add a marker
var objBasicPoint = new GLatLng(33.453814, -112.073239);
var objBasicMarker = new GMarker(objBasicPoint);
objMap.addOverlay(objBasicMarker);</pre>
</li>
<p></p>
<li class="level1">That&#8217;s fine if we don&#8217;t want too many markers and we don&#8217;t want them to do much, but as soon as you get over about 5 markers, this approach becomes impractical. <b>Writing a function</b> that can be called over and over is a good way to handle multiple markers. Inside the function we&#8217;ll also add an <b>event listener</b> to pop up a label (called an InfoWindow) when the user clicks on the icon.
<pre class="brush: jscript; light: true;">//Our function for creating markers with event listeners
function createMarker(objPoint,strHTML,strIconName) {
	var objMarker = new GMarker(objPoint,{ icon:strIconName });
	GEvent.addListener(objMarker, 'click', function() {
		objMarker.openInfoWindowHtml(strHTML);
	});
	return objMarker;
}

//Adding a marker the more useful way, using a function
var objPoint = new GLatLng(33.479035, -112.047882);
var strWindowContent = &quot;&lt;div style='color:#CC0000;width:200px;'&gt;&lt;b&gt;Barrio Cafe\&lt;/b&gt;&lt;br/&gt;Azcentral.com raves: Superb Mexican food in a funky setting.\&lt;/div&gt;&quot;;
var objTestMarker = createMarker(objPoint,strWindowContent);
objMap.addOverlay(objTestMarker);</pre>
</li>
<p></p>
<li class="level1">If you have more than one type of data you want to show on the map, you&#8217;ll want to use a different color or shape of icon. You can make custom markers with any .PNG image file with a transparent background. Photoshop will work fine, but Adobe Fireworks is even better for this. We won&#8217;t cover creating the icon image here, so we&#8217;re starting with an image that we know the pixel dimensions of. For this map we&#8217;re going to use two icons that are the same shape, but are different sizes. First we&#8217;ll tell Google some key information about both icons. We&#8217;ll declare these variables before our other functions and outside of those functions, so we can access the markers from anywhere in the script.
<pre class="brush: jscript; light: true;">//marker definitions
var objBaseIcon = new GIcon();
objBaseIcon.shadow = &quot;http://www.mikejcorey.com/nicar2010/images/shadow-stop.png&quot;;
objBaseIcon.iconSize = new GSize(19, 25);
objBaseIcon.shadowSize = new GSize(32, 25);
objBaseIcon.iconAnchor = new GPoint(9, 25);
objBaseIcon.infoWindowAnchor = new GPoint(9, 1);</pre>
</li>
<p></p>
<li class="level1">Now we&#8217;ll define the different icons, which will be based on our baseicon, and put the icons into an array for easy reference later.
<pre class="brush: jscript; light: true;">var objRedIcon = new GIcon(objBaseIcon);
objRedIcon.image = &quot;http://www.mikejcorey.com/nicar2010/images/stop.png&quot;;

var objGreenIcon = new GIcon(objBaseIcon);
objGreenIcon.image = &quot;http://www.mikejcorey.com/nicar2010/images/start.png&quot;;

var arrMapIcons = [objRedIcon,objGreenIcon];</pre>
</li>
<p></p>
<li class="level1">If you want to load marker data from a database, or if you&#8217;d like to be able to easily change the markers, you&#8217;ll want to load markers dynamically from XML or JSON. In this example we&#8217;ll load multiple points from a flat XML file. This process uses a custom <b>asynchronous request</b> from Google called <b>GDownloadUrl</b>.
<pre class="brush: jscript; light: true;">//function for retrieving list of points from XML
function loadMyLocations(strWhichXML) {
	GDownloadUrl(strWhichXML, function(data) {
		var objXML = GXml.parse(data);
		var objLocations = objXML.documentElement.getElementsByTagName(&quot;location&quot;);

	});
}</pre>
</li>
<p></p>
<li class="level1">Set up a basic Javascript loop to get each XML row
<pre class="brush: jscript; light: true;">for (var numI = 0; numI &lt; objLocations.length; numI++) {
}</pre>
</li>
<p></p>
<li class="level1">For each row, get the attributes you need and run our marker function as before
<pre class="brush: jscript; light: true;">var objLocationItem = objLocations[numI];
var numMarkerLabel = objLocationItem.getAttribute(&quot;label&quot;);
var numMarkerIcon = objLocationItem.getAttribute(&quot;markertype&quot;);
var numMarkerLat = parseFloat(objLocationItem.getAttribute(&quot;lat&quot;));
var numMarkerLng = parseFloat(objLocationItem.getAttribute(&quot;lng&quot;));
var objPoint = new GLatLng(numMarkerLat, numMarkerLng);
var strWindowContent = &quot;&lt;div style='color:#CC0000;'&gt;&quot; + numMarkerLabel + &quot;\&lt;/div&gt;&quot;;
var objMarker = createMarker(objPoint,strWindowContent,arrMapIcons[numMarkerIcon]);
objMap.addOverlay(objMarker);</pre>
</li>
<p></p>
<li class="level1">That&#8217;s all for part one. Here&#8217;s the code for the entire page:</li>
<pre class="brush: jscript; light: true;">
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;en&quot; lang=&quot;en&quot;&gt;
&lt;head&gt;
	&lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
	&lt;title&gt;My awesome first Google map&lt;/title&gt;
	&lt;!--mikejcorey.com key (will work offline, but not if you upload it to another site)--&gt;
	&lt;script src=&quot;http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAnXJbcYra5cIfy6uPpLTD6hQ5QqU9rgaQFdjDVk398i-rXfaBgBTE1-zdxRWaL7MjmfClkvNiI-i4KA&amp;sensor=false&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
	&lt;script language=&quot;Javascript&quot;&gt;
	//&lt;![CDATA[
		var objMap; //A variable we declare early so our map is accessible outside the function that creates it.

		//marker definitions
		var objBaseIcon = new GIcon();
		objBaseIcon.shadow = &quot;http://www.mikejcorey.com/nicar2010/images/shadow-stop.png&quot;;
		objBaseIcon.iconSize = new GSize(19, 25);
		objBaseIcon.shadowSize = new GSize(32, 25);
		objBaseIcon.iconAnchor = new GPoint(9, 25);
		objBaseIcon.infoWindowAnchor = new GPoint(9, 1);
		var objRedIcon = new GIcon(objBaseIcon);
		objRedIcon.image = &quot;http://www.mikejcorey.com/nicar2010/images/stop.png&quot;;

		var objGreenIcon = new GIcon(objBaseIcon);
		objGreenIcon.image = &quot;http://www.mikejcorey.com/nicar2010/images/start.png&quot;;

		var arrMapIcons = [objRedIcon,objGreenIcon];
		//A function that loads when the HTML page is finished loading, which creates the map
		function loadMap() {
			if (GBrowserIsCompatible()) {

				objMap = new GMap2(document.getElementById(&quot;map&quot;));
				objMap.setCenter(new GLatLng(33.453814, -112.073239), 12);

				objMap.addMapType(G_PHYSICAL_MAP);
				objMap.setMapType(G_PHYSICAL_MAP);

				objMap.addControl(new GLargeMapControl());
				objMap.addControl(new GMapTypeControl());

				//The simplest way to add a marker
				var objBasicPoint = new GLatLng(33.453814, -112.073239);
				var objBasicMarker = new GMarker(objBasicPoint);
				objMap.addOverlay(objBasicMarker);

				//Adding a marker the more useful way, using a function
    			var objPoint = new GLatLng(33.479035, -112.047882);
    			var strWindowContent = &quot;&lt;div style='color:#CC0000;width:200px;'&gt;&lt;b&gt;Barrio Cafe\&lt;/b&gt;&lt;br/&gt;Azcentral.com raves: Superb Mexican food in a funky setting.\&lt;/div&gt;&quot;;
				var objTestMarker = createMarker(objPoint,strWindowContent);
				objMap.addOverlay(objTestMarker);

				//Or we can just load a bunch of points from an XML file
				loadMyLocations(&quot;basicmapxml.xml&quot;);
			} else {
				document.getElementById(&quot;map&quot;).innerHTML = &quot;There's supposed to be a Google Map here, but your browser isn't capable of showing it.&quot;;
			}
		}

		//Our function for creating markers with event listeners
		function createMarker(objPoint,strHTML,strIconName) {
			var objMarker = new GMarker(objPoint,{ icon:strIconName });
			GEvent.addListener(objMarker, 'click', function() {
				objMarker.openInfoWindowHtml(strHTML);
			});
			return objMarker;
		}

		//function for retrieving list of points from XML
		function loadMyLocations(strWhichXML) {
			GDownloadUrl(strWhichXML, function(data) {

				var objXML = GXml.parse(data);
				var objLocations = objXML.documentElement.getElementsByTagName(&quot;location&quot;);

				for (var numI = 0; numI &lt; objLocations.length; numI++) {
					var objLocationItem = objLocations[numI];

					var numMarkerLabel = objLocationItem.getAttribute(&quot;label&quot;);
					var numMarkerIcon = objLocationItem.getAttribute(&quot;markertype&quot;);
					var numMarkerLat = parseFloat(objLocationItem.getAttribute(&quot;lat&quot;));
					var numMarkerLng = parseFloat(objLocationItem.getAttribute(&quot;lng&quot;));

					var objPoint = new GLatLng(numMarkerLat, numMarkerLng);
					var strWindowContent = &quot;&lt;div style='color:#CC0000;'&gt;&quot; + numMarkerLabel + &quot;\&lt;/div&gt;&quot;;
					var objMarker = createMarker(objPoint,strWindowContent,arrMapIcons[numMarkerIcon]);
					objMap.addOverlay(objMarker);
				}
			});
		}
	//]]&gt;
	&lt;/script&gt;
&lt;/head&gt;
&lt;body onload=&quot;loadMap()&quot; onunload=&quot;GUnload()&quot;&gt;
	&lt;div id=&quot;map&quot; style=&quot;width:500px;height:400px;border:1px solid #000;&quot;&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
</li>
</ol>
<p><a href="http://www.mikejcorey.com/wordpress/2010/03/09/google-maps-api-hands-on-training-part-2/">Go to part two of the training</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikejcorey.com/wordpress/2010/03/07/google-maps-api-hands-on-training-part-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Frustrated with all things BlackBerry</title>
		<link>http://www.mikejcorey.com/wordpress/2010/03/02/frustrated-with-all-things-blackberry/</link>
		<comments>http://www.mikejcorey.com/wordpress/2010/03/02/frustrated-with-all-things-blackberry/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 04:01:46 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[News and posts]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[BlackBerry]]></category>
		<category><![CDATA[geolocation]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Maps API]]></category>
		<category><![CDATA[Google Maps Static API]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[potholes]]></category>
		<category><![CDATA[smartphone]]></category>

		<guid isPermaLink="false">http://www.mikejcorey.com/wordpress/?p=192</guid>
		<description><![CDATA[This week I&#8217;m getting to sink my teeth into one of my big priorities for the year: building mobile websites.
Yes, websites and not apps. I&#8217;d love to be building phone apps as well, but for now in the interest of speed we&#8217;re going with Web pages before apps. (Not that we&#8217;re not working on apps [...]]]></description>
			<content:encoded><![CDATA[<p>This week I&#8217;m getting to sink my teeth into one of my big priorities for the year: building mobile websites.</p>
<p>Yes, websites and not apps. I&#8217;d love to be building phone apps as well, but for now in the interest of speed we&#8217;re going with Web pages before apps. (Not that we&#8217;re not working on apps either, that&#8217;s just a separate topic.)</p>
<p>The good news for most Web designers is that building basic mobile websites is easy: Just write really simple HTML. You can use all the PHP you want since it&#8217;s server-side (insert also ASP, Django, your server-side secret weapon of choice). Ems are your friend in mobile Web design: Yes, you finally have to actually use them.</p>
<p>So far this year we&#8217;ve knocked out really simple mobile pages for <a href="http://data.desmoinesregister.com/dmr/iowa-high-school-wrestling-results/mobile-results.php" target="_blank">state high school wrestling tournament results</a> and for <a href="http://data.desmoinesregister.com/dmr/iowa-high-school-girls-basketball-results/index.php" target="_blank">state high school basketball tournament scores</a>.</p>
<p><a href="http://www.mikejcorey.com/wordpress/wp-content/uploads/2010/03/wrestlingandbballmobile.jpg"><img class="alignnone size-full wp-image-193" title="wrestlingandbballmobile" src="http://www.mikejcorey.com/wordpress/wp-content/uploads/2010/03/wrestlingandbballmobile.jpg" alt="wrestlingandbballmobile" width="630" height="395" /></a></p>
<p>As you can see, nothing fancy, but they look pretty, and they work on pretty much every mobile browser we tried them on, smartphone or no.</p>
<p>These were also a bit of R and D for the one I really want to build, which is in progress now: a mobile, location-aware version of our <a href="http://www.mikejcorey.com/wordpress/2010/02/26/new-project-killing-potholes-with-user-input-local-government-support/">potholes map</a>.</p>
<p>This one is a lot more technically complex, as you might imagine. And as soon as I started researching and testing, I hit a big snag: BlackBerries.</p>
<p>We want to use basic Google Maps API features, so we have to use Javascript and Ajax. Right there is a big problem: Even the newest BlackBerry browsers don&#8217;t work with the Google Maps Javascript API.</p>
<p>We also want to include Facebook Connect integration, but the Javascript method won&#8217;t work for that on BlackBerries either (to be fair, it&#8217;s pretty buggy on iPhones and Android as well, but the FBML all renders, and you can log in with Javascript).</p>
<p>Location awareness in the browser? No problem on iPhones and Android, as long as the phone has GPS. Not so on most BlackBerries.</p>
<p>So that makes three dead-ends today. I figured I could at least <a href="http://na.blackberry.com/eng/developers/" target="_blank">download the BlackBerry simulator</a> and figure out what type of site I COULD make work on a BlackBerry with the <a href="http://code.google.com/apis/maps/documentation/staticmaps/" target="_blank">Google Static Maps API</a>. (This would certainly work, but no moving the point once it&#8217;s geocoded, which would be an issue for our purposes)</p>
<p>Oops, the simulator is for Windows only. Does RIM really think there&#8217;s only a few Web developers using Macs? Is it even a majority using Windows?</p>
<p>So I&#8217;ll just download the simulator on my Virtual Box and run it from there, right? Only if I want to spend 5 minutes waiting for the simulator to actually run, only to give me a connection error and not show any sites when I DO get the browser running.</p>
<p>I. Give. Up.</p>
<p>So can Web developers afford to ignore BlackBerry? Well, not probably not completely, but luckily <a href="http://arstechnica.com/gadgets/news/2010/02/google-makes-biggest-gain-in-smartphone-market-share.ars" target="_blank">the number of BlackBerry browser users is heading the in the right direction</a>.</p>
<p>Comscore reported in December that from September 2009 to Dec. 2009 RIM browser market share fell by one percentage point, while mobile Safari was up 1.2 percentage points. Google mobile browser share was up 2.7 percentage points. Yes, RIM still had 41.6% of the smartphone marketshare, but that&#8217;s not so much more than iPhones and Google phones combined: 30.5% in December, and certainly still going up.</p>
<p>And my (admittedly unscientific) research with BlackBerry users in our newsroom seemed to indicate that people with BlackBerries aren&#8217;t as interested in Web usage as their Google- and iPhone-toting colleagues. They don&#8217;t seem to expect the same degree of neato interface/experience.</p>
<p>In any case, our options for mobile potholes:</p>
<p>1) Build two mobile sites, one for iPhones and Google, and another for BlackBerries. Do you want to build 2 sites for everything? Me neither.</p>
<p>2) Build for the browsers that work (OK, not fair, but it&#8217;s not like the Google Maps Javascrip API is new), on the theory that you&#8217;re offering the people who DO care the best experience you can, and that the number of people with access to the best features is rising all the time. And maybe BlackBerry will get its act together.</p>
<p>Neither are great, but for now I think I have to opt for 2. Sorry, BlackBerry friends! But I&#8217;d love to hear your thoughts. Am I way off base on the &#8220;BlackBerry users aren&#8217;t after great Web experiences&#8221; theory?</p>
<p>Am I missing the magical secret to BlackBerry Javascript development?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikejcorey.com/wordpress/2010/03/02/frustrated-with-all-things-blackberry/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New project: Killing potholes with user input, local government support</title>
		<link>http://www.mikejcorey.com/wordpress/2010/02/26/new-project-killing-potholes-with-user-input-local-government-support/</link>
		<comments>http://www.mikejcorey.com/wordpress/2010/02/26/new-project-killing-potholes-with-user-input-local-government-support/#comments</comments>
		<pubDate>Sat, 27 Feb 2010 04:22:18 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[Featured projects]]></category>
		<category><![CDATA[News and posts]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[des moines]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Facebook Connect]]></category>
		<category><![CDATA[geolocation]]></category>
		<category><![CDATA[Google Maps API]]></category>
		<category><![CDATA[government partnership]]></category>
		<category><![CDATA[iowa]]></category>
		<category><![CDATA[MySQL->PHP->JSON->Ajax]]></category>
		<category><![CDATA[potholes]]></category>
		<category><![CDATA[user-generated]]></category>

		<guid isPermaLink="false">http://www.mikejcorey.com/wordpress/?p=176</guid>
		<description><![CDATA[Location awareness, Facebook Connect and the first time we've ever sent data TO a local government.]]></description>
			<content:encoded><![CDATA[<p><strong>Project link:</strong> <a href="http://data.desmoinesregister.com/dmr/des-moines-potholes-map/" target="_blank">DesMoinesRegister.com/potholes</a></p>
<p><strong>HTML/Javascript/Facebook Connect Development:</strong> Michael Corey<br />
<strong>Database backend/Local government admin:</strong> James E. Wilkerson</p>
<p><a href="http://www.mikejcorey.com/wordpress/2010/03/09/location-aware-potholes-map-lives/"><strong>UPDATE:</strong> Mobile, location-aware potholes beta map now launched!</a></p>
<p>In case you haven&#8217;t noticed, potholes are everywhere. We hate &#8216;em, and we&#8217;re out to kill them.</p>
<p>We did a similar map two years ago, but there&#8217;s a few big twists that make us pretty proud of this one.</p>
<p><strong>Working with local governments:</strong> We consulted extensively with Des Moines Public Works to see how we could build a system for reporting potholes that worked for our users AND for the city. We sent them data last time as well, but it didn&#8217;t work well for them. We didn&#8217;t have reverse-geocoding figured out two years ago, and someone had to re-enter our data into the city&#8217;s system to make anything happen.</p>
<p>Neither side wanted a repeat of that, but we really wanted to build a system Des Moines would actually use. The result: We send them daily e-mails with Excel attachments showing new potholes with exact locations. They&#8217;ve told use they&#8217;re going to hand those spreadsheets directly to their road crews and use that as a manifest for the day alongside their existing system. We&#8217;ve gotten word from several suburbs that they&#8217;ll participate as well.</p>
<p>As far as I know this is the first time we&#8217;ve ever pushed data TO a government agency. Usually we&#8217;re trying our best to pry it loose from them. And we think this is a pretty big win-win. We have a larger megaphone than the city Web site, and they have the power to make the evil potholes go away.</p>
<p><strong>Facebook Connect support:</strong> This is our first Facebook Connect app. We&#8217;re giving users the option of logging in with their Facebook ID or their DesMoinesRegister.com account. We wanted to add registration of some kind this time around to cut down on spam and to see how willing people will be to use their real ID on our site.</p>
<p>We&#8217;re only scratching the surface of what we can do with Facebook Connect, but hey, we launched this thing today. Give us a bit. Lots more to come.</p>
<p><strong>Geo-awareness:</strong> We&#8217;ve enabled browser-geolocation if the user chooses, so she can mark a pothole near her current location. This isn&#8217;t incredibly useful for desktop users, but we&#8217;re adding a mobile version soon, and we all know that&#8217;s where the real geolocation action is.</p>
<p>The early buzz on Twitter in response to the launch has really been good. And this is the first time I&#8217;ve been happy about the worst winter in my recent memory: there won&#8217;t be a shortage of potholes to fill this spring.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikejcorey.com/wordpress/2010/02/26/new-project-killing-potholes-with-user-input-local-government-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Denmark photos!</title>
		<link>http://www.mikejcorey.com/wordpress/2009/11/27/denmark-photos/</link>
		<comments>http://www.mikejcorey.com/wordpress/2009/11/27/denmark-photos/#comments</comments>
		<pubDate>Sat, 28 Nov 2009 02:55:25 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[News and posts]]></category>

		<guid isPermaLink="false">http://www.mikejcorey.com/wordpress/?p=169</guid>
		<description><![CDATA[Lots of photos from my trip to Denmark are now posted!
Highlights include Koldinghus:

Tivoli at Jul, with København city hall in the background:

Smørrebrød in Amagerbro:

]]></description>
			<content:encoded><![CDATA[<p><a href="http://picasaweb.google.com/mikejcorey/BestOfDenmark2009?authkey=Gv1sRgCM7ztaGzm8bqew&amp;feat=directlink">Lots of photos from my trip to Denmark are now posted!</a></p>
<p>Highlights include Koldinghus:</p>
<p><a href="http://picasaweb.google.com/mikejcorey/BestOfDenmark2009?authkey=Gv1sRgCM7ztaGzm8bqew&amp;feat=directlink"><img class="alignnone size-full wp-image-170" title="Koldinghus620" src="http://www.mikejcorey.com/wordpress/wp-content/uploads/2009/11/Koldinghus620.jpg" alt="Koldinghus620" width="620" height="465" /></a></p>
<p>Tivoli at Jul, with København city hall in the background:</p>
<p><a href="http://picasaweb.google.com/mikejcorey/BestOfDenmark2009?authkey=Gv1sRgCM7ztaGzm8bqew&amp;feat=directlink"><img class="alignnone size-full wp-image-171" title="TivoliTower500" src="http://www.mikejcorey.com/wordpress/wp-content/uploads/2009/11/TivoliTower500.jpg" alt="TivoliTower500" width="500" height="609" /></a></p>
<p>Smørrebrød in Amagerbro:</p>
<p><a href="http://picasaweb.google.com/mikejcorey/BestOfDenmark2009?authkey=Gv1sRgCM7ztaGzm8bqew&amp;feat=directlink"><img class="alignnone size-full wp-image-172" title="Smorrebrod620" src="http://www.mikejcorey.com/wordpress/wp-content/uploads/2009/11/Smorrebrod620.jpg" alt="Smorrebrod620" width="620" height="420" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikejcorey.com/wordpress/2009/11/27/denmark-photos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Danmark, farvel</title>
		<link>http://www.mikejcorey.com/wordpress/2009/11/25/danmark-farvel/</link>
		<comments>http://www.mikejcorey.com/wordpress/2009/11/25/danmark-farvel/#comments</comments>
		<pubDate>Wed, 25 Nov 2009 08:32:12 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[News and posts]]></category>

		<guid isPermaLink="false">http://www.mikejcorey.com/wordpress/?p=164</guid>
		<description><![CDATA[I&#8217;m waiting groggily (not the Tivoli kind of grog) and a bit grumpily for my flight out of København. I&#8217;ve had a great time in Denmark and will have a lot more to say in the next few days, but for now anything I post is going to be more unintelligible than me trying to [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m waiting groggily (not the Tivoli kind of grog) and a bit grumpily for my flight out of København. I&#8217;ve had a great time in Denmark and will have a lot more to say in the next few days, but for now anything I post is going to be more unintelligible than me trying to say <a href="http://www.youtube.com/watch?v=z8VziyktyS0" target="_blank">&#8220;<span id="result_box"><span style="background-color: #ffffff;" title="red gruel with cream">rød grød med fløde.&#8221;</span></span></a></p>
<p>So an early thank you to everyone who made me feel so welcome here. I miss home, but it&#8217;s very hard to leave. Hopefully we&#8217;ll all meet again soon.</p>
<p><a href="http://www.mikejcorey.com/wordpress/wp-content/uploads/2009/11/TivoliStars.jpg"><img class="size-full wp-image-165 alignnone" title="TivoliStars" src="http://www.mikejcorey.com/wordpress/wp-content/uploads/2009/11/TivoliStars.jpg" alt="Tivoli at night" width="620" height="465" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikejcorey.com/wordpress/2009/11/25/danmark-farvel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Danmark, her kommer jeg!</title>
		<link>http://www.mikejcorey.com/wordpress/2009/11/10/danmark-her-kommer-jeg/</link>
		<comments>http://www.mikejcorey.com/wordpress/2009/11/10/danmark-her-kommer-jeg/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 01:56:52 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[News and posts]]></category>
		<category><![CDATA[brondby]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[danmark]]></category>
		<category><![CDATA[Denmark]]></category>
		<category><![CDATA[geoforum]]></category>
		<category><![CDATA[Google Maps]]></category>
		<category><![CDATA[kolding]]></category>
		<category><![CDATA[kortdage]]></category>
		<category><![CDATA[mapping]]></category>
		<category><![CDATA[ob]]></category>

		<guid isPermaLink="false">http://www.mikejcorey.com/wordpress/?p=158</guid>
		<description><![CDATA[Hello, Denmark visitors! I can see some traffic coming in from the GeoForum site, and rest assured, I&#8217;m plugging away and putting the finishing touches on my presentation for Kortdage 2009 in Kolding next week.
I&#8217;ll be talking about the use of Google Maps in journalism, and it should be a fun talk. In any case [...]]]></description>
			<content:encoded><![CDATA[<p>Hello, Denmark visitors! I can see some traffic coming in from the <a href="http://www.geoforum.dk/" target="_blank">GeoForum site</a>, and rest assured, I&#8217;m plugging away and putting the finishing touches on my presentation for <a href="http://www.geoforum.dk/Velkommen.aspx" target="_blank">Kortdage 2009 in Kolding next week</a>.</p>
<p><a href="http://www.geoforum.dk/Default.aspx?ID=8845" target="_blank">I&#8217;ll be talking about the use of Google Maps in journalism</a>, and it should be a fun talk. In any case it has been fun for me to go back over the last few years of work and see how far we&#8217;ve come.</p>
<p>And of course I&#8217;m extremely excited to be visiting Denmark. Many thanks in advance to GeoForum Danmark and especially to Jesper Ishøj, Hans Ravnkjær Larsen, Lars Brodersen and more for helping to bring me across the Atlantic. I&#8217;m excited to learn more about Danish history and culture, and I&#8217;m especially looking forward to meeting some of the innovators in Danish neocartography and journalism.</p>
<p>Those who know me well also know how excited I am to have the opportunity to see a European football match while I&#8217;m there between <a href="http://www.brondby.com" target="_blank">Bronby</a> and <a href="http://www.ob.dk" target="_blank">OB</a>, two of Denmark&#8217;s top teams. Someone be sure to tell me what colors not to wear before we go!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikejcorey.com/wordpress/2009/11/10/danmark-her-kommer-jeg/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Guatemala project wins national APME award</title>
		<link>http://www.mikejcorey.com/wordpress/2009/10/20/guatemala-project-wins-national-apme-award/</link>
		<comments>http://www.mikejcorey.com/wordpress/2009/10/20/guatemala-project-wins-national-apme-award/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 02:38:54 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[News and posts]]></category>

		<guid isPermaLink="false">http://www.mikejcorey.com/wordpress/?p=156</guid>
		<description><![CDATA[I haven&#8217;t done a full project posting for this one yet (it&#8217;s a bit older than this site), but clearly I&#8217;m going to have to now: The Des Moines Register&#8217;s Guatemala: Hope At Any Cost project is a winner of this years APME International Perspectives award.
Register reporter Tony Leys and Register photographer Arturo Fernandez traveled [...]]]></description>
			<content:encoded><![CDATA[<p>I haven&#8217;t done a full project posting for this one yet (it&#8217;s a bit older than this site), but clearly I&#8217;m going to have to now: The Des Moines Register&#8217;s <a href="http://desmoinesregister.com/guatemala" target="_blank">Guatemala: Hope At Any Cost</a> project <a href="http://www.apme.com/awards/2009/080309ap_newspaper_awards.shtml" target="_blank">is a winner of this years APME International Perspectives award.</a></p>
<p>Register reporter Tony Leys and Register photographer Arturo Fernandez traveled to Guatemala in October 2008 to gain another perspective on a large immigration raid at a Postville, Iowa meatpacking plant in May 2008. The raid was unusual, in part, because federal officials pressed identity theft charges that landed longer prison sentences than many of the workers likely would have expected.</p>
<p>Tony and Arturo went to Guatemala to get a glimpse of the life that many of the workers had left and were now returning to in Guatemala after serving their prison terms.</p>
<p>I love working with Tony and Arturo: Both of them always turn in top-notch work that challenges me to do a presentation that&#8217;s up to the task of showcasing the beautiful and moving photography and words they produce.</p>
<p>The story they brought back was desperation: the Guatemalans who traveled to Iowa knew they were gambling with their families&#8217; wellbeing in coming illegally to the United States. When they landed in prison, rather than being simply deported as is often the case, their families were suddenly cut off from a major source of income and put into an even more dire financial situation. But people from the same rural communities are still leaving for the United States, because things are so bad at home it&#8217;s worth the risk.</p>
<p>I&#8217;m really glad to see the project get the attention it deserves &#8211; congratulations to Art, Tony, and to everyone else involved!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikejcorey.com/wordpress/2009/10/20/guatemala-project-wins-national-apme-award/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Buddy Holly, Parkersburg projects win regional Emmy awards</title>
		<link>http://www.mikejcorey.com/wordpress/2009/10/20/buddy-holly-parkersburg-projects-win-regional-emmy-awards/</link>
		<comments>http://www.mikejcorey.com/wordpress/2009/10/20/buddy-holly-parkersburg-projects-win-regional-emmy-awards/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 02:16:59 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[News and posts]]></category>
		<category><![CDATA[award]]></category>
		<category><![CDATA[Buddy Holly]]></category>
		<category><![CDATA[Emmy]]></category>
		<category><![CDATA[parkersburg]]></category>

		<guid isPermaLink="false">http://www.mikejcorey.com/wordpress/?p=151</guid>
		<description><![CDATA[It&#8217;s been a long time since I&#8217;ve posted, but I can&#8217;t forget to mention the biggest news of late: The Des Moines Register took home two regional Emmy awards last month!
Buddy Holly: 50 Years After the Crash That Changed Rock &#8216;n&#8217; Roll won in the Advanced Media Documentary: Historical-Cultural category. More details on the project [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a long time since I&#8217;ve posted, but I can&#8217;t forget to mention the biggest news of late: <a href="http://midwestemmys.org/2010/01/22/emmy-night-2009-2/" target="_blank">The Des Moines Register took home two regional Emmy awards last month!</a></p>
<p><a href="http://desmoinesregister.com/holly" target="_blank">Buddy Holly: 50 Years After the Crash That Changed Rock &#8216;n&#8217; Roll</a> won in the Advanced Media Documentary: Historical-Cultural category. <a href="http://www.mikejcorey.com/wordpress/2009/02/28/buddy-holly-crash-anniversary-mini-site/">More details on the project here.</a></p>
<p><a href="http://desmoinesregister.com/parkersburgfootball" target="_blank">The Falcons Rise Again</a> won in the Advanced Media Sports category. <a href="http://www.mikejcorey.com/wordpress/2008/08/27/flash-project-the-falcons-rise-again/">More details on the project here.</a></p>
<p>I know what you&#8217;re thinking: REGIONAL, right? It&#8217;s the same Emmy program, we really did get two of those cool statues, and were up against some serious competition. No other Iowa media outlet had two Emmy awards this year, and we won two as a newspaper site against mostly television stations.</p>
<p>It&#8217;s great to work with the quality of people who make awards like this possible. The Falcons Rise Again video was very much the work of Todd Bailey, who unfortunately left the Register earlier this year. I definitely miss the luxury of knowing that when Todd is working on a project I&#8217;m going to get a pitch-perfect piece with a great understanding of the tone we need.</p>
<p>The Buddy Holly project was a collaborative effort among a lot of great people that was more than a year in the making. We&#8217;re really excited and a bit surprised that we got to be honored for it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikejcorey.com/wordpress/2009/10/20/buddy-holly-parkersburg-projects-win-regional-emmy-awards/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
