从Web浏览器获取GPS位置

时间:2010-04-05 07:13:15

标签: javascript mobile geolocation

我正在开发一个基于移动设备的网站,在那里我集成了谷歌地图,我需要动态填写谷歌地图的“发件人”字段。

是否可以从网络浏览器获取GPS位置并将其填充到Google地图的“发件人”字段中?

7 个答案:

答案 0 :(得分:186)

如果您使用Geolocation API,则只需使用以下代码即可。

navigator.geolocation.getCurrentPosition(function(location) {
  console.log(location.coords.latitude);
  console.log(location.coords.longitude);
  console.log(location.coords.accuracy);
});

您也可以使用Google's Client Location API

此问题已在Is it possible to detect a mobile browser's GPS location?Get position data from mobile browser中讨论过。你可以在那里找到更多信息。

答案 1 :(得分:45)

参见讨论How to get GPS coordinates in the browser

您可以找到适用于移动设备的示例应用Where Am I?的链接。我在我的Android上测试了它,它启动了GPS模块来获取当前坐标。您可以分析生活示例中的来源。

我已经制作了QR码,可以通过手机快速访问:

Where Am I QR code

答案 2 :(得分:21)

给出更具体的答案。 HTML5允许您获取地理坐标,并且它可以完成相当不错的工作。总体而言,浏览器对地理定位的支持非常好,除了ie7和ie8(以及opera mini)之外的所有主流浏览器。 IE9完成了这项工作,但表现最差。结帐caniuse.com:

http://caniuse.com/#search=geol

此外,您需要获得用户的批准才能访问其位置,因此请务必检查此位置,并在关闭时提供一些体面的说明。特别是对于Safari的Iphone转换权限有点麻烦。

答案 3 :(得分:12)

使用此功能,您将在http://www.w3schools.com/html/html5_geolocation.asp

找到所有信息
<script>
var x = document.getElementById("demo");
function getLocation() {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(showPosition);
    } else {
        x.innerHTML = "Geolocation is not supported by this browser.";
    }
}
function showPosition(position) {
    x.innerHTML = "Latitude: " + position.coords.latitude + 
    "<br>Longitude: " + position.coords.longitude; 
}
</script>

答案 4 :(得分:4)

GeoLocation API,但目前浏览器支持相当薄。大多数关心此类事物的网站都使用GeoIP数据库(通常有关此类系统不准确的附带条件)。您还可以查看需要用户合作的第三方服务,例如FireEagle

答案 5 :(得分:1)

让我们使用最新的fat arrow functions

navigator.geolocation.getCurrentPosition((loc) => {
  console.log('The location in lat lon format is: [', loc.coords.latitude, ',', loc.coords.longitude, ']');
})

答案 6 :(得分:1)

可观察

/*
  function geo_success(position) {
    do_something(position.coords.latitude, position.coords.longitude);
  }

  function geo_error() {
    alert("Sorry, no position available.");
  }

  var geo_options = {
    enableHighAccuracy: true,
    maximumAge        : 30000,
    timeout           : 27000
  };

  var wpid = navigator.geolocation.watchPosition(geo_success, geo_error, geo_options);
  */
  getLocation(): Observable<Position> {
    return Observable.create((observer) => {
      const watchID = navigator.geolocation.watchPosition((position: Position) => {
        observer.next(position);
      });
      return () => {
        navigator.geolocation.clearWatch(watchID);
      };
    });
  }

  ngOnDestroy() {
    this.sub.unsubscribe();
  }