是否可以使用地理编码从略微错误的地址获得近似纬度和长度?

时间:2016-04-26 12:39:02

标签: android geocoding

我在Android应用程序中使用地理编码API。我必须从地址中找到latitudelongitude,但对于某些地址,我没有收到任何latitudelongitude。是否有可能从稍微错误的地址获取近似latitudelongitude

为了更好地理解我的代码,我得到IOException,因为geocoder.getFromLocationName(locationAddress, 1)返回null:

这是我的代码:

public  void getAddressFromLocation(final String locationAddress,
                                                  final Context context, final Handler handler) {
            Thread thread = new Thread() {
                @Override
                public void run() {
                    Geocoder geocoder = new Geocoder(context, Locale.getDefault());
                    String result = null;
                   // String latlong="";
                    try {
                        List addressList = geocoder.getFromLocationName(locationAddress, 1);
                        if (addressList != null && addressList.size() > 0) {
                            Address address = (Address) addressList.get(0);
                            StringBuilder sb = new StringBuilder();
                            sb.append(address.getLatitude()).append("_");
                            sb.append(address.getLongitude());
                            result = sb.toString();
                        }
                    } catch (IOException e) {

                    }

}

我传递此879 manania road kapuni kapuni 4851它给出了null。如果我在manania road kapuni kapuni 4851中放弃它,我的观点是geocoder应自动找到约latlong

2 个答案:

答案 0 :(得分:0)

试试这个,

进行休息Api(HttpGet)调用我使用了asyntask。我将获得json响应并解析它以获得lat和lng

public LatLng getLatLng(JSONObject jsonObject) {

        Double lon = new Double(0);
        Double lat = new Double(0);

        try {

            lon = ((JSONArray) jsonObject.get("results")).getJSONObject(0).getJSONObject("geometry").getJSONObject("location").getDouble("lng");

            lat = ((JSONArray) jsonObject.get("results")).getJSONObject(0).getJSONObject("geometry").getJSONObject("location").getDouble("lat");

        } catch (JSONException e) {
            e.printStackTrace();
        }

        return new LatLng(lat, lon);
    }

 class GetLatLngTask extends AsyncTask<String, String, JSONObject>{

        String address = null;
        String name = null;
        @Override
        protected JSONObject doInBackground(String... address) {
            strCompleteAddress = address[0];
            name = address[1];
            HttpGet httpGet = new HttpGet("http://maps.google.com/maps/api/geocode/json?address=" + address+ "ka&sensor=false");

            HttpClient client = new DefaultHttpClient();
            HttpResponse response;
            StringBuilder stringBuilder = new StringBuilder();

            try {
                response = client.execute(httpGet);
                HttpEntity entity = response.getEntity();
                InputStream stream = entity.getContent();
                int b;
                while ((b = stream.read()) != -1) {
                    stringBuilder.append((char) b);
                }
            } catch (ClientProtocolException e) {
            } catch (IOException e) {
            }

            JSONObject jsonObject = new JSONObject();
            try {
                jsonObject = new JSONObject(stringBuilder.toString());
            } catch (JSONException e) {
                e.printStackTrace();
            }

            return jsonObject;
        }

        @Override
        protected void onPostExecute(JSONObject jsonObject) {
            super.onPostExecute(jsonObject);
            LatLng latLng = getLatLng(jsonObject);
}
}

你在onPostExecute中有latnLng。

答案 1 :(得分:0)

我处理此问题的方法是使用Googles AutoComplete API,您可以在用户输入时查询。将根据输入的内容显示地址列表。

然后,用户可以看到要从中选择的有效地址列表,或者他们可以看到他们输入的内容返回了0个地址,因此他们需要检查他们输入的内容。

当用户点击其中一个有效地址时,您可以使用您想要的服务对地址进行地理编码。