0

ソースアドレスと宛先アドレスを提供する2つのテキストボックスがあります。

1) 出典 = SHAHIBAUG UNDER BRIDGE、Shahibagh、アーメダバード、グジャラート

2) 目的地 = CG Road, Shreyas Colony, Navrangpura, Ahmedab​​ad, Gujarat

Distance = 4.6 (Google マップから) && 2.6656852 (Location の distanceTo メソッドを使用)

final ProgressDialog dialog = ProgressDialog.show(AutoActivity.this, "Fare", "test");

            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        Location source_location = new Location("");
                        Location destination_location = new Location("");
                        Geocoder geoCode = new Geocoder(getApplicationContext());

                        source_location.setLatitude(geoCode.getFromLocationName(source_input.getText().toString(), 1).get(0).getLatitude());
                        source_location.setLatitude(geoCode.getFromLocationName(source_input.getText().toString(), 1).get(0).getLongitude());
                        source_location.set(source_location);

                        destination_location.setLatitude(geoCode.getFromLocationName(destination_input.getText().toString(), 1).get(0).getLatitude());
                        destination_location.setLatitude(geoCode.getFromLocationName(destination_input.getText().toString(), 1).get(0).getLongitude());
                        destination_location.set(destination_location);

                        float distance = source_location.distanceTo(destination_location)/1000;
                        System.out.println("Distance == " + distance);
                        kmVal = BigDecimal.valueOf(distance);
                        calculateFares();
                    } catch (IOException e) {
                        e.printStackTrace();
                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally {
                        if (dialog!=null) {
                            dialog.dismiss();   
                        }
                    }
                }
            }).start();

距離を間違える理由がわかりません。私のコードには、getFromLocationName メソッドを使用したことと、1 つの結果のみを取得するために 1 つの引数を渡しているという疑問があります。それは何か違いがありますか?誰でも親切に助けてください。

4

2 に答える 2

1

Google マップは道路の距離を示し、Geocoder はカラスが飛ぶ距離を示します。

于 2012-09-03T08:34:25.277 に答える
0

Google Maps API を使用して解決しました。それが他の人に役立つことを願っています。正確な距離を提供します。

final ProgressDialog dialog = ProgressDialog.show(AutoActivity.this, "", "Calculating...");

            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        float distance = 0.0f;
                        StringBuffer url = new StringBuffer("http://maps.googleapis.com/maps/api/directions/json?origin=");
                        url.append(source_input.getText().toString().replace(" ", "").trim().toString());
                        url.append("&destination=");
                        url.append(destination_input.getText().toString().replace(" ", "").trim().toString());
                        url.append("&sensor=false");

                        DefaultHttpClient httpClient = new DefaultHttpClient();
                        HttpGet httpGet = new HttpGet(url.toString());
                        HttpResponse httpResponse = httpClient.execute(httpGet);
                        HttpEntity httpEntity = httpResponse.getEntity();
                        String line = EntityUtils.toString(httpEntity);

                        JSONObject jsonObject = new JSONObject(line);
                        JSONArray jsonarray = jsonObject.getJSONArray("routes").getJSONObject(0).getJSONArray("legs");

                        for (int i = 0; i < jsonarray.length(); i++) {
                            JSONObject obj = jsonarray.getJSONObject(i);
                            distance  = Float.valueOf(obj.getJSONObject("distance").getString("text").replace("km", ""));
                            System.out.println("Distance == " + obj.getJSONObject("distance").getString("text").replace("km", ""));
                        }


                        kmVal = BigDecimal.valueOf(distance);
                        calculateFares();
                    } catch (IOException e) {
                        e.printStackTrace();
                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally {
                        if (dialog!=null) {
                            dialog.dismiss();   
                        }
                    }
                }
            }).start();
于 2012-09-04T04:52:53.927 に答える