views:

1607

answers:

2

Am trying to use google.loader.ClientLocation along with the maps api to get the location of the visitor and center a map on it. The following is working fine for me (on Safari, Firefox and Chrome), but a friend I got to test it (in Safari and Firefox) just sees a white box with the Google logo.

 <script type="text/javascript" src="http://www.google.com/jsapi?key=ABQIAAAAeeU0y7tMNMOQPIMM7JX_kBTi_4TQeACPrDzoKWJhUsxMCp6ZkhTVx1nhgtAcF5rF3q1HjgTQs39tgg"&gt;&lt;/script&gt;

  <script type="text/javascript">
   google.load("maps", "2");
  </script>

  <script type="text/javascript"> 

      function initialize() {
        if (GBrowserIsCompatible()) {
          var map = new GMap2(document.getElementById("local_map"));
    map.setMapType(G_PHYSICAL_MAP);
    map.setCenter(new GLatLng(google.loader.ClientLocation.latitude, google.loader.ClientLocation.longitude), 15);
          // map.setCenter(new GLatLng(54.5975, -5.920278), 15);
          map.setUIToDefault();

        } 

      </script>

Any ideas what could be going wrong? The site is at http://www.chris-armstrong.com/ticktalk (the map is near the bottom)

+4  A: 

Google ClientLocation uses IP address geolocation. There are several IP address geolocation providers out there (the related questions in the sidebar on the right will give you several of those) and they give different results to different users. Google ClientLocation won't be able to locate everyone and it won't always give answers that are as precise or as accurate as some competitors.

On my test page, for example, I use Google ClientLocation and IPInfoDB and Google ClientLocation doesn't find me at home right now, while IPInfoDB thinks I'm in Sunnyvale instead of Berkeley. You may find that one provider is better than the others (particularly if you pay for its database), but I suspect that the most robust method, if you really need it, is to use several and hope that at least one will have a result. You should know up front that IP geolocation will not always work for all users (those behind an anonymizing proxy, for example, will never be located this way).

Also, if you want a more precise location, you can use a Javascript API to ask the browser for the user's exact location. On supported browsers the user will receive a small pop-up asking for their permission and, if given, the browser will then use GPS (Mobile Safari on the iPhone, for example) or WiFi triangulation (Firefox 3.5+) to determine latitude and longitude. You can see how this works on my test page, and compare it with IP geolocation. Not all browsers support the W3C Geolocation API, but a growing number do.

npdoty
Thanks, so basically it's not an exact science. Is the IP address the only way of getting a location without GPS functionality?
Chris Armstrong
@Chris, exactly, it's not exact. You can use the Javascript W3C Geolocation API to get a more precise location from the browser (which might use GPS or WiFi triangulation or some other method, depending on the browser and computer). I've added some links to my answer to provide more context.
npdoty
A: 

@npdoty It worked well. I am unaware that Browsers have Geolocation API as per W3C. Thanks for pointing though.

Vive