3

I am searching for a method to locate the user location while visiting my website, i have tried Maxmind but they seems to be inaccurate in the city level. the information i want is (Country, City, longitude, latitude) i want the country and the city to be very accurate if possible.

I have also used HTML5 but the problem that it asks my user to share location information which seems to me bad solution. (althougth i got very accurate results)

Any solutions?

Notice: i found google search got an accurate detection and without "ask for sharing my location", but i didn't find any api to use google service

Himanshu
  • 31,810
  • 31
  • 111
  • 133
admirer
  • 37
  • 1
  • 1
  • 2

3 Answers3

3

This is a code i found for a tutorial for Geo Location using Google maps.. Hope this is useful.

This works on the way you connect to the network.

  • if you use a Boradband ISP what gives you an fixed ip your location will be more accurate.
  • if you use mobile device to connect to internet, the Location of the nearest Mobile tower from which your network gets the signal will be shown

Example for HTML5 Geolocation

<!DOCTYPE html>
<html>
<head>
<title>GeoLocation Demo</title>
<meta charset="utf-8"/>
<script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script>
<script>
  var startPos;
  var map;

  function init() {
      if (navigator.geolocation) {
          document.getElementById("support").innerHTML = "<p style='color:green'>Great! This browser supports HTML5 Geolocation</p>";
          navigator.geolocation.getCurrentPosition(updateLocation, handleLocationError, {
              timeout: 50000
          });
          //navigator.geolocation.watchPosition(updateCurrPosition,handleLocationError);

      } else {
          document.getElementById("support").innerHTML = "<p style='color:red'>Oops! This browser does not support HTML5 Geolocation</p>";
      }
  }

  function updateLocation(position) {
      startPos = position;
      var latitude = position.coords.latitude;
      var longitude = position.coords.longitude;

      //document.getElementById("startLat").innerHTML = latitude;
      //document.getElementById("startLon").innerHTML = longitude;

      var coords = new google.maps.LatLng(latitude, longitude);

      var mapOptions = {
          zoom: 10,
          center: coords,
          mapTypeControl: false,
          navigationControlOptions: {
              style: google.maps.NavigationControlStyle.SMALL
          },
          mapTypeId: google.maps.MapTypeId.ROADMAP
      };

      map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);

      var marker = new google.maps.Marker({
          position: coords,
          map: map,
          title: "Your current location!"
      });

  }

  function handleLocationError(error) {
      switch (error.code) {
          case 0:
              updateStatus("There was an error while retrieving your location: " + error.message);
              break;

          case 1:
              updateStatus("The user prevented this page from retrieving the location.");
              break;

          case 2:
              updateStatus("The browser was unable to determine your location: " + error.message);

              break;

          case 3:

              updateStatus("The browser timed out before retrieving the location.");

              break;
      }
  }

  function updateStatus(msg) {
      document.getElementById("divStatus").innerHTML = msg;
  }
</script>
</head>

<body onload="init()">  
<div id="support"></div>
<div id="divStatus"></div>
<div id="map_canvas" style="width:600px;height:400px;"></div>
</body>
</html>
Peyman Mohamadpour
  • 17,954
  • 24
  • 89
  • 100
Naveen Babu
  • 1,584
  • 1
  • 14
  • 35
  • as i see your code is using HTML5, thus it will popup "Share location" request to my user before advancing .. This is problematic for me .. and i know that HTML5 force that popup .. but at the same time i see google doing it in the search without any popup .. any idea ? – admirer Nov 02 '12 at 06:43
  • 1
    I have read Browsers have setting to disable share location by default as it is a against privacy of the user and can get any software developer into serious trouble if we dont have prior authorization from the user to access the location – Naveen Babu Nov 02 '12 at 07:46
  • so i think your code won't work .. my problem is how google getting it accurate without that ? i think there is another solution – admirer Nov 02 '12 at 14:18
  • I believe this is a pretty accurate answer to your question. I've done something similar to this. You can see an actual example here http://www.saffie.ca/geo.html Feel free to examine the source to see what the code looks like – lsaffie Feb 18 '14 at 00:57
1
  1. www.ipfingerprints.com
  2. www.geoiptool.com/
  3. http://www.geobytes.com/TraceRouteLocator.htm
  4. http://whatismyipaddress.com/traceroute-tool
  5. http://www.dnsqueries.com/en/ip_geographical_informations.php

I hope these links might help you. First two links have a database of geolocation information with respect to IP addresses. Whereas the links 3,4, & 5 work on traceroute command. Let me know if these work for you .

Anish
  • 167
  • 5
  • 21
0

The IP addresses may be changed depends on ISP and I think that is the reason why the geolocation database is not always accurate. You can compare the accuracy among these geolocation sites other than maxmind. www.geobytes.com, www.hostip.info, www.ip2location.com

HexaHow
  • 121
  • 1
  • 3