Visualizzazione stampabile
-
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
-
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 ?
-
Quote:
Originariamente inviato da
Andrea
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
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
-
Hmm .. Sembra tutto corretto..
Ascolta prova a stampare le coordinate lat,lng prima di fare la chiamata a .distanceBetween
-
Quote:
Originariamente inviato da
Andrea
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
-
mmm la longitudine di milano mi pare un pò strana 9188140.799999999
Quote:
Originariamente inviato da
gian
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