在Java中获取用户当前的纬度和经度

5

我在这里经常看到有人问有关Java的问题,但每一个问题都似乎是围绕Android中心的: 我需要一种方法,在用户从计算机而不是移动设备打来电话时获取用户的当前纬度和经度。 我知道在C#中可以做到这一点,但我不确定如何在Java中实现。 我以前使用过Google Maps的RESTful API:然而,它需要一个地址作为输入,而我只想获取用户的当前纬度/经度,我觉得这比调用Google更简单。 任何帮助将不胜感激。

2个回答

5

目前Java没有提供通用的跨平台API来获取位置信息。但是,可能有一些特定于平台的方法。

在桌面机器上,大多数实现通过IP地址进行地理定位;您可以使用这些服务从Java中获取位置信息(Best way to get geo-location in Java)。然而,如果操作系统提供了更通用的API,则可以利用任何GPS硬件。

对于Mac OS,可以参考https://superuser.com/questions/346302/is-there-a-way-to-access-os-x-location-services-from-the-command-line

这里有一个由Gnome提供的库的详细信息,还有一个关于KDE支持计划的介绍


谢谢,这似乎是我正在寻找的。我会看一下Skyhook,它似乎是一个不错的选择。 - Graham Carling

4
一般计算机无法做到这一点的原因在于:一般情况下,当你想到计算机时,它们就已经很明显了:
  • 一般计算机没有内置的GPS设备。因此,计算机无法基于此告诉你位置在哪里。

  • 另一种方法是尝试将IP地址映射到物理位置。这不可靠,因为IP地址与物理位置并没有根本上的联系。通过IP地址进行地理定位只能在用户的网络服务提供商能够(并愿意)向第三方提供位置信息的情况下生效。在实践中,这些信息非常“零散”。另一个问题是,你需要依赖外部的“地理定位服务”来获取信息。它不是标准Java平台的一部分。

  • 还有另一种方法是基于WiFi热点的地理定位1。此链接详细介绍了此方法:http://gps.about.com/od/glossary/g/wifi_position.htm。但这取决于用户的WiFi提供商是否注册其纬度/经度以及用户是否打开了WiFi。


1- 我记得我的一个同事在iPhone开发中提到,当WiFi打开时,iPhone(带有GPS)的地理定位更准确。


我在寻找代码时遇到了麻烦,但我几乎可以确定一年前我用asp.net和C#编写了一个网页,它可以打开并告诉您当前的纬度/经度。我特别注意到,一旦连接到WiFi,我能够更准确地知道我的位置 - 我肯定是从计算机获取我的位置,一旦WiFi打开,就能精确定位。您有任何想法这可能是如何完成的吗? - Graham Carling
除了Stephen C的描述之外,我想补充一点:谷歌设备拍摄位置时,会将附近Wi-Fi设备的MAC地址(物理地址)添加到其数据库中以识别位置。但实际上,最好的识别用户位置的方法是GPS。通过其他方式,您只能获取国家、企业位置(如果这是公共信息)。 - Musa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接