Dash Express: Next Generation GPS Navigation

March 28, 2008

dash-2.jpgIf you’re a fan of GPS navigation systems, this is the most compelling reason to upgrade that I’ve yet seen; if you’ve been on the fence about whether to try one on, this just might push you over the edge.

Dash Express is a navigation system with built-in WiFi, better routing capabilities, traffic data, and a boatload of minor feature improvements, combined with an online control panel to expand your reach outside of the car.

The old way to navigate: at home, find the address of where you want to visit, write it down on a sticky pad, and head out to your car. Punch in that address and off you go. If they’re closed, you’re out of luck. Hit a bad patch of traffic, too bad.

Dash Express navigation: hop in your car, search Yahoo! Local for a destination, and get routed. Scan ahead for any traffic backups and reroute as needed. Change your mind as needed. Alert your friends (who are also Dash users) of where you’re heading to, or get updates in your unit of locations sent to you by your friends. Or rewind to the beginning. Find your destination address on your home PC, right-click it in your web browser, then select “Send 2 Car.” When you fire up Dash, the address will be waiting for you.

dash-1.gifDash is to standard GPS navigation systems what Google Maps was to MapQuest. One of things I always thought was “broken” in my nav system is the routing capabilities. To reroute, I’d have to pull up the turn by turn directions, and delete some of the waypoints, hoping I deleted the correct ones to force a reroute. Dash displays multiple routes and lets you choose from them. The UI has some significant improvements as well — at a glance it just looks more organized and intuitive.

Dash isn’t cheap at $399, but it sure is pretty! And maybe you can make up for some of that cost with one of Dash’s built-in features: find the cheapest gas prioces in town, and get routed there. Plus, if it ever gets stolen, you can remotely disable it so the thieves can’t enjoy your new toy.

Find it at Amazon

Swirl Connect: location-based mobile social software

January 28, 2008

We have quietly released Swirl Connect, software for your mobile phone that helps you stay connected with your friends and their latest activity, as well find new people and places, whether you’re mobile or at home on your PC.

The current release is slightly hobbled, as $$$$ is tight, and we had to turn off the messaging features, but there’s still plenty to do and see. Here are a few features:

  • Find your friends and get alerted to their latest activity
  • Explore nearby places of interest
  • View and share photos, notes, and places on your PC or mobile phone
  • Mobile instant message or group message with your friends
  • Meet new people while you’re on the move
  • Get location-based alerts
  • Interact with both PC and mobile users in real time

Try it out! It’s free, supports popular Nokia, Sony-Ericsson, and Motorola phones (with plenty more coming), and is a lot of fun.

swirl-shot-11.png swirl-shot-21.png

Free Geocoders / Geocoding Posts

December 28, 2007

Several weeks ago I was making changes to an as-yet-unreleased wiki, and to protect it from prying eyes I locked it up from all IP addresses except my own. My IP address was just updated, and looky looky, I can no longer access the wiki, which brought that permission change to the forefront.

Problem is, I posted several articles on some free geocoders I wrote. Just simple tools that you can use to geocode addresses via Google’s Map API or the Geocoder.us service. Those tools are only available on the wiki, so I’m afraid that everyone was met with a ‘403 access denied’ error when attempting to access them.

Everything is open again; please accept my sincerest apologies. There’s nothing I hate more than wasting my time, so I hope I didn’t waste too much of yours.

Geocoding based on an IP Address

November 13, 2007

Okay, so I’m on a bit of a geocoding kick here. Previous posts have discussed geocoding when you have a physical street address. But obtaining an address can be obtrusive, and the dataset used is North America-centric. This post focuses on very quickly geocoding a user’s location based on their originating IP address with MaxMind’s GeoLite City database and Java API.

There are a number of reasons why you might want to determine a user’s location based on their IP address:

  • Center a map mashup on the user’s location
  • Serve localized content, e.g. language, currency, time
  • Reduce credit card fraud (this seems to be the most commercial use at present)
  • Target marketing and ads

The biggest problem with geocoding by IP address is that it can be inaccurate for many IP addresses. This is because the coordinates for a given IP address are for the organization that owns the IP address block, and not necessarily the location of the end user of that IP address. Complicating this further are those users who connect via a proxy — e.g. AOL users. So private IP’s, VPN’s, proxied browsers, internal network blocks, and so on are difficult to geocode.

Using the GeoLite City Database on Your Server

