Android Geocoder 和 Google Geocoding Web 服务之间的不同结果

Posted

技术标签:

【中文标题】Android Geocoder 和 Google Geocoding Web 服务之间的不同结果【英文标题】:Different results between Android Geocoder and Google Geocoding web service 【发布时间】:2014-07-23 23:04:47 【问题描述】:

我正在创建一个 android 应用程序,我需要使用地理位置。

我已经开始使用来自 Android (android.location.geocoder) 的 Geocoder API,但它会导致一些问题(等待服务器响应超时),这似乎根据我所读到的内容是常见的。

为了让我的应用程序在发生此类错误时正常工作,我使用了地理编码网络服务

现在,该应用程序每次都能正常工作。问题是API的geocoder和web service的geocoder返回的结果不一样。

例如,Web 服务仅返回 3 个地址,其中仅包含城市名称和国家/地区,而来自 API 的地理编码返回大约 8 个地址,其中包含要素名称、通道、地区......

问题是:有没有办法让 Web 服务的结果与 API 的结果完全相同?

编辑

这是我的 MainGeocoder 类:

public class MainGeocoder 

    private Geocoder geocoderAPI;
    private GeocoderRest geocoderRest;

    public MainGeocoder(Context context) 
        geocoderAPI = new Geocoder(context);
        geocoderRest = new GeocoderRest(context);
    

    public List<Address> getFromLocationName(String search, int maxResults) 
        List<Address> addresses;
        try 
            addresses = geocoderAPI.getFromLocationName(search, maxResults);
            return addresses;
         catch (IOException e) 
            e.printStackTrace();
            try 
                addresses = geocoderRest.getFromLocationName(search, maxResults);
                return addresses;
             catch (IOException e1) 
                return null;
             catch (LimitExceededException e1) 
                return null;
            
        
    

它基本上尝试从 API Geocoder 获取地址列表。如果抛出 IO 异常,它会使用从此处粘贴的 GeocoderRest 类从 Web 服务获取此列表:https://***.com/a/15117087/3571822

【问题讨论】:

你能发布你的代码来调用地理编码器和网络服务吗?我也使用了类似的技术,但是从地理编码网络服务返回的 json 很大 我在编辑中添加了代码。 【参考方案1】:

有没有办法让网络服务的结果完全符合 与 API 中的相同?

根本没有。在大多数尝试中,这两个地理编码器之间总会存在差异。因为android.location.Geocoder 在内部使用了一个服务,你无法在源代码中找到它,所以你现在永远不会知道具体的区别在哪里,而是询问谷歌。而且我认为他们不会泄露这些信息。

顺便说一句,您使用的 GeocoderRest 类甚至不会解析响应中包含的一半信息。通常 Web 服务比 SDK 中的 API 更可靠。

【讨论】:

它不会解析所有信息,但在某些情况下我需要的信息不可用(例如通道)......似乎对于法国来说,API 提供的信息比网络服务更多.感谢您的帮助

以上是关于Android Geocoder 和 Google Geocoding Web 服务之间的不同结果的主要内容,如果未能解决你的问题,请参考以下文章

geocoder.getFromLocationName 仅返回 null

在 typescript/javascript 的 google.maps.Geocoder().geocode() 上使用全局变量

使用 google.maps.geocoder 检索位置的纬度/经度

Google map v3 Geocoder 向后兼容性 [重复]

Google Maps V3 Geolocation Rails 3 gem 'geocoder' 地址不正确

Google Maps API v3:使用 IP 地址多个 LatLng 的 Geocoder.geocode