从网络浏览器获取GPS位置


164

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

是否可以通过网络浏览器获取GPS位置并将其动态填写到Google Map的“发件人”字段中?


2
您打算支持哪些手机?
罗兰·肖

我想支持所有的移动浏览器,但是优先考虑使用
iphone

您最好编写一个本机应用程序,因为它可以与可用的硬件进行更紧密的集成
Rowland Shaw 2010年

16
如果只需要位置,那么本机应用程序就显得过大了。iOS不是唯一的移动设备,它只是一个优先事项。
贡萨洛·韦加

Answers:


194

如果您使用Geolocation API,它将与使用以下代码一样简单。

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

您也许还可以使用Google的“客户端位置API”

是否可以检测到移动浏览器的GPS位置中讨论了此问题从移动浏览器获取位置数据。您可以在此处找到更多信息。


是否仍然提及Google客户定位API?提供的链接指向Google Loader
Shane N

1
我在该页面上没有将其视为可用的API之一。-您可以使用到谷歌纵横API:code.google.com/apis/latitude -有了这个就可以获取客户端的当前位置:code.google.com/apis/latitude/v1/...
dochoffiday

1
对于将来的读者,精度以米为单位
johnnyRose

Hyy我们能否通过编码自动启用共享位置
Tomar先生,2016年

2
这是否要求使用您的位置?
杰克

21

给出更具体的答案。HTML5允许您获取地理坐标,并且做得相当不错。总体来说,浏览器对地理位置的支持非常好,除ie7和ie8(以及Opera mini)之外,所有主流浏览器都支持。IE9可以胜任,但表现最差。结帐caniuse.com:

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

此外,您还需要获得用户的批准才能访问他们的位置,因此请确保对此进行了检查并提供了一些体面的指示,以防其被关闭。特别是对于Iphone,打开Safari的权限有点麻烦。


dotnetcurry.com/aspnet-mvc/782/…是在asp.net mvc环境中实现的便捷参考
Walter de Jong

13

使用它,您将在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>

1
请注意:getCurrentPosition()和watchPosition()不再适用于不安全的来源。要使用此功能,应考虑将应用程序切换到安全来源,例如HTTPS。
user2589273

4

GeoLocation API,但是目前对浏览器的支持还很薄。大多数关心此类事情的站点都使用GeoIP数据库(关于此类系统不准确的常见条件)。您还可以查看需要用户合作的第三方服务,例如FireEagle


1
非常感谢您的快速回复。如果可能的话,您能给我更多的提示吗?
Ganesh 2010年

2

可观察的

/*
  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();
  }

1

让我们使用最新的胖箭头功能

navigator.geolocation.getCurrentPosition((loc) => {
  console.log('The location in lat lon format is: [', loc.coords.latitude, ',', loc.coords.longitude, ']');
})
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.