You have two download options: CSV and binary. If your project requires that you import data into MySQL, you can use the CSV option, but it is much slower and requires more effort to setup. Binary is your best bet, and is what I used.

I installed the GeoLite City binary on both a Windows development PC and a Linux server. On Windows, download to your PC, and extract using WinZip or similar tool. On Linux:

$ wget http://www.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
$ gunzip GeoLiteCity.dat.gz
$ mv GeoLiteCity.dat /path/to/database/location/GeoLiteCity.dat

Import the Java API into your current project in your IDE of choice. I’m using JBuilder (boo, hiss). There are also API’s for C, Perl, PHP, C#, Ruby, Python, VB.NET, Pascal, and JavaScript.

Using the Database (IP Address to Latitude and Longitude)

1) In your class file, create a LookupService object, specifying the location of the database you extracted. Then create a Location object for the IP address you want to geocode:

LookupService lookup = null;
try {
lookup = new LookupService(PATH_TO_DATA, LookupService.GEOIP_MEMORY_CACHE);
} catch (IOException e) {
System.out.println(ex.getMessage());
ex.printStackTrace(System.err);
}

Location location = lookup.getLocation(”62.75.185.174″);

2) Then you can extract location information from the Location object, including country, region, city, postal code, latitude, longitude, area code, and timezone.

String city = location.city;
float latitude = location.latitude;
float longitude = location.longitude;

If you create two Location objects from LookupService, you can calculate distance between them with:

double distance = location1.distance(location2);

3) Remember to close the database connection. Data access is thread safe, by the way.

lookup.close();

Note that to use GeoLite City on a public web site, you must include the line “This product includes GeoLite data created by MaxMind, available from http://www.maxmind.com/” in any documentation or promotional materials.

[Read more]

Geocoding with the Google Geocoder

November 5, 2007

Before using the Google Geocoder, you must have a Google Maps API key. It will not work without one. If you don’t yet have one, get yours via the Google Maps API page. Also, to get this out of the way, Google has provided a fantastic service free of charge for non-commercial purposes. Please respect their terms of service.

Download the free Google Geocoder

The Google Geocoder is very similar to the Quick ‘n Dirty Geocoder. It is free software, and can be used and distributed however you like. It installs in a servlet container, and accesses the Google Maps web service to translate the names and addresses you supply (in a text file) into geographic coordinates, which it then writes back to your PC and/or a database.

For details on how to install and use this software, frequently asked questions, configuration, etc., refer to the wiki article. The short version is just drop goog.war into Tomcat’s webapps directory, start it, then follow the instructions at http://localhost:8080/goog/code. This post describes some of the Java code used to implement the communication between the Google geocoder and the Google Maps web service.

[Read more]

Geocoding with the Quick ‘n Dirty Geocoder

November 1, 2007

The geocoder described in this post is free software, and can be used and distributed however you like.qd-geocoder1.gif

It installs in a servlet container like Tomcat, and accesses the geocoder.us web service to translate the names and addresses you supply (in a text file) into geographic coordinates, which it then writes back to your PC and/or a database.

Download the free geocoder

For details on how to install and use this software, frequently asked questions, configuration, etc., refer to the wiki article. The short version is just drop geo.war into Tomcat’s webapps directory, start it, then follow the instructions at http://localhost:8080/geo/code. This post describes some of the Java code used to implement the communication between the Q&D geocoder and the geocoder.us web service.

Most lines of code in this application are used in IO on your own PC, rather than the web service. The GeoServlet receives requests, and uses the GeoImporter to read in and parse files from the text file on your PC. It then uses the GeoTransport class to communicate with the geocoder.us service, and finally writes the results back to a file and/or database with the GeoExporter class.

[Read more]

Geocoding with Geocoder.us and Google Maps

October 30, 2007

Geocoding is the process of assigning geographic identifiers to map features — a specific example is assigning a latitude and longitude to a given street address. A common technique uses address interpolation. Using this method, if we know a street address and the endpoints of that street, we can interpolate the approximate location of the specific address.

The address information comes from the TIGER/Line files, which are extracts of selected geographic and cartographic information from the US Census Bureau’s TIGER (Topologically Integrated Geographic Encoding and Referencing) database.

So the task of a geocoder is to parse an address for street numbers, names, cities, states, and zip codes, and then interpolate the coordinates of that address by finding its endpoints in the dataset. I recently used two geocoders, Google Maps and Geocoder.us, and thought I’d share the results of my work along with free software that you can use to geocode your own addresses.

[Read more]