我在这里经常看到有人问有关Java的问题,但每一个问题都似乎是围绕Android中心的: 我需要一种方法,在用户从计算机而不是移动设备打来电话时获取用户的当前纬度和经度。 我知道在C#中可以做到这一点,但我不确定如何在Java中实现。 我以前使用过Google Maps的RESTful API:然而,它需要一个地址作为输入,而我只想获取用户的当前纬度/经度,我觉得这比调用Google更简单。 任何帮助将不胜感激。
我在这里经常看到有人问有关Java的问题,但每一个问题都似乎是围绕Android中心的: 我需要一种方法,在用户从计算机而不是移动设备打来电话时获取用户的当前纬度和经度。 我知道在C#中可以做到这一点,但我不确定如何在Java中实现。 我以前使用过Google Maps的RESTful API:然而,它需要一个地址作为输入,而我只想获取用户的当前纬度/经度,我觉得这比调用Google更简单。 任何帮助将不胜感激。
目前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支持计划的介绍。
一般计算机没有内置的GPS设备。因此,计算机无法基于此告诉你位置在哪里。
另一种方法是尝试将IP地址映射到物理位置。这不可靠,因为IP地址与物理位置并没有根本上的联系。通过IP地址进行地理定位只能在用户的网络服务提供商能够(并愿意)向第三方提供位置信息的情况下生效。在实践中,这些信息非常“零散”。另一个问题是,你需要依赖外部的“地理定位服务”来获取信息。它不是标准Java平台的一部分。
还有另一种方法是基于WiFi热点的地理定位1。此链接详细介绍了此方法:http://gps.about.com/od/glossary/g/wifi_position.htm。但这取决于用户的WiFi提供商是否注册其纬度/经度以及用户是否打开了WiFi。
1- 我记得我的一个同事在iPhone开发中提到,当WiFi打开时,iPhone(带有GPS)的地理定位更准确。