CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: gianpassa con ben 2 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 10 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 34 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 6 su 6
Discussione:

Location.distanceBetween

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Baby Droid


    Registrato dal
    Nov 2009
    Messaggi
    28

    Ringraziamenti
    3
    Ringraziato 2 volte in 2 Posts
    Predefinito

    Location.distanceBetween

    Salve,
    Sto smanettando con le mappe di google ma a proposito del metodo Location.distanceBetween mi dà risultati strani. Nella documentazione c'è scritto che dovrebbe dare la distanza in metri tra 2 località per cui dividendo per 1000 dovrei ottenere la distanza in km. Invece questi sono i risultati tra località che distano pochi metri . Perchè?

    V/PRINTPATH( 1062): AB : 14515.782

    V/PRINTPATH( 1062): CA : 4254.5913
    V/PRINTPATH( 1062): CB : 11089.943
    V/PRINTPATH( 1062): AB : 14515.782

    V/PRINTPATH( 1062): CA : 4254.5913
    V/PRINTPATH( 1062): DA : 4845.3774
    V/PRINTPATH( 1062): DC : 8048.023
    V/PRINTPATH( 1062): CB : 11089.943
    V/PRINTPATH( 1062): BD : 12809.993

    Questo è il codice che uso:


    private void fillMapDistance(){
    if (count>1){
    int c=1;
    float result[]=new float[3];
    for (int i=0;i<labels.length;i++){
    for (int j=c;j<labels.length;j++){
    List<Double> start=mapCord.get(labels[i]);
    List<Double> end=mapCord.get(labels[j]);
    if (start!=null && end!=null){
    Location.distanceBetween(start.get(0), start.get(1), end.get(0), end.get(1), result);
    mapDistance.put(labels[i]+labels[j], result[0]/1000);

    }
    }
    c++;
    }
    }
    }

    private void printPaths(){
    String path,path1=null;
    Object[]array=getListPaths();
    if (array!=null){
    for (int i=0;i<array.length;i++){
    path=(String)array[i];
    float distance=mapDistance.get(path);
    if (i<array.length-1){
    path1=(String)array[i+1];
    if (path.charAt(1)!=path1.charAt(0))
    path=Character.toString(path.charAt(1))+Character. toString(path.charAt(0));
    }
    Log.v("PRINTPATH",path+" : "+distance);
    }
    }
    }



    grazie per le eventuali risposte
    Saluti
    Ultima modifica di Andrea; 07-02-10 alle 11:43

  2.  
  3. #2
    Administrator L'avatar di Andrea


    Registrato dal
    Nov 2008
    Messaggi
    3,368
    Smartphone
    Nexus S, myTouch Slide 4g

    Ringraziamenti
    143
    Ringraziato 880 volte in 323 Posts
    Predefinito

    Che cosa fa mapDistance.put?

    Prova a vedere cosa contengono anche gli ultimi 2 elemnti dell'array results ... Anche se credo che il codice sia giusto. hai provato a calcolare la distanza di due citta che è già conosicuta? Come Milano e roma ?

    Twitter @veke87

  4. #3
    Baby Droid


    Registrato dal
    Nov 2009
    Messaggi
    28

    Ringraziamenti
    3
    Ringraziato 2 volte in 2 Posts
    Predefinito

    Quote Originariamente inviato da Andrea Visualizza il messaggio
    Che cosa fa mapDistance.put?
    mapDistance è una HashMap dove la chiave è una Stringa che rappresenta il percorso tra 2 punti ad esempio A e B e il valore è la distanza tra questi 2 punti

    Quote Originariamente inviato da Andrea Visualizza il messaggio
    Prova a vedere cosa contengono anche gli ultimi 2 elemnti dell'array results ... Anche se credo che il codice sia giusto. hai provato a calcolare la distanza di due citta che è già conosicuta? Come Milano e roma ?
    Per quanto riguarda la distanza Roma-Milano il risultato è in km :
    V/PRINTPATH( 750): AB : 12724.675
    V/result[1]( 750): 176.20702
    V/result[2]( 750): 1.0348763

    12724 è più o meno la distanza che mi viene tra 2 vie della mia città non troppo distanti.
    Vedi BD nel post iniziale.

    Allego un altro pezzo di codice sulla determinazione dei punti caso mai ci sia un errore da qualche altra parte:

    final Geocoder gc = new Geocoder(this); //create new geocoder instance

    btnSearch.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
    String addressInput = adress.getText().toString(); //Get input text

    try {

    List<Address> foundAdresses = gc.getFromLocationName(addressInput, 5); //Search addresses

    double lat=0;
    double lon=0;
    if (foundAdresses.size() == 0) { //if no address found, display an error
    Dialog locationError = new AlertDialog.Builder(ActivityMap.this)
    .setIcon(0)
    .setTitle("Error")
    .setPositiveButton(R.string.ok, null)
    .setMessage("Sorry, your address doesn't exist.")
    .create();
    locationError.show();
    }
    else { //else display address on map
    for (int i = 0; i < foundAdresses.size(); ++i) {
    //Save results as Longitude and Latitude
    //@todo: if more than one result, then show a select-list
    Address x = foundAdresses.get(i);
    lat = x.getLatitude();
    lon = x.getLongitude();
    }
    navigateToLocation((lat * 1000000), (lon * 1000000), mapView); //display the found address
    count++;


    fillMapDistance();
    printPaths();

    }
    }catch (Exception e) {
    Log.v("Exception",Log.getStackTraceString(e));
    }

    }
    });


    }

    private void navigateToLocation (double latitude, double longitude, MapView mv) {
    GeoPoint p = new GeoPoint((int) latitude, (int) longitude); //new GeoPoint
    mv.displayZoomControls(true); //display Zoom (seems that it doesn't work yet)
    MapController mc = mv.getController();
    mc.animateTo(p); //move map to the given point
    int zoomlevel = mv.getMaxZoomLevel(); //detect maximum zoom level
    mc.setZoom(zoomlevel - 1); //zoom
    mv.setSatellite(false); //display only "normal" mapview

    List <Double>list =new ArrayList<Double>(2);
    list.add(new Double(latitude));
    list.add(new Double(longitude));
    mapCord.put(labels[count],list);


    placeMarker((int) latitude, (int) longitude);


    }

    Ciao
    Ultima modifica di Andrea; 07-02-10 alle 15:08

  5. #4
    Administrator L'avatar di Andrea


    Registrato dal
    Nov 2008
    Messaggi
    3,368
    Smartphone
    Nexus S, myTouch Slide 4g

    Ringraziamenti
    143
    Ringraziato 880 volte in 323 Posts
    Predefinito

    Hmm .. Sembra tutto corretto..

    Ascolta prova a stampare le coordinate lat,lng prima di fare la chiamata a .distanceBetween

    Twitter @veke87

  6. #5
    Baby Droid


    Registrato dal
    Nov 2009
    Messaggi
    28

    Ringraziamenti
    3
    Ringraziato 2 volte in 2 Posts
    Predefinito

    Quote Originariamente inviato da Andrea Visualizza il messaggio
    Hmm .. Sembra tutto corretto..

    Ascolta prova a stampare le coordinate lat,lng prima di fare la chiamata a .distanceBetween
    V/LatitudineRoma( 841): 4.18954656E7
    V/LongitudineRoma( 841): 1.24823243E7
    V/LatitudineMilano( 841): 4.54636889E7
    V/LongitudineMilano( 841): 9188140.799999999
    V/distanza in Km( 841): 12724.675
    V/result[1]( 841): 176.20702
    V/result[2]( 841): 1.0348763
    ciao

  7. #6
    Androidiano


    Registrato dal
    Feb 2010
    Messaggi
    79

    Ringraziamenti
    2
    Ringraziato 4 volte in 3 Posts
    Predefinito

    mmm la longitudine di milano mi pare un pò strana 9188140.799999999

    Quote Originariamente inviato da gian Visualizza il messaggio
    V/LatitudineRoma( 841): 4.18954656E7
    V/LongitudineRoma( 841): 1.24823243E7
    V/LatitudineMilano( 841): 4.54636889E7
    V/LongitudineMilano( 841): 9188140.799999999
    V/distanza in Km( 841): 12724.675
    V/result[1]( 841): 176.20702
    V/result[2]( 841): 1.0348763
    ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy