android maps itinéraire - Trouver la distance entre deux points sur la carte en utilisant Google Map API V2





7 Answers

Dans Google Map API V2 Vous avez des objets LatLng sorte que vous ne pouvez pas utiliser distanceTo (encore).

Vous pouvez ensuite utiliser le code suivant en considérant oldPosition et newPosition LatLng objets LatLng :

// The computed distance is stored in results[0].
//If results has length 2 or greater, the initial bearing is stored in results[1].
//If results has length 3 or greater, the final bearing is stored in results[2].
float[] results = new float[1];
Location.distanceBetween(oldPosition.latitude, oldPosition.longitude,
                newPosition.latitude, newPosition.longitude, results);

Pour plus d' informations sur la classe Location voir ce lien

comment calculer une

J'utilise google map api v2 dans mon application Android, je suis capable de montrer la carte et de mettre des marqueurs, mais maintenant je suis coincé avec le problème dans lequel je dois trouver la distance entre deux marqueurs ou points placés sur la carte , J'ai déjà parcouru les docs mais je n'ai rien trouvé d'utile dans ce cas.

Si quelqu'un sait comment résoudre cela alors s'il vous plaît aidez-moi.

Merci




Venir plutôt tard, mais vu que c'est l'un des meilleurs résultats sur la recherche Google pour le sujet, je vais partager une autre façon:

Utilisez un one-liner avec la classe d'utilité Googles SphericalUtil

SphericalUtil.computeDistanceBetween(latLngFrom, latLngTo)

Vous aurez besoin des classes d'utilité:

https://developers.google.com/maps/documentation/android-api/utility/

Vous pouvez simplement les inclure dans votre projet en utilisant gradle:

compile 'com.google.maps.android:android-maps-utils:0.4+'



Toutes ces réponses vous donneront la distance en ligne droite. Si vous devez prendre la distance par la route, vous devez analyser le JSON que Google vous renvoie après avoir appelé son service. Vous pouvez utiliser cette méthode:

public String getDistance(final double lat1, final double lon1, final double lat2, final double lon2){
    String parsedDistance;
    String response;
        Thread thread=new Thread(new Runnable() {
            @Override
            public void run() {
                try {

                    URL url = new URL("http://maps.googleapis.com/maps/api/directions/json?origin=" + lat1 + "," + lon1 + "&destination=" + lat2 + "," + lon2 + "&sensor=false&units=metric&mode=driving");
                    final HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                    conn.setRequestMethod("POST");
                    InputStream in = new BufferedInputStream(conn.getInputStream());
                    response = org.apache.commons.io.IOUtils.toString(in, "UTF-8");

                    JSONObject jsonObject = new JSONObject(response);
                    JSONArray array = jsonObject.getJSONArray("routes");
                    JSONObject routes = array.getJSONObject(0);
                    JSONArray legs = routes.getJSONArray("legs");
                    JSONObject steps = legs.getJSONObject(0);
                    JSONObject distance = steps.getJSONObject("distance");
                    parsedDistance=distance.getString("text");

                } catch (ProtocolException e) {
                    e.printStackTrace();
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });
    thread.start();
    try {
        thread.join();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return parsedDistance;
}

lat1 et lon1 sont les coordonnées d'origine, lat2 et lon2 sont les coordonnées de la destination.




essaye ça

double distance;
Location locationA = new Location("");
locationA.setLatitude(main_Latitude);
locationA.setLongitude(main_Longitude);
Location locationB = new Location("");
locationB.setLatitude(sub_Latitude);
locationB.setLongitude(sub_Longitude);
distance = locationA.distanceTo(locationB)/1000;
kmeter.setText(String.valueOf(distance));
Toast.makeText(getApplicationContext(), ""+distance, Toast.LENGTH_LONG).show();double distance;



La distance entre deux géo-coordonnées peut être trouvée en utilisant la formule de Haversine . Cette formule est efficace pour calculer la distance dans un corps sphérique, c'est-à-dire la terre dans notre cas.




vous pouvez utiliser cette fonction. Je l'ai utilisé dans mon projet.

public String getDistance(LatLng my_latlong, LatLng frnd_latlong) {
    Location l1 = new Location("One");
    l1.setLatitude(my_latlong.latitude);
    l1.setLongitude(my_latlong.longitude);

    Location l2 = new Location("Two");
    l2.setLatitude(frnd_latlong.latitude);
    l2.setLongitude(frnd_latlong.longitude);

    float distance = l1.distanceTo(l2);
    String dist = distance + " M";

    if (distance > 1000.0f) {
        distance = distance / 1000.0f;
        dist = distance + " KM";
    }
    return dist;
}



CECI EST LE CODE FACILE ET PARFAIT POUR LA DUREE ET LA DISTANCE

  • Étape 1 (ajoutez ceci et synchronisez dans votre gradle)

    compile 'com.android.volley:volley:1.0.0'  
    
  • Étape 2: (écrivez ceci dans votre méthode de déclenchement)

    public void clicked(View view) throws JSONException {  
    
         JSONObject locationJsonObject = new JSONObject();
                locationJsonObject.put("origin", "54.406505,18.67708");
                locationJsonObject.put("destination", "54.446251,18.570993");
                LatlngCalc(locationJsonObject);
    }
    
  • Étape 3: (Copier et coller dans votre classe)

    private void LatlngCalc(JSONObject locationJsonObject) throws JSONException {
    
        RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
        String url = "http://maps.googleapis.com/maps/api/distancematrix/" +
                    "json?origins=" + locationJsonObject.getString("origin") + "&destinations=" + locationJsonObject.getString("destination") + "&mode=driving&" +
                    "language=en-EN&sensor=false";
    
        StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
    
                        mTextView.setText("Response is: " + response.substring(0, 500));
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                mTextView.setText("That didn't work!");
            }
        });
        queue.add(stringRequest);  
    }
    





Related