在 HMS 设备上使用 Geocoder 对 lat/long 坐标进行反向地理编码

Reverse Geocode a lat/long coordinate using Geocoder on a HMS device

我正在尝试使用 HMS(华为移动服务)设备上的 android.location.Geocoder 对 lat/long 坐标进行地理编码,但结果我一直得到一个空列表。

val result = geoCoder.getFromLocation(latitude, longitude, MAX_RESULTS) // [] on HMS

为了验证这实际上 应该 工作,我检查了 Geocoder.isPresent() returns true.

查看 LogCat 输出我可以看到以下几行,这表明我缺少一些 API 键或没有正确配置某些东西...

XX/? I/HwGeoCoderProvider: [I/HwLocation/HwGeoCoderProvider 1877:388 HwGeoCoderProvider.java:136] onGetFromLocation: start to GetFromLocation 
XX/? D/HwGeoCoderProvider: [D/HwLocation/HwGeoCoderProvider 1877:388 HwGeoCoderProvider.java:434] exceed max requesting limit
XX/? D/HwGeoCoderProvider: [D/HwLocation/HwGeoCoderProvider 1877:388 HwGeoCoderProvider.java:162] exceed max requesting limit
XX/? I/HwGeoCoderProvider: [I/HwLocation/HwGeoCoderProvider 1877:388 HwGeoCoderProvider.java:455] {callTime=..., service=hwLocation, rom_type=1001, transId={{some uuid}}, package=com.android.phone, apiName=GeoCode_getFromLocation, costTime=1, result=10400}

我在 P40 Pro 上试过,它安装了最新的 HMS Core 版本(5.0.0.304)。我之前收到过一些结果,所以它肯定 确实 有效,但后来它显然达到了这个限制并停止工作。

如何在 HMS 设备上使用 android.location.Geocoder 对 lat/long 进行地理编码? 需要什么样的配置/设置才能避免达到此限制?

我已经看到提到使用 location/site 工具包的解决方法,但如果可能的话,我更愿意使用“香草”Android API。

你的问题是在HMS设备上使用原生AndroidAPIgetFromLocation时,系统提示API调用次数exceed max requesting limit .

可能是您在网络不好的情况下频繁发起请求。为了保证资源的正确使用,系统对资源的使用进行了限制。建议您重启HMS Core(APK)或设备,在网络状况良好的情况下发起请求,并保证短时间内发起的请求不超过10个。

感谢您的反馈。此问题将在 Location Kit 5.0.2 中修复,该版本将于 2020 年 9 月 15 日发布。

更新:

Location Kit 5.0.2.301 新版本here, modified the description of the setMaxWaitTime method in the LocationRequestclass,防止因设置错误导致首次定位回调慢