我使用Google Location API每5秒获取一次用户的位置,并且工作正常。那我必须知道那个位置的地址。我知道我可以使用Geocoder.getFromLocation
,但正如documents所说,它并不总是可用,而且需要互联网才能运作。还有另一种让地址脱机的可靠方法吗?
答案 0 :(得分:1)
这实际上是不可能的,因为你需要有很多关于哪个地址与(大约)哪个纬度/经度值相关的信息。
但是,一种解决方案是在您的应用程序中包含此类数据库。很久以前,MaxMind似乎是开源的。然而,你可以到达的最好的城市,可能不是你想要的。
因此,除非您能够找到包含此类信息的数据库,否则无法在没有互联网连接的情况下进行此操作。
答案 1 :(得分:1)
还有另一种让地址脱机的可靠方法吗?
所以对于Geocoder来说,如果没有后端服务,你就无法在这种情况下使用它。
如果您想要离线访问地图,则必须将它们存储在您的设备中才能阅读它们。因此,您只有一个选择并下载地图数据,尝试处理它们(优化移动设备的大小),您必须创建一些结构,您将存储数据以进行快速搜索(很可能是四叉树或R树) <强> 1 强> 。这根本不是微不足道的。或者(假设存在)使用一些离线地图,但数据也必须存储在您的设备中。
1 我一直致力于一些专注于离线地址搜索的个人项目。我正在使用OpenStreetMaps作为数据源。但我可以告诉你,这并不容易。由于原始数据存储在一个巨大的XML文件(1-600 GB)中,我不得不为桌面创建一个convesion工具来处理数据并将它们保存在序列化为数据库的四叉树中(树是巨大的,不能添加到内存中所以我需要缓存它并使用半持久性)。换句话说,工具为设备中的使用准备数据。最终文件大约有100 MB - 1 GB(取决于源大小)。我可以告诉你更多,但这不是正确的地方。
我做了一些速度性能测试,仅针对“插图”我将性能与官方Geocoder API进行了比较:
但是工具没有完成,但正如你在上面看到的那样工作。我认为性能不错,但我认为可以优化(优化语句和树算法)。