Web浏览器中的位置检测

时间:2012-11-02 06:03:23

标签: html5 geolocation geoip ip-geolocation

我正在寻找一种方法来访问我的网站时找到用户位置,我尝试过Maxmind,但他们似乎在城市级别不准确。 我想要的信息是(国家,城市,经度,纬度)我希望国家和城市尽可能准确。

我还使用过HTML5,但问题是它要求我的用户共享位置信息,这对我来说似乎是不好的解决方案。 (虽然我得到了非常准确的结果)

任何解决方案?

注意:我发现谷歌搜索得到了准确的检测并没有“要求共享我的位置”,但我没有找到任何使用谷歌服务的API

3 个答案:

答案 0 :(得分:3)

这是我使用Google地图找到Geo Location教程的代码。希望这很有用。

这适用于您连接网络的方式。

  • 如果您使用Boradband ISP,那么为您提供固定IP的位置 会更准确。
  • 如果您使用移动设备连接到互联网,将显示您的网络获取信号的最近的移动塔的位置

HTML5地理位置示例

<!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>

答案 1 :(得分: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
  6. 我希望这些链接对您有所帮助。 前两个链接具有关于IP地址的地理定位信息的数据库。 而链接3,4,&amp; 5处理traceroute命令。 如果这些对您有用,请告诉我。

答案 2 :(得分:0)

可能会更改IP地址取决于ISP,我认为这就是为什么地理位置数据库并不总是准确的原因。您可以比较maxmind以外的这些地理定位站点之间的准确性。 www.geobytes.comwww.hostip.infowww.ip2location.com