<?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"
	>

<channel>
	<title>unitstep.net &#187; maps</title>
	<atom:link href="http://unitstep.net/blog/category/maps/feed/" rel="self" type="application/rss+xml" />
	<link>http://unitstep.net</link>
	<description>the home of peter chng</description>
	<pubDate>Sun, 30 Nov 2008 23:12:11 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.5</generator>
	<language>en</language>
			<item>
		<title>Decoding Google Maps Encoded Polylines using PHP</title>
		<link>http://unitstep.net/blog/2008/08/02/decoding-google-maps-encoded-polylines-using-php/</link>
		<comments>http://unitstep.net/blog/2008/08/02/decoding-google-maps-encoded-polylines-using-php/#comments</comments>
		<pubDate>Sat, 02 Aug 2008 20:32:39 +0000</pubDate>
		<dc:creator>Peter Chng</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[development]]></category>

		<category><![CDATA[google]]></category>

		<category><![CDATA[maps]]></category>

		<category><![CDATA[programming]]></category>

		<category><![CDATA[polylines]]></category>

		<guid isPermaLink="false">http://unitstep.net/?p=361</guid>
		<description><![CDATA[I&#8217;ve talked about the Google Maps encoded polyline format before. While there&#8217;s some nice utilities for encoding polylines that take the work out of implementing it yourself, I couldn&#8217;t find many polyline decoders.  
This made it somewhat tedious to decode them, as the only way to get the original list of points was to [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve talked about the <a href="http://code.google.com/apis/maps/documentation/polylinealgorithm.html">Google Maps encoded polyline format</a> <a href="/blog/2008/05/11/playing-with-google-maps-and-encoded-polylines/">before</a>. While there&#8217;s some nice utilities for <a href="http://facstaff.unca.edu/mcmcclur/GoogleMaps/EncodePolyline/">encoding polylines</a> that take the work out of implementing it yourself, I couldn&#8217;t find many polyline <em>decoders</em>.  </p>
<p>This made it somewhat tedious to decode them, as the only way to get the original list of points was to create a <a href="http://code.google.com/apis/maps/documentation/overlays.html#Encoded_Polylines"><code>GPolyline</code></a> and then pull out the points from that object.  This is not ideal since the work must always be done on the client side with JavaScript and using Google Maps.</p>
<p>To solve this, I quickly ported the algorithm over to <acronym class="uttInitialism" title="PHP: Hypertext Preprocessor">PHP</acronym> from the JavaScript source.  Please feel free to download/modify/use this script.</p>
<div class="download">
<a class="icon" href="http://unitstep.net/wordpress/wp-content/uploads/2008/08/decodepolylinetoarray.zip">Google Maps Polyline Decoder in <acronym class="uttInitialism" title="PHP: Hypertext Preprocessor">PHP</acronym></a>
</div>
<p>Since the encoded polyline format offers numerous benefits (and because I had data already stored in this format) I did not want to move away from it. At the same time, I needed access to the points for working with things like <a href="http://code.google.com/apis/maps/documentation/staticmaps/">Google Static Maps</a>, which curiously does not accept the encoded polyline format for displaying paths. (Probably to reduce resource usage on their end, since decoding takes CPU time)</p>
<p>Thankfully the polyline decoding algorithm was <a href="http://facstaff.unca.edu/mcmcclur/GoogleMaps/EncodePolyline/decode.js">already available</a> at Mark McClure&#8217;s site.  I spent a few minutes understanding the process and porting it over to <acronym class="uttInitialism" title="PHP: Hypertext Preprocessor">PHP</acronym>.  The source is attached above and is released under an MIT license.  Basically, the only change I had to make was to use some <acronym class="uttInitialism" title="PHP: Hypertext Preprocessor">PHP</acronym> functions to convert characters to their ASCII code, since <acronym class="uttInitialism" title="PHP: Hypertext Preprocessor">PHP</acronym> doesn&#8217;t have a <code>charCodeAt()</code> function.</p>
<p>Please let me know if you find it to be useful.</p>
<hr/>Copyright &copy; 2008 <strong><a href="http://unitstep.net">unitstep.net</a></strong>. This Feed is for personal non-commercial use only. If you are not reading this material in your news aggregator, the site you are looking at is guilty of copyright infringement. Please contact <strong><a href="mailto:webmaster@unitstep.net">webmaster@unitstep.net</a></strong> for more information.<br/><span style="float: right;font-size: 7pt"><a href="http://blog.taragana.com/index.php/archive/wordpress-plugins-provided-by-taraganacom/">Plugin</a> by <a href="http://www.taragana.com/">Taragana</a></span>]]></content:encoded>
			<wfw:commentRss>http://unitstep.net/blog/2008/08/02/decoding-google-maps-encoded-polylines-using-php/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Announcing RunTrackr: Create and track running route distances easily!</title>
		<link>http://unitstep.net/blog/2008/07/11/announcing-runtrackr-create-and-track-running-route-distances-easily/</link>
		<comments>http://unitstep.net/blog/2008/07/11/announcing-runtrackr-create-and-track-running-route-distances-easily/#comments</comments>
		<pubDate>Sat, 12 Jul 2008 03:16:50 +0000</pubDate>
		<dc:creator>Peter Chng</dc:creator>
		
		<category><![CDATA[exercise]]></category>

		<category><![CDATA[maps]]></category>

		<category><![CDATA[measuring routes]]></category>

		<category><![CDATA[running]]></category>

		<category><![CDATA[distances]]></category>

		<category><![CDATA[measure]]></category>

		<category><![CDATA[routes]]></category>

		<category><![CDATA[runtrackr]]></category>

		<guid isPermaLink="false">http://unitstep.net/?p=343</guid>
		<description><![CDATA[
I&#8217;ve just launched RunTrackr.  It&#8217;s a site where you can create a running route in order to track, among other things, distances.  It&#8217;s designed to be a tool to aid anyone who runs/jogs a lot, either recreationally or for training.  A training log is also provided so that you can easily keep [...]]]></description>
			<content:encoded><![CDATA[<p class="image align-right"><a href='http://runtrackr.com'><img src="http://unitstep.net/wordpress/wp-content/uploads/2008/07/runtrackr-1.jpg" alt="" title="runtrackr-1" width="239" height="94" class="alignnone size-full wp-image-345" /></a></p>
<p>I&#8217;ve just launched <a href="http://runtrackr.com/">RunTrackr</a>.  It&#8217;s a site where you can <a href="http://runtrackr.com/routes/add">create a running route</a> in order to track, among other things, distances.  It&#8217;s designed to be a tool to aid anyone who runs/jogs a lot, either recreationally or for training.  A training log is also provided so that you can easily keep track of your running records and record your progress during training or just to watch your personal improvement.</p>
<p>Here&#8217;s a quick overview of what&#8217;s possible with <a href="http://runtrackr.com/">RunTrackr</a> as well as what we have in store for the future in terms of improvements to the site. </p>
<h2>Adding/Creating a route</h2>
<p><a href="http://runtrackr.com/routes/add">Creating a route</a> probably the main reason you&#8217;d want to use RunTrackr.  By creating a running route, you can measure its distance and keep track of it in your training log every time you run it. </p>
<p class="image">
<img src="http://unitstep.net/wordpress/wp-content/uploads/2008/07/runtrackr-2.jpg" alt="RunTrackr Preview" />
</p>
<p>Plotting a route is very easy; all you need to do is enter your location (Eg. &#8220;Belleville, ON&#8221;) and then click to add points.  Existing points can be dragged around to alter the route.  When you&#8217;re done, just click &#8220;Save Route&#8221; to finalize! You can also choose to enter a short description, tag your route with descriptive labels or rate your route&#8217;s difficulty.</p>
<p>Later on, I plan to add support for uploading automatically-generated routes/plots from GPS devices like those from Garmin, et al.  This will make adding routes even easier for those who have access to such devices.</p>
<h2>Searching for routes</h2>
<p><a href="http://runtrackr.com/routes/search">Searching for routes</a> is a great way to find running routes in your area submitted by other people.  Simply enter a location and click &#8220;Search&#8221;. </p>
<p class="image">
<img src="http://unitstep.net/wordpress/wp-content/uploads/2008/07/runtrackr-3.jpg" alt="RunTrackr Preview" />
</p>
<p>If any routes are found, their location will show up on the map as markers and in the sidebar listing.  Clicking on one brings up a preview of what the route looks like; clicking the preview image takes you to a full-sized view where you can see other statistics about the route.</p>
<h2>Viewing routes</h2>
<p>Going to the full view of a route brings up all of its details, such as the distance, description and any tags.  You can also choose to add a route to your &#8220;<a href="http://runtrackr.com/favorites">Favourites</a>&#8221; so that you can easily keep track of it in your Training Log.</p>
<p class="image">
<img src="http://unitstep.net/wordpress/wp-content/uploads/2008/07/runtrackr-4.jpg" alt="RunTrackr Preview" />
</p>
<h2>Training Log</h2>
<p>The <a href="http://runtrackr.com/training_log">Training Log</a> allows you to keep track of the routes you&#8217;ve run and provides an easy way to record your progress.  Here, each time you&#8217;ve run a route you can enter how long it took along with any other comments about the run.  Calories burnt are automatically calculated based on an approximation that takes into account your weight and the distance.</p>
<p class="image">
<img src="http://unitstep.net/wordpress/wp-content/uploads/2008/07/runtrackr-5.jpg" alt="RunTrackr Preview" />
</p>
<p>The training log is very basic at this point and several improvements will be forthcoming, such as weekly/monthly/cumulative totals as with as some other statistics and graphics like charts and graphs. (Because everyone, myself included, loves colourful pictures)</p>
<h2>Summing it up</h2>
<p><a href="http://runtrackr.com/users/register">Registration</a> is optional but takes less than a minute and allows you to use fully use the service.  We&#8217;ll be rolling out more features as times goes on.  I regret not being able to launch this site earlier in the year (when the weather was starting to get nicer and people starting to get out more) but sometimes that&#8217;s just how things turn out.  </p>
<p>As always, I welcome all <a href="/contact">feedback</a> about RunTrackr, including any suggestions you might have about how to improve the service! In the meantime, please check out the site if you&#8217;re interested and enjoy your time there.</p>
<hr/>Copyright &copy; 2008 <strong><a href="http://unitstep.net">unitstep.net</a></strong>. This Feed is for personal non-commercial use only. If you are not reading this material in your news aggregator, the site you are looking at is guilty of copyright infringement. Please contact <strong><a href="mailto:webmaster@unitstep.net">webmaster@unitstep.net</a></strong> for more information.<br/><span style="float: right;font-size: 7pt"><a href="http://blog.taragana.com/index.php/archive/wordpress-plugins-provided-by-taraganacom/">Plugin</a> by <a href="http://www.taragana.com/">Taragana</a></span>]]></content:encoded>
			<wfw:commentRss>http://unitstep.net/blog/2008/07/11/announcing-runtrackr-create-and-track-running-route-distances-easily/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Google Static Maps API key issues</title>
		<link>http://unitstep.net/blog/2008/06/28/google-static-maps-api-key-issues/</link>
		<comments>http://unitstep.net/blog/2008/06/28/google-static-maps-api-key-issues/#comments</comments>
		<pubDate>Sat, 28 Jun 2008 16:10:36 +0000</pubDate>
		<dc:creator>Peter Chng</dc:creator>
		
		<category><![CDATA[google]]></category>

		<category><![CDATA[maps]]></category>

		<category><![CDATA[api]]></category>

		<category><![CDATA[google maps]]></category>

		<category><![CDATA[static]]></category>

		<guid isPermaLink="false">http://unitstep.net/?p=337</guid>
		<description><![CDATA[
I&#8217;ve just starting playing around with the Google Static Maps API as a complement to the regular Google Maps API, which as you probably know, is for JavaScript.  The Static Maps API, on the other hand, provides a way to display static map images.  This is useful in situations where you just need [...]]]></description>
			<content:encoded><![CDATA[<p class="image align-right"><img src="http://unitstep.net/wordpress/wp-content/uploads/2008/05/google-maps.gif" alt="" title="google-maps" /></p>
<p>I&#8217;ve just starting playing around with the <a href="http://code.google.com/apis/maps/">Google Static Maps API</a> as a complement to the regular <a href="http://code.google.com/apis/maps/">Google Maps API</a>, which as you probably know, is for JavaScript.  The Static Maps API, on the other hand, provides a way to display static map images.  This is useful in situations where you just need a non-interactive map and don&#8217;t want the overhead of an Ajax/JavaScript-based one.</p>
<p>However, I ran into some minor problems related to the <a href="http://code.google.com/apis/maps/signup.html">API key</a> usage with the Static Maps.  Basically, an API key is tied to a certain domain name so that Google can keep track of your site&#8217;s usage.  This means that the API key is tied to the domain name of the web site where you&#8217;re using the Google Maps API.</p>
<p>As in most development situations, I maintain a production server (with a real domain name) and a test/sandbox/development machine, which is just running off of my <code>localhost</code>.  Thus, I had to get two API keys - one for the real domain name, and one for <code>localhost</code> and then switch between the two depending on the host name.  (In <acronym class="uttInitialism" title="PHP: Hypertext Preprocessor">PHP</acronym> it&#8217;s fairly easy to check, using something like <code>$_SERVER['SERVER_NAME']</code>)</p>
<p>However, with the regular JavaScript-based Google Maps, it appears that if you&#8217;re running off of <code>localhost</code> (<em>not</em> 127.0.0.1) the service doesn&#8217;t check if you have a valid API key - this was probably done because many people are probably running test servers off of <code>localhost</code> and trying enforce usage limits would be counter-productive. (You do, however, need to have a valid API key - even if it doesn&#8217;t match <code>localhost</code> - if you want to use <code>GClientGeocoder</code> to resolve locations)</p>
<p>Because of this, at one point or another, I decided just to stick with using the production API key in all situations; after all, things continued to work even on the development server and in general, I don&#8217;t like making changes just for testing purposes.  </p>
<p>This ended up causing problems when I started using the Static Maps API though.  It turns out that this API <strong>does</strong> require you to have a valid API key matched to the host name in all circumstances, even if it&#8217;s <code>localhost</code>.  This, of course, is the proper behaviour, but it differs somewhat from the behaviour of the standards Google Maps API.</p>
<p>Guess it pays to be correct in all situations, even if you don&#8217;t need to be!</p>
<hr/>Copyright &copy; 2008 <strong><a href="http://unitstep.net">unitstep.net</a></strong>. This Feed is for personal non-commercial use only. If you are not reading this material in your news aggregator, the site you are looking at is guilty of copyright infringement. Please contact <strong><a href="mailto:webmaster@unitstep.net">webmaster@unitstep.net</a></strong> for more information.<br/><span style="float: right;font-size: 7pt"><a href="http://blog.taragana.com/index.php/archive/wordpress-plugins-provided-by-taraganacom/">Plugin</a> by <a href="http://www.taragana.com/">Taragana</a></span>]]></content:encoded>
			<wfw:commentRss>http://unitstep.net/blog/2008/06/28/google-static-maps-api-key-issues/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Playing with Google Maps and encoded polylines</title>
		<link>http://unitstep.net/blog/2008/05/11/playing-with-google-maps-and-encoded-polylines/</link>
		<comments>http://unitstep.net/blog/2008/05/11/playing-with-google-maps-and-encoded-polylines/#comments</comments>
		<pubDate>Mon, 12 May 2008 01:35:59 +0000</pubDate>
		<dc:creator>Peter Chng</dc:creator>
		
		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[development]]></category>

		<category><![CDATA[google]]></category>

		<category><![CDATA[maps]]></category>

		<category><![CDATA[programming]]></category>

		<category><![CDATA[documentation]]></category>

		<category><![CDATA[google maps]]></category>

		<category><![CDATA[polylines]]></category>

		<guid isPermaLink="false">http://unitstep.net/?p=324</guid>
		<description><![CDATA[
I&#8217;ve been playing around with the Google Maps API for a bit and it&#8217;s turned out to be a great way to get started with &#8220;mashups&#8221; and the like.  One of the best uses of the API is the ability to create paths or routes on the map.
This is done by creating GPolyline object [...]]]></description>
			<content:encoded><![CDATA[<p class="image align-right"><img src="http://unitstep.net/wordpress/wp-content/uploads/2008/05/google-maps.gif" alt="" title="google-maps" /></p>
<p>I&#8217;ve been playing around with the <a href="http://code.google.com/apis/maps/documentation/index.html">Google Maps API</a> for a bit and it&#8217;s turned out to be a great way to get started with &#8220;mashups&#8221; and the like.  One of the best uses of the API is the ability to create paths or routes on the map.</p>
<p>This is done by creating <a href="http://code.google.com/apis/maps/documentation/overlays.html#Polylines_Overview"><code>GPolyline</code></a> object and then adding it as an overlay to the map.  Basically, a polyline is just an ordered list of geographical points/coordinates on the map, each of which is a <a href="http://code.google.com/apis/maps/documentation/reference.html#GLatLng"><code>GLatLng</code></a> object.  For serialization/storage of polylines, there is an <a href="http://code.google.com/apis/maps/documentation/polylinealgorithm.html">algorithm you can use</a> to Base64-encode a series of points; the resultant string can later be passed directly into a factory method to regenerate the <code>GPolyline</code>.  By using encoded polylines, you also get access to a few more interesting and useful options related to rendering and performance issues.</p>
<h3>Encoded Polylines</h3>
<p>Despite the <a href="http://code.google.com/apis/maps/documentation/polylinealgorithm.html">algorithm for encoding polylines</a> being readily available on the Google Maps API documentation site, there is no built-in functionality within the API for generating the encoded polyline string from an existing <code>GPolyline</code> object.  This might be a bit strange, but it&#8217;s probably because the encoding process requires some extra values that aren&#8217;t available in the typical polyline.</p>
<p>As specified on the algorithm page, you also need to specify a list of encoded &#8220;levels&#8221; in addition to the points themselves.  These levels tell the the Google Maps renderer when certain points can be omitted from the polyline depending on the zoom level.  For example, with a polyline with <em>n</em> points, you&#8217;ll <strong>always</strong> want to show the first and last point, no matter what the zoom level.  However, intermediate points can potentially be omitted at low zoom levels and only shown when the map has been sufficiently zoomed in to warrant the detail.  This sort of optimization cannot be done with the typical <code>GPolyline</code> constructor that just takes an array of points. (<code>GLatLng</code> objects)</p>
<h3>Making things easy</h3>
<p>If you&#8217;ve looked at the <a href="http://code.google.com/apis/maps/documentation/polylinealgorithm.html">polyline encoding algorithm</a>, you&#8217;ll probably notice that it&#8217;s a bit tricky unless you&#8217;ve taken course in CS or done a lot of this stuff before. (At least it was tricky for me)  Google has an <a href="http://code.google.com/apis/maps/documentation/polylineutility.html">interactive utility</a> for generating the encoded polyline format for you.  The results can then be stored and later fed into a call to the factory method <a href="http://code.google.com/apis/maps/documentation/reference.html#GPolyline"><code>GPolyline.fromEncoded()</code></a> to regenerate the polyline.</p>
<p>However if you want to generate the encoded polyline format on-the-fly as part of your application, the interactive utility is not really an option.  Instead of coding the algorithm from the ground-up, there&#8217;s a much better way of doing things, thanks to the <a href="http://facstaff.unca.edu/mcmcclur/GoogleMaps/EncodePolyline/">PolylineEncoder class</a> and other utilities provided by <a href="http://facstaff.unca.edu/mcmcclur/">Mark McClure</a>.</p>
<p>The <a href="http://facstaff.unca.edu/mcmcclur/GoogleMaps/EncodePolyline/PolylineEncoderClass.html">PolylineEncoder class</a> is written in JavaScript and is very straightforward in its usage.  (It has been ported to several other languages as listed on <a href="http://facstaff.unca.edu/mcmcclur/GoogleMaps/EncodePolyline/">his site</a>, in case you need to use it in different contexts)</p>
<p>Using this class allows you to quickly and easily convert a <code>GPolyline</code> into a compact encoded format useful for serialization or storage.  You can also use the class to convert arrays of points into encoded polylines, thus gaining the benefit of optimized rendering at different zoom levels.  McClure goes into an in-depth, but easy to understand <a href="http://facstaff.unca.edu/mcmcclur/GoogleMaps/EncodePolyline/algorithm.html">explanation of the encoding algorithm used</a> complete with animations that show exactly how the polyline approximations work.</p>
<p>I highly recommend the usage of his polyline encoder as it saves you the headache of implementing it yourself.  It&#8217;s well-written, thoroughly documented and is free for usage. (It isn&#8217;t licensed under open-source terms but has instead been placed in the public domain - which is perhaps even more &#8220;free&#8221;) McClure also has a few other <a href="http://facstaff.unca.edu/mcmcclur/GoogleMaps/">interesing Google Maps projects</a> that you may want to check out.</p>
<h3>Some documentation warnings</h3>
<p>The Google Maps API documentation is fairly thorough, but it&#8217;s out of date in some places, as <a href="http://groups.google.com/group/Google-Maps-API/browse_thread/thread/e0861bacc7531b08/b5e504771ebb12c4">some people have found</a>.  Indeed, in this case, it appears that the <code>GPolyline.fromEncoded()</code> is documented somewhat wrongly in the API reference, though curiously, is used properly in their <a href="http://code.google.com/apis/maps/documentation/overlays.html#Polylines_Overview">examples page</a>.  </p>
<p>Specifically, you <strong>should not</strong> use:</p>
<pre><code>GPolyline.fromEncoded(color?,  weight?,  opacity?,  latlngs,  zoomFactor,  levels,  numLevels)</code></pre>
<p>if you want to generate a polyline from the encoded format.  Instead, you should use something like:</p>
<pre><code>GPolyline.fromEncoded({
    color: "#FF0000",
    weight: 10,
    points: "yzocFzynhVq}@n}@o}@nzD",
    levels: "BBB",
    zoomFactor: 32,
    numLevels: 4
});</code></pre>
<p>This is because the API has been updated to accept an object of options instead of separate parameters.  This, in my opinion, is better for readability and takes advantage of JavaScript&#8217;s ability to define inline anonymous object literals.  </p>
<p>As a side note, the example actually calls something like <code>new GPolyline.fromEncoded</code>, but I&#8217;ve found that you don&#8217;t need the <code>new</code> keyword, and in fact, it&#8217;s a bit confusing that the example has it and that it would work - after all, you are calling a factory method that returns a type of <code>GPolyline</code>, and not directly instantiating an object. (At least as far as <a href="/blog/2008/01/24/javascript-and-inheritance/">JavaScript uses the <code>new</code> keyword</a>)</p>
<hr/>Copyright &copy; 2008 <strong><a href="http://unitstep.net">unitstep.net</a></strong>. This Feed is for personal non-commercial use only. If you are not reading this material in your news aggregator, the site you are looking at is guilty of copyright infringement. Please contact <strong><a href="mailto:webmaster@unitstep.net">webmaster@unitstep.net</a></strong> for more information.<br/><span style="float: right;font-size: 7pt"><a href="http://blog.taragana.com/index.php/archive/wordpress-plugins-provided-by-taraganacom/">Plugin</a> by <a href="http://www.taragana.com/">Taragana</a></span>]]></content:encoded>
			<wfw:commentRss>http://unitstep.net/blog/2008/05/11/playing-with-google-maps-and-encoded-polylines/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Measuring distances for your running route</title>
		<link>http://unitstep.net/blog/2007/06/14/measuring-distances-for-your-running-route/</link>
		<comments>http://unitstep.net/blog/2007/06/14/measuring-distances-for-your-running-route/#comments</comments>
		<pubDate>Thu, 14 Jun 2007 15:29:48 +0000</pubDate>
		<dc:creator>Peter Chng</dc:creator>
		
		<category><![CDATA[exercise]]></category>

		<category><![CDATA[google]]></category>

		<category><![CDATA[maps]]></category>

		<category><![CDATA[running]]></category>

		<category><![CDATA[web2.0]]></category>

		<guid isPermaLink="false">http://unitstep.net/blog/2007/06/14/measuring-distances-for-your-running-route/</guid>
		<description><![CDATA[
If you do a lot of running, you&#8217;ll often find that you&#8217;d like to keep track of how much distance you&#8217;ve accumulated.  This is especially important if you&#8217;re training for some event, or even if you&#8217;re just a casual runner looking to build up your endurance and stay in shape.  However, short of [...]]]></description>
			<content:encoded><![CDATA[<p class="image align-right"><a href="/wordpress/wp-content/uploads/2007/06/running-route-preview.png" title="Running routes with MapMyRun" rel="lightbox run"><img src="/wordpress/wp-content/uploads/2007/06/running-route-preview.thumbnail.png" alt="Running routes with MapMyRun" /></a></p>
<p>If you do a lot of running, you&#8217;ll often find that you&#8217;d like to keep track of how much distance you&#8217;ve accumulated.  This is especially important if you&#8217;re training for some event, or even if you&#8217;re just a casual runner looking to build up your endurance and stay in shape.  However, short of running around a track endlessly, it can be hard to gauge how far you&#8217;ve gone on your <a href="/blog/2006/07/05/running-route/">running route</a>.</p>
<p>Short of having a fancy device such as the <a href="http://playlistmag.com/reviews/2006/09/nikeipod/index.php">Nike iPod Kit</a> (which requires calibration), or an even more costly <a href="http://www.fitsense.co.uk/categories.php?cat=38">GPS watch</a> (that&#8217;ll probably eat through batteries), you can still manually measure your running distance using the many free tools out there, all of which are based upon the fantastic <a href="http://www.google.com/apis/maps/">Google Maps API</a>.  Let&#8217;s have a look at some of them.</p>
<div class="info">
<h3><a href="http://runtrackr.com/">RunTrackr</a> (shameless plug)</h3>
<p>I have since launched my own running route tracking site: <a href="http://runtrackr.com/">RunTrackr</a>.  Please check it out; it&#8217;s fairly new and I would appreciate any comments or feedback via the <a href="/contact">contact</a> page.  This will help me to improve the site.  Thanks!</p>
<p class="image">
<a href="http://runtrackr.com/"><img src="http://unitstep.net/wordpress/wp-content/uploads/2008/07/runtrackr-beta-3.jpg" alt="RunTrackr" title="RunTrackr" /></a>
</p>
<p>(Read <a href="/blog/2008/07/11/announcing-runtrackr-create-and-track-running-route-distances-easily/">more about RunTrackr</a>)
</div>
<h3><a href="http://www.gmap-pedometer.com/">Gmaps Pedometer</a></h3>
<p class="image align-right"><a rel="lightbox run" href='/wordpress/wp-content/uploads/2007/06/gmaps-pedometer.png' title='Running routes with GMaps Pedometer'><img src='/wordpress/wp-content/uploads/2007/06/gmaps-pedometer.thumbnail.png' alt='Running routes with GMaps Pedometer' /></a></p>
<p><a href="http://www.gmap-pedometer.com/">Gmaps Pedometer</a> was one of the first distance-logging tools created using the Google Maps API.  It works well for tracking running/biking routes, and includes a calorie counter based on your weight, as well as some rudimentary elevation information.  However, the interface is somewhat bland, and this app doesn&#8217;t include some of the features found on some other routes, such as a central repository of user-created running routes integrated with the main app.  You <strong>can</strong> save your running route, however, and users have shared their creations in their <a href="http://www.gmap-pedometer.com/phpBB2">forums</a>.  No registration is required (or available) for this site.  You can easily print maps from within the interface.</p>
<p>Overall, it&#8217;s an simple, but effective and easy way to track your distance.  It&#8217;s somewhat plain though, and a little lacking on features.  You also have to enter each point manually, since there&#8217;s no option to follow roads.  So, if your path goes down a curved boulevard, you&#8217;ll have to click along each point to keep the distance accurate, since the path just follows straight lines between each point.</p>
<h3><a href="http://www.walkjogrun.net/">WalkJogRun</a></h3>
<p class="image align-right"><a href='/wordpress/wp-content/uploads/2007/06/walkjogrun.png' title='Running routes with WalkJogRun' rel="lightbox run"><img src='/wordpress/wp-content/uploads/2007/06/walkjogrun.thumbnail.png' alt='Running routes with WalkJogRun' /></a></p>
<p><a href="http://www.walkjogrun.net/">WalkJogRun</a> is an application that has a large number of user-created running routes integrated with the map.  You can find routes near your location simply by searching for your city; markers will then show up on the map indicating where these running routes are.  Clicking on a marker will bring the running route onto the map as an overlay, along with distance measurements for each point along the route.  Zooming the map can be done with the mouse wheel, just like in the regular Google Maps.</p>
<p>Times are also included, and are in hours:minutes, and are based on a speed you select.  You can configure the distance/speed measurements to be in kilometers or miles (I still like miles, despite being raised metric for everything), and a calorie-counter based on your weight is also included.  These options are at the bottom of the screen, and are fairly small, and could be relocated for better visibility.</p>
<p>You can also create your own route by double clicking to enter points.  Creating running routes and saving them doesn&#8217;t require you to register, but you can, and have to, if you want to mark them as private or be able to come back and alter them later.  This seems fair enough, and it&#8217;s good that they don&#8217;t force you to register to use the service.  Also, it&#8217;s very nice to be able to see/search for other people&#8217;s routes right within the application.  Overall, the interface of WalkJogRun seems quite refined, and is fairly easy to use.  There are plenty of features, and you can even export routes to <a href="http://earth.google.com/">Google Earth</a>.</p>
<p>However, one thing to note is that this application feels somewhat sluggish.  This is no doubt due to the heavy use of the Google API and the resulting number of Ajax queries that must take place, in order to update the map with users&#8217; routes as you reposition it.  This is in stark contrast to Gmaps Pedometer, which while simple and plain, is also faster and more lightweight.  I suppose it&#8217;s a trade off.  And, like Gmaps, WalkJogRun doesn&#8217;t support a &#8220;follow by road&#8221; feature, so entering in paths down curved roads will take more time.</p>
<h3><a href="http://www.mapmyrun.com/">MapMyRun</a></h3>
<p class="image align-right"><a rel="lightbox run" href='/wordpress/wp-content/uploads/2007/06/mapmyrun.png' title='Running routes with MapMyRun'><img src='/wordpress/wp-content/uploads/2007/06/mapmyrun.thumbnail.png' alt='Running routes with MapMyRun' /></a></p>
<p><a href="http://www.mapmyrun.com/">MapMyRun</a> is like WalkJogRun in that you can search for user-created running routes and also add your own to the mix, and it also has a fairly decent interface that shows information in both kilometers and miles.  It has the nice feature that auto-saves your route, and restores it should you accidentally navigate away from the page. It also also gives calorie counts, and supports elevation data as well.  You can save this information to a training log, but this requires that you register with the site.</p>
<p>When creating routes, you can specify different types of waypoints, for example water breaks, aid stations and bathrooms.  Notes can be added to the waypoints, and the route can be printed out with these notes to keep them handy.  This is very nice for operation in the real-world.  You can export the route to a variety of sources, such as Google Earth, a Garmin Forerunner or Edge GPS device, or to your blog as some embedded Javascript.  This is also very handy, as information nowadays should work across a variety of devices.</p>
<p>However, the best feature is that this application can automatically create paths that follow roads.  This is good if your routes follow through a lot of curved roadways, as it&#8217;ll save you the headache of manually entering in the path.  However, sometimes it&#8217;ll automatically create a path from one point to another that doesn&#8217;t follow the road route you&#8217;d probably run - this is a limitation of the Google Maps system, as it is probably calculating how a car would drive from one point to another.  (For example, you can run either way down a one-way street, but cars obviously cannot)  Another nice feature is being able to remove a point in the middle of your route without having to re-enter all the subsequent points.</p>
<p>While this application is feature-filled, it also suffers from some sluggish performance like WalkJogRun.</p>
<h3><a href="http://www.run.com/">Run.com</a></h3>
<p class="image align-right"><a rel="lightbox run" href='/wordpress/wp-content/uploads/2007/06/run-com.png' title='Running routes with Run.com'><img src='/wordpress/wp-content/uploads/2007/06/run-com.thumbnail.png' alt='Running routes with Run.com' /></a></p>
<p>With <a href="http://www.run.com/">Run.com</a>&#8217;s application, you can also search for user-created running routes and add your own.  The application is fairly responsive, and doesn&#8217;t feel too sluggish because of the way they&#8217;ve implemented it - searching for routes shows them on one map, and when you click a route to bring it up, it loads a new page with the route map.  This reduces Ajax-activity that is often the cause of poor performance in web applications.</p>
<p>Routes show elevations, and distances in metric or imperial.  Different waypoints (water break, aid station, scenic view) can be specified, and users can enter descriptions as well as difficulty ratings for each route.  Tips entered by the person who created the route are often useful. (Eg. <q cite="http://www.run.com/showroute.asp?map=38334">BE CAREFUL - LOTS OF BIKES</q>) </p>
<p>Though I don&#8217;t have much to say about this application, I actually think I like it the best.  Even though it doesn&#8217;t provide all the data or features that WalkJogRun or MapMyRun might, it&#8217;s lightweight, fast and easy to use, all of which are important hallmarks of any application, especially web apps.</p>
<h3>One last thing</h3>
<p>You don&#8217;t need to use one of these tools to measure your running distance.  You could easily use <a href="http://earth.google.com/">Google Earth</a>&#8217;s measure tool to map out your running route, but it&#8217;s a bit tedious, and these online applications will greatly simplify the process.  Personally, I liked WalkJogRun and Run.com&#8217;s offerings the best, but you should give them all a try to see which fits your style best.</p>
<p>Lastly, these tools are probably best for road running, such as planning training for a marathon of some sort, or for the marathon itself.  If you do a lot of trail running, they won&#8217;t work that great, since most of that data isn&#8217;t available on Google Maps, the basis for all of these tools.  However, these tools do a good job of highlighting the features and flexibility of the <a href="http://www.google.com/apis/maps/">Google Maps API</a> by showing what can be accomplished.</p>
<hr/>Copyright &copy; 2008 <strong><a href="http://unitstep.net">unitstep.net</a></strong>. This Feed is for personal non-commercial use only. If you are not reading this material in your news aggregator, the site you are looking at is guilty of copyright infringement. Please contact <strong><a href="mailto:webmaster@unitstep.net">webmaster@unitstep.net</a></strong> for more information.<br/><span style="float: right;font-size: 7pt"><a href="http://blog.taragana.com/index.php/archive/wordpress-plugins-provided-by-taraganacom/">Plugin</a> by <a href="http://www.taragana.com/">Taragana</a></span>]]></content:encoded>
			<wfw:commentRss>http://unitstep.net/blog/2007/06/14/measuring-distances-for-your-running-route/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Google Street View and privacy</title>
		<link>http://unitstep.net/blog/2007/06/12/google-street-view-and-privacy/</link>
		<comments>http://unitstep.net/blog/2007/06/12/google-street-view-and-privacy/#comments</comments>
		<pubDate>Tue, 12 Jun 2007 21:13:29 +0000</pubDate>
		<dc:creator>Peter Chng</dc:creator>
		
		<category><![CDATA[google]]></category>

		<category><![CDATA[maps]]></category>

		<category><![CDATA[privacy]]></category>

		<guid isPermaLink="false">http://unitstep.net/blog/2007/06/12/google-street-view-and-privacy/</guid>
		<description><![CDATA[
Google Street View has been out for some time now, and its proven to be a pretty nifty feature.  Basically, Google has sent out teams of people in vans with cameras mounted on the tops to major cities across the US.  They&#8217;ve been able to capture 360-degree panoramic views of most of the [...]]]></description>
			<content:encoded><![CDATA[<p class="image align-right"><a href="/wordpress/wp-content/uploads/2007/06/google-street-view.jpg" title="Google Street View" rel="lightbox"><img src="/wordpress/wp-content/uploads/2007/06/google-street-view.thumbnail.jpg" alt="Google Street View" /></a></p>
<p><a href="http://maps.google.com/help/maps/streetview/">Google Street View</a> has been out for some time now, and its proven to be a pretty nifty feature.  Basically, Google has sent out teams of people in vans with cameras mounted on the tops to major cities across the US.  They&#8217;ve been able to capture 360-degree panoramic views of most of the streets in these cities, so you can view the surrounding area on almost any point in the street.  This is obviously a great feature for people who find that maps don&#8217;t provide the best experience of &#8220;getting to know a place&#8221;.  With Street View, you get the best experience of seeing what a new place will be like, short of actually visiting it.  It&#8217;ll be great for visitors.  Google hopes to <a href="http://maps.google.com/support/bin/answer.py?answer=68384&#038;topic=11640">extend to feature to more cities</a> as time goes on.  </p>
<p>However, the new feature has obviously raised some privacy concerns, but perhaps not in the strictest legal sense.  Since Google has taken these pictures from public areas, they&#8217;re probably in the clear.  However, they is somewhat of a difference when these public pictures are being integrated into the largest search engine for everyone to see.</p>
<h3>Precedent</h3>
<p>This isn&#8217;t <a href="http://www.readwriteweb.com/archives/google_street_view_maps.php">first service</a> that&#8217;s offered street views.  Microsoft has also offered <a href="http://preview.local.live.com/">their own limited service</a>, and as one blogger <a href="http://www.gearthblog.com/blog/archives/2006/03/street_level_dr.html">pointed out over a year ago</a>, it would be cool if Google did the same.  However, as pointed out in <a href="http://www.readwriteweb.com/archives/google_street_view_maps.php">this article</a>, Google Street Views are far more detailed and interactive.  In addition to being able to rotate the view a full 360 degrees, you can zoom in.  The level of quality in most pictures is quite good, so zooming actually produces good results, rather than just a larger blurry section of an image.  You can easily see way down the street by zooming.  </p>
<h3>Privacy</h3>
<p>However, this has also raised what some have called &#8220;privacy concerns&#8221; - not in the &#8220;NSA wiretapping&#8221; sense, but rather in the &#8220;it&#8217;s freaky&#8221; sense.  A <a href="http://mashable.com/2007/05/31/top-15-google-street-view-sightings">list was quickly formed</a> for the most intriguing Street View sightings, and people also found one of a <a href="http://maps.google.com/maps?f=q&#038;hl=en&#038;q=181+west+san+carlos+st.&#038;sll=37.0625,-95.677068&#038;sspn=48.688845,82.265625&#038;ie=UTF8&#038;ll=37.333433,-121.889663&#038;spn=0.012028,0.020084&#038;z=16&#038;om=1&#038;layer=c&#038;cbll=37.330351,-121.889659&#038;cbp=1,345.096039112741,0.631646838164524,3">guy digging for gold</a>.  In another more <a href="http://mashable.com/2007/06/10/google-street-view-2/">innocent list</a>, we can see Steve Jobs&#8217; Mercedes.  In many of these images, you can easily see the faces of those involved.  Now, while it&#8217;s true that you could have easily seen all of this yourself going for a stroll down the street, it&#8217;s somewhat different when a picture is taken and put onto one of the most popular search engine maps for all to see. </p>
<p>Google has provided <a href="http://www.seroundtable.com/archives/013780.html">some recourse</a>, though.  If there&#8217;s an offending image, you can <a href="http://maps.google.com/support/bin/answer.py?answer=68385&#038;topic=11640">submit a complaint</a> to have it removed.  Indeed, some of the more racier images have been removed; however, while they&#8217;re no longer on Google Maps, they&#8217;ve forever been immortalized on the various blogs and forums that have covered this topic. </p>
<h3>A big deal?</h3>
<p>Now, don&#8217;t get me wrong.  I don&#8217;t think this is a major breach of privacy, but if a government had done this, do you think people would respond differently?  I think it&#8217;s great that Google is trying to improve their search and map functions through this &#8220;information fusion&#8221;.  Once it expands to more cities, it&#8217;ll definitely help people like me who get lost easily.  Being able to see and identify with a place before going there will be a huge aid.  Who knows, once they roll out holographic monitors, I may not even have to save up for that trip around the world&#8230;</p>
<hr/>Copyright &copy; 2008 <strong><a href="http://unitstep.net">unitstep.net</a></strong>. This Feed is for personal non-commercial use only. If you are not reading this material in your news aggregator, the site you are looking at is guilty of copyright infringement. Please contact <strong><a href="mailto:webmaster@unitstep.net">webmaster@unitstep.net</a></strong> for more information.<br/><span style="float: right;font-size: 7pt"><a href="http://blog.taragana.com/index.php/archive/wordpress-plugins-provided-by-taraganacom/">Plugin</a> by <a href="http://www.taragana.com/">Taragana</a></span>]]></content:encoded>
			<wfw:commentRss>http://unitstep.net/blog/2007/06/12/google-street-view-and-privacy/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
