Geocoder.getFromLocationName不适用于交叉点地址

时间:2015-09-30 05:29:20

标签: google-geocoder

我正在尝试在我的应用程序中使用Geocoder类,并发现如果地址是两条街道的交集,Geocoder.getFromLocationName将返回null。防爆。 " Quail Ave和Dunford Way,Sunnyvale,CA 94087" 。但是,该方法适用于任何其他类型的地址。 在调试会话期间,我可以看到地址参数已传递并正确反映,但是" geocodeMatches"返回大小(0)为零。 感谢任何帮助!

public static List<Address> getGeoCode(@NonNull Context context, @NonNull String address){
    try {
        geocodeMatches = new Geocoder(context).getFromLocationName(address, 1);

        if (!geocodeMatches.isEmpty())
        {
            return geocodeMatches;
        }

    } catch (IOException e) {
        Log.e("ERROR", "Error to retrieve geocode" + e);
        e.printStackTrace();
    }
    return geocodeMatches;
}

1 个答案:

答案 0 :(得分:1)

GeoCoder正在开发NetworkLocationService。在某些情况下,由于某种原因,NetworkLocationService停止工作。我不知道确切的原因。但是在这种情况下你可以从google api获得地址。 希望下面的代码可以帮到你!

public static String GetLocationAddressFromLatLong(Context context, double latitude, double longitude) {
    String finalAddress = "";
    Geocoder geocoder;
    List<Address> addresses = null;
    geocoder = new Geocoder(context.getApplicationContext(), Locale.getDefault());
    try {
        addresses = geocoder.getFromLocation(latitude, longitude, 1);
    } catch (IOException e) {
        e.printStackTrace();
    }
    if (addresses != null && addresses.size() > 0) {
        finalAddress = addresses.get(0).getAddressLine(0) + ", " + addresses.get(0).getAddressLine(1);
    } else {
        //Get address from Google api
        try {
            JSONObject jsonObj = getJSONfromURL("http://maps.googleapis.com/maps/api/geocode/json?latlng=" + latitude + ","
                    + longitude + "&sensor=true");
            String Status = jsonObj.getString("status");
            if (Status.equalsIgnoreCase("OK")) {
                JSONArray Results = jsonObj.getJSONArray("results");
                JSONObject location = Results.getJSONObject(0);
                finalAddress = location.getString("formatted_address");
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return finalAddress;
}