0

我使用Google Location API每 5 秒获取一次用户的位置,它工作正常。那么我必须知道那个位置的地址。我知道我可以使用Geocoder.getFromLocation,但正如文件所说,它并不总是可用,它需要一个互联网网络才能工作。还有另一种可靠的方法可以使地址脱机吗?

4

2 回答 2

1

这实际上是不可能的,因为您需要大量关于哪个地址与(大约)哪个纬度/经度值相关联的信息。

但是,一种解决方案是在您的应用程序中包含这样的数据库。好像MaxMind很久以前就开源了他们的。然而,你能到达的最好的地方是城市,这可能不是你想要的。

因此,除非您能够找到包含此类信息的数据库,否则没有互联网连接是不可能的。

于 2013-11-08T09:01:20.993 回答
1

还有另一种可靠的方法可以使地址脱机吗?

因此,可以肯定的是,使用 Geocoder 在这种情况下,如果没有后端服务,您将无法使其正常工作。

如果您想离线访问地图,则必须将它们存储在您的设备中才能阅读它们。所以你只有一个选择,下载地图数据,尝试处理它们(优化移动设备的大小),你必须创建一些结构来存储数据以进行快速搜索(最有可能是四叉树或 R 树)1。这根本不是微不足道的。或者(假设存在)使用一些离线地图,但数据也必须存储在您的设备中。

1 我一直在从事一些专注于离线地址搜索的个人项目。我使用 OpenStreetMaps 作为数据源。但我可以告诉你,这并不容易。由于原始数据存储在一个巨大的 XML 文件(1-600 GB)中,我不得不为桌面创建转换工具来处理数据并将它们保存在序列化到数据库中的四叉树中(树很大,不能添加到内存中,所以我需要缓存它并使用半持久性)。换句话说,工具为设备中的使用准备数据。最终文件大约有 100 MB - 1 GB(取决于源大小)。我可以告诉你更多,但这不是正确的地方。

我已经做了一些速度性能测试,仅用于“插图”,我将性能与官方 Geocoder API 进行了比较:

在此处输入图像描述

但是工具尚未完成,但正如您在上面看到的那样工作。我认为性能还不错,但我认为可以优化(优化语句和树算法)。

于 2013-11-08T09:18:28.553 回答