Autore Topic: sostituire posizione statica con gps  (Letto 5437 volte)

Offline nil85x

  • Utente junior
  • **
  • Post: 55
  • Respect: 0
    • Mostra profilo
sostituire posizione statica con gps
« il: 05 Aprile 2012, 21:03:03 CEST »
0
Salve a tutti...allora portate pazienza che vi spiego tutto...devo creare una cosa di questo tipo:
1) parte l'applicazione sull'emulatore android
2)deve spuntare la mappa di google con la mia posizione (quindi gps) e poi 2 punti distanti da me
3)l'applicazione deve calcolare la distanza da me al punto d1 (es. questo punto potrebbe essere una stazione di benzina) e da me al punto d2 (una seconda stazione di benzina)
4)infine stampare un messaggio che dice: "La distanza più conveniente è la d1 (o la d2)" oppure tornarmi il valore delle distanze  (es. d1=30km d2=50km)

ADESSO:

girando girando...e girando...ho trovato un codice che mi crea un' applicazione sulll'emulatore android che fa partire la mappa di google (ovviamente inserendo la mia map-key) e mi dà la distanza tra due punti (punti che nel codice sono identificati dalle coordinate statiche, cioè latitudine e longitudine) e in più mi porta un messaggio sopra del tipo: "la distanza da questa via a questa via e di 50km e ci vogliono 10 minuti per arrivare). A questo punto quello che vorrei fare e sostituire il primo punto passato staticamente con la mia posizione corrente. (quindi bisogna prima implemetare un gps e poi collegarlo al posto delle prime due coordinate statiche...e come si fa!??!?! :'( )

Vi allego tutto il pacchetto.

Grazie mille a tutti in anticipo e complimenti per i vostri tutorial che sono molto ben spiegati  :-)

Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
Re:sostituire posizione statica con gps
« Risposta #1 il: 07 Aprile 2012, 01:41:06 CEST »
0
Ciao devi implementarti un locationlistener che si preoccupi di prendere la tua posione e passarla al tuo codicr

Offline nil85x

  • Utente junior
  • **
  • Post: 55
  • Respect: 0
    • Mostra profilo
Re:sostituire posizione statica con gps
« Risposta #2 il: 07 Aprile 2012, 10:04:32 CEST »
0
ciao...grazie per la risposta...l'ho implementato ma ottengo solo errori su errori..non è che puoi dirmi dove metterlo esattamene?!...e soprattutto come passare i valori getLat e getLon !?

Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
Re:sostituire posizione statica con gps
« Risposta #3 il: 07 Aprile 2012, 11:26:07 CEST »
0
Beh vediamo che errori ottieni e come risolverli. Per il dove metterlo beh in genere si mette dove ti serve  :)

Offline nil85x

  • Utente junior
  • **
  • Post: 55
  • Respect: 0
    • Mostra profilo
Re:sostituire posizione statica con gps
« Risposta #4 il: 07 Aprile 2012, 13:32:18 CEST »
0

Questo è il codice senza l'implementazione

Codice (Java): [Seleziona]
package com.googledrivingdirection;

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.Bitmap.Config;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;

public class MapRouteActivity extends MapActivity {

        LinearLayout linearLayout;
        MapView mapView;
        private Road mRoad;

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                mapView = (MapView) findViewById(R.id.mapview);
                mapView.setBuiltInZoomControls(true);

                new Thread() {
                        @Override
                        public void run() {
                                double fromLat = 38.10748, fromLon = 15.656118, toLat = 38.110738, toLon = 15.656086;
                                String url = RoadProvider
                                                .getUrl(fromLat, fromLon, toLat, toLon);
                                InputStream is = getConnection(url);
                                mRoad = RoadProvider.getRoute(is);
                                mHandler.sendEmptyMessage(0);
                        }
                }.start();
        }

        Handler mHandler = new Handler() {
                public void handleMessage(android.os.Message msg) {
                        TextView textView = (TextView) findViewById(R.id.description);
                        textView.setText(mRoad.mName + " " + mRoad.mDescription);
                        MapOverlay mapOverlay = new MapOverlay(mRoad, mapView);
                        List<Overlay> listOfOverlays = mapView.getOverlays();
                        listOfOverlays.clear();
                        listOfOverlays.add(mapOverlay);
                        mapView.invalidate();
                };
        };

        private InputStream getConnection(String url) {
                InputStream is = null;
                try {
                        URLConnection conn = new URL(url).openConnection();
                        is = conn.getInputStream();
                } catch (MalformedURLException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                }
                return is;
        }

        @Override
        protected boolean isRouteDisplayed() {
                return false;
        }
}

class MapOverlay extends com.google.android.maps.Overlay {
        Road mRoad;
        ArrayList<GeoPoint> mPoints;

        public MapOverlay(Road road, MapView mv) {
                mRoad = road;
                if (road.mRoute.length > 0) {
                        mPoints = new ArrayList<GeoPoint>();
                        for (int i = 0; i < road.mRoute.length; i++) {
                                mPoints.add(new GeoPoint((int) (road.mRoute[i][1] * 1000000),
                                                (int) (road.mRoute[i][0] * 1000000)));
                        }
                        int moveToLat = (mPoints.get(0).getLatitudeE6() + (mPoints.get(
                                        mPoints.size() - 1).getLatitudeE6() - mPoints.get(0)
                                        .getLatitudeE6()) / 2);
                        int moveToLong = (mPoints.get(0).getLongitudeE6() + (mPoints.get(
                                        mPoints.size() - 1).getLongitudeE6() - mPoints.get(0)
                                        .getLongitudeE6()) / 2);
                        GeoPoint moveTo = new GeoPoint(moveToLat, moveToLong);

                        MapController mapController = mv.getController();
                        mapController.animateTo(moveTo);
                        mapController.setZoom(7);
                }
        }

        @Override
        public boolean draw(Canvas canvas, MapView mv, boolean shadow, long when) {
                super.draw(canvas, mv, shadow);
                drawPath(mv, canvas);
                return true;
        }

        public void drawPath(MapView mv, Canvas canvas) {
                int x1 = -1, y1 = -1, x2 = -1, y2 = -1;
                Paint paint = new Paint();
                paint.setColor(Color.GREEN);
                paint.setStyle(Paint.Style.STROKE);
                paint.setStrokeWidth(3);
                for (int i = 0; i < mPoints.size(); i++) {
                        Point point = new Point();
                        mv.getProjection().toPixels(mPoints.get(i), point);
                        x2 = point.x;
                        y2 = point.y;
                        if (i > 0) {
                                canvas.drawLine(x1, y1, x2, y2, paint);
                        }
                        x1 = x2;
                        y1 = y2;
                }
        }
}


Questo è con il locationlistner provando a passare le coordinate dal gps (ovviamente non funziona)

Codice (Java): [Seleziona]
package com.googledrivingdirection;

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;


import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.Bitmap.Config;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.MyLocationOverlay;
import com.google.android.maps.Overlay;

public class MapRouteActivity extends MapActivity {

        LinearLayout linearLayout;
       
        private Road mRoad;
       
        //Riferimento alla MapView
        private MapView mapView;

        //Riferimento al MapController
        MapController mapController;

        //Riferimento al MyLocationOverlay
        private MyLocationOverlay myLocationOverlay;
       
        public double Lat = 45.46367;
        public double Long = 9.188126;

        // Otteniamo il riferimento al LocationManager
        LocationManager locationManager;
       
        LocationListener locationListener;

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                mapView = (MapView) findViewById(R.id.mapview);
                mapView.setBuiltInZoomControls(true);
                LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
                LocationListener ll = new mylocationlistener();
                lm.requestLocationUpdates (LocationManager.GPS_PROVIDER, 0, 0, ll);
//        }

                new Thread() {
                        @Override
                        public void run() {
                               
                                       
                                double fromLat =  getLat(), fromLon =  getLong(), toLat = 38.105462, toLon = 15.652535;
                                String url = RoadProvider
                                                .getUrl(fromLat, fromLon, toLat, toLon);
                                InputStream is = getConnection(url);
                                mRoad = RoadProvider.getRoute(is);
                                mHandler.sendEmptyMessage(0);
                                //Toast.makeText( getApplicationContext(),"Ciao Run; Lat:" + Integer.toString((int) getLat()) + "; Long:" + Integer.toString((int) getLong()), Toast.LENGTH_SHORT).show();

                        }


                }.start();
}
               
                                               

        Handler mHandler = new Handler() {
                public void handleMessage(android.os.Message msg) {
                        TextView textView = (TextView) findViewById(R.id.description);
                        textView.setText(mRoad.mName + " " + mRoad.mDescription);
                        MapOverlay mapOverlay = new MapOverlay(mRoad, mapView);
                        List<Overlay> listOfOverlays = mapView.getOverlays();
                        listOfOverlays.clear();
                        listOfOverlays.add(mapOverlay);
                        mapView.invalidate();
                };
        };

        private InputStream getConnection(String url) {
                InputStream is = null;
                try {
                        URLConnection conn = new URL(url).openConnection();
                        is = conn.getInputStream();
                } catch (MalformedURLException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                }
                return is;
        }

        @Override      
        protected boolean isRouteDisplayed() {
                return false;
        }

       
       
        private class mylocationlistener implements LocationListener {
           
       
                        public void onLocationChanged(Location location)
                {
                    if (location != null)
                    {
                       
                       
                        double Lat = location.getLatitude();
                        setLat(Lat);
   
                        double Long = location.getLongitude();                 
                        setLong(Long);

                        }
                   
                }
                        @Override
                        public void onProviderDisabled(String provider) {
                                // TODO Auto-generated method stub
                               
                        }

                        @Override
                        public void onProviderEnabled(String provider) {
                                // TODO Auto-generated method stub
                               
                        }

                        @Override
                        public void onStatusChanged(String provider, int status,
                                        Bundle extras) {
                                // TODO Auto-generated method stub
                               
                        }


}



        public double getLat() {
                return Lat;
        }

        public void setLat(double lat) {
                this.Lat = lat;

        }  
       
        public double getLong() {
                return Long;
        }

        public void setLong(double lon) {
                this.Long = lon;

        }



public void onProviderDisabled(String provider) {
       
}

public void onProviderEnabled(String provider) {
       
       
}

public void onStatusChanged(String provider, int status, Bundle extras) {
}
}



class MapOverlay extends com.google.android.maps.Overlay {
        Road mRoad;
        ArrayList<GeoPoint> mPoints;

        public MapOverlay(Road road, MapView mv) {
                mRoad = road;
                if (road.mRoute.length > 0) {
                        mPoints = new ArrayList<GeoPoint>();
                        for (int i = 0; i < road.mRoute.length; i++) {
                                mPoints.add(new GeoPoint((int) (road.mRoute[i][1] * 1000000),
                                                (int) (road.mRoute[i][0] * 1000000)));
                        }
                        int moveToLat = (mPoints.get(0).getLatitudeE6() + (mPoints.get(
                                        mPoints.size() - 1).getLatitudeE6() - mPoints.get(0)
                                        .getLatitudeE6()) / 2);
                        int moveToLong = (mPoints.get(0).getLongitudeE6() + (mPoints.get(
                                        mPoints.size() - 1).getLongitudeE6() - mPoints.get(0)
                                        .getLongitudeE6()) / 2);
                        GeoPoint moveTo = new GeoPoint(moveToLat, moveToLong);

                        MapController mapController = mv.getController();
                        mapController.animateTo(moveTo);
                        mapController.setZoom(7);
                }
        }

        @Override
        public boolean draw(Canvas canvas, MapView mv, boolean shadow, long when) {
                super.draw(canvas, mv, shadow);
                drawPath(mv, canvas);
                return true;
        }

        public void drawPath(MapView mv, Canvas canvas) {
                int x1 = -1, y1 = -1, x2 = -1, y2 = -1;
                Paint paint = new Paint();
                paint.setColor(Color.GREEN);
                paint.setStyle(Paint.Style.STROKE);
                paint.setStrokeWidth(3);
                for (int i = 0; i < mPoints.size(); i++) {
                        Point point = new Point();
                        mv.getProjection().toPixels(mPoints.get(i), point);
                        x2 = point.x;
                        y2 = point.y;
                        if (i > 0) {
                                canvas.drawLine(x1, y1, x2, y2, paint);
                        }
                        x1 = x2;
                        y1 = y2;
                }
        }
}

Offline nil85x

  • Utente junior
  • **
  • Post: 55
  • Respect: 0
    • Mostra profilo
Re:sostituire posizione statica con gps
« Risposta #5 il: 07 Aprile 2012, 15:08:00 CEST »
0
Allora adesso ho unito i codici solo che sono indipendenti cioè:
il gps funziona per cavoli suoi quindi se gli dò le coordinate funziona e la mappa si sposta, il problema è che mi da sempre la stessa distanza di quei 2 punti statici che ho passato...quindii valori del gps non vanno a sostituire i 2 valori statici di fromLat e fromlon (ma non capisco perchè dato che ho posto fromLat = getLat() e fromLon = getLong() )

Codice (Java): [Seleziona]
package com.googledrivingdirection;




import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.Bitmap.Config;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.MyLocationOverlay;
import com.google.android.maps.Overlay;

public class MapRouteActivity extends MapActivity {

        LinearLayout linearLayout;
        MapView mapView;
        MapController mapController;
       
        private Road mRoad;
       
       
       
      //Riferimento al MyLocationOverlay
        private MyLocationOverlay myLocationOverlay;
       
       

        // Otteniamo il riferimento al LocationManager
        LocationManager locationManager;
       
       
       
        LocationListener locationListener;
        double Lat = 45.46367;
        double Long = 9.188126;
       
       
        private class mylocationlistener implements LocationListener {
           
               
                        public void onLocationChanged(Location location)
                {
                               
                                mapView.invalidate();
                               
                    if (location != null)
                    {
                       
                       
                        Double Lat = location.getLatitude()*1E6;
                        setLat(Lat);
   
                        Double Long = location.getLongitude()*1E6;                     
                        setLong(Long);
                       
                        GeoPoint point = new GeoPoint(Lat.intValue(), Long.intValue());
                       
                        mapController.animateTo(point);

                        }
           
                };
               
       
               
                        @Override
                        public void onProviderDisabled(String provider) {
                                // TODO Auto-generated method stub
                               
                        }

                        @Override
                        public void onProviderEnabled(String provider) {
                                // TODO Auto-generated method stub
                               
                        }

                        @Override
                        public void onStatusChanged(String provider, int status,
                                        Bundle extras) {
                                // TODO Auto-generated method stub
                               
                        }


        }
       
       
        public double getLat() {
                return Lat;
        }

        public void setLat(double lat) {
                this.Lat = lat;

        }  
       
        public double getLong() {
                return Long;
        }

        public void setLong(double lon) {
                this.Long = lon;

        }
       
 
       

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                mapView = (MapView) findViewById(R.id.mapview);
                mapView.setBuiltInZoomControls(true);
                mapController = mapView.getController();
               
                myLocationOverlay = new MyLocationOverlay(this, mapView);
                        List<Overlay> overlays = mapView.getOverlays();
                        overlays.add(myLocationOverlay);
                        myLocationOverlay.enableMyLocation();
               
               
               
                LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
                LocationListener ll = new mylocationlistener();
                lm.requestLocationUpdates (LocationManager.GPS_PROVIDER, 0, 0, ll);
               
 

                new Thread() {
                        @Override
                        public void run() {
                                double fromLat = getLat(), fromLon = getLong(), toLat = 38.110738, toLon = 15.656086;
                                String url = RoadProvider
                                                .getUrl(fromLat, fromLon, toLat, toLon);
                                InputStream is = getConnection(url);
                                mRoad = RoadProvider.getRoute(is);
                                mHandler.sendEmptyMessage(0);
                        }
                }.start();
        }

        Handler mHandler = new Handler() {
                public void handleMessage(android.os.Message msg) {
                        TextView textView = (TextView) findViewById(R.id.description);
                        textView.setText(mRoad.mName + " " + mRoad.mDescription);
                        MapOverlay mapOverlay = new MapOverlay(mRoad, mapView);
                        List<Overlay> listOfOverlays = mapView.getOverlays();
                        listOfOverlays.clear();
                        listOfOverlays.add(mapOverlay);
                        mapView.invalidate();
                };
        };

        private InputStream getConnection(String url) {
                InputStream is = null;
                try {
                        URLConnection conn = new URL(url).openConnection();
                        is = conn.getInputStream();
                } catch (MalformedURLException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                }
                return is;
        }

        @Override
        protected boolean isRouteDisplayed() {
                return false;
        }
}

class MapOverlay extends com.google.android.maps.Overlay {
        Road mRoad;
        ArrayList<GeoPoint> mPoints;

        public MapOverlay(Road road, MapView mv) {
                mRoad = road;
                if (road.mRoute.length > 0) {
                        mPoints = new ArrayList<GeoPoint>();
                        for (int i = 0; i < road.mRoute.length; i++) {
                                mPoints.add(new GeoPoint((int) (road.mRoute[i][1] * 1000000),
                                                (int) (road.mRoute[i][0] * 1000000)));
                        }
                        int moveToLat = (mPoints.get(0).getLatitudeE6() + (mPoints.get(
                                        mPoints.size() - 1).getLatitudeE6() - mPoints.get(0)
                                        .getLatitudeE6()) / 2);
                        int moveToLong = (mPoints.get(0).getLongitudeE6() + (mPoints.get(
                                        mPoints.size() - 1).getLongitudeE6() - mPoints.get(0)
                                        .getLongitudeE6()) / 2);
                        GeoPoint moveTo = new GeoPoint(moveToLat, moveToLong);

                        MapController mapController = mv.getController();
                        mapController.animateTo(moveTo);
                        mapController.setZoom(7);
                }
        }

        @Override
        public boolean draw(Canvas canvas, MapView mv, boolean shadow, long when) {
                super.draw(canvas, mv, shadow);
                drawPath(mv, canvas);
                return true;
        }

        public void drawPath(MapView mv, Canvas canvas) {
                int x1 = -1, y1 = -1, x2 = -1, y2 = -1;
                Paint paint = new Paint();
                paint.setColor(Color.GREEN);
                paint.setStyle(Paint.Style.STROKE);
                paint.setStrokeWidth(3);
                for (int i = 0; i < mPoints.size(); i++) {
                        Point point = new Point();
                        mv.getProjection().toPixels(mPoints.get(i), point);
                        x2 = point.x;
                        y2 = point.y;
                        if (i > 0) {
                                canvas.drawLine(x1, y1, x2, y2, paint);
                        }
                        x1 = x2;
                        y1 = y2;
                }
        }
}

Offline nil85x

  • Utente junior
  • **
  • Post: 55
  • Respect: 0
    • Mostra profilo
Re:sostituire posizione statica con gps
« Risposta #6 il: 07 Aprile 2012, 16:19:06 CEST »
0
allora ci sono quasi (credo) solo che mi dà errore sui set e get ( 4 errori li ho segnati)

Codice (Java): [Seleziona]
package com.googledrivingdirection;






import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.Bitmap.Config;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.MyLocationOverlay;
import com.google.android.maps.Overlay;

public class MapRouteActivity extends MapActivity {

        LinearLayout linearLayout;
        MapView mapView;
        MapController mapController;
       
        private Road mRoad;
                     
      //Riferimento al MyLocationOverlay
        private MyLocationOverlay myLocationOverlay;
       
        // Otteniamo il riferimento al LocationManager
        LocationManager locationManager;
               
        LocationListener locationListener;
       
       
       
        private class mylocationlistener implements LocationListener {
           
               
                        public void onLocationChanged(Location location)
                {
                               
                                mapView.invalidate();
                               
                    if (location != null)
                    {
                       
                       
                        Double Lat = location.getLatitude()*1E6;
                       
   
                        Double Long = location.getLongitude()*1E6;                     
                       
                       
                       
                        GeoPoint point = new GeoPoint(Lat.intValue(), Long.intValue());
                       
                        mapController.animateTo(point);
                        double lat = location.getLatitude();
                        setlat(lat);
                        double lng = location.getLongitude();
                        setlng(lng);
                       
                                   
                        }                                  
        };
               
        //funziona il gps ma non si vede il punto lampeggiante
               
                        @Override
                        public void onProviderDisabled(String provider) {
                                // TODO Auto-generated method stub
                               
                        }

                        @Override
                        public void onProviderEnabled(String provider) {
                                // TODO Auto-generated method stub
                               
                        }

                        @Override
                        public void onStatusChanged(String provider, int status,
                                        Bundle extras) {
                                // TODO Auto-generated method stub
                               
                        }


        }
       
        //lat e lng devono diventare il Double Lat e il Double Long
       
//      double lat = 45.46367;
//      double lng = 9.188126;
//     
        public double getlat() {
                return  lat;                        //errore
        }

        public void setlat(double lat) {
                this.lat =  lat;                    //errore

        }  
       
        public double getlng() {
                return lng;                          //errore
        }

        public void setlng(double lng) {
                this.lng = lng;                        //errore

        }
       
       
       

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
               
               
               
                mapView = (MapView) findViewById(R.id.mapview);
                mapView.setBuiltInZoomControls(true);
                mapController = mapView.getController();
               
                myLocationOverlay = new MyLocationOverlay(this, mapView);
                        List<Overlay> overlays = mapView.getOverlays();
                        overlays.add(myLocationOverlay);
                        myLocationOverlay.enableMyLocation();
               
               
               
                LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
                LocationListener ll = new mylocationlistener();
                lm.requestLocationUpdates (LocationManager.GPS_PROVIDER, 0, 0, ll);
               
 

                new Thread() {
                        @Override
                        public void run() {
                                double fromLat = getlat(), fromLon = getlng(), toLat = 38.110738, toLon = 15.656086;
                                String url = RoadProvider
                                                .getUrl(fromLat, fromLon, toLat, toLon);
                                InputStream is = getConnection(url);
                                mRoad = RoadProvider.getRoute(is);
                                mHandler.sendEmptyMessage(0);
                        }
                }.start();
        }

        Handler mHandler = new Handler() {
                public void handleMessage(android.os.Message msg) {
                        TextView textView = (TextView) findViewById(R.id.description);
                        textView.setText(mRoad.mName + " " + mRoad.mDescription);
                        MapOverlay mapOverlay = new MapOverlay(mRoad, mapView);
                        List<Overlay> listOfOverlays = mapView.getOverlays();
                        listOfOverlays.clear();
                        listOfOverlays.add(mapOverlay);
                        mapView.invalidate();
                };
        };

        private InputStream getConnection(String url) {
                InputStream is = null;
                try {
                        URLConnection conn = new URL(url).openConnection();
                        is = conn.getInputStream();
                } catch (MalformedURLException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                }
                return is;
        }

        @Override
        protected boolean isRouteDisplayed() {
                return false;
        }
}

class MapOverlay extends com.google.android.maps.Overlay {
        Road mRoad;
        ArrayList<GeoPoint> mPoints;

        public MapOverlay(Road road, MapView mv) {
                mRoad = road;
                if (road.mRoute.length > 0) {
                        mPoints = new ArrayList<GeoPoint>();
                        for (int i = 0; i < road.mRoute.length; i++) {
                                mPoints.add(new GeoPoint((int) (road.mRoute[i][1] * 1000000),
                                                (int) (road.mRoute[i][0] * 1000000)));
                        }
                        int moveToLat = (mPoints.get(0).getLatitudeE6() + (mPoints.get(
                                        mPoints.size() - 1).getLatitudeE6() - mPoints.get(0)
                                        .getLatitudeE6()) / 2);
                        int moveToLong = (mPoints.get(0).getLongitudeE6() + (mPoints.get(
                                        mPoints.size() - 1).getLongitudeE6() - mPoints.get(0)
                                        .getLongitudeE6()) / 2);
                        GeoPoint moveTo = new GeoPoint(moveToLat, moveToLong);

                        MapController mapController = mv.getController();
                        mapController.animateTo(moveTo);
                        mapController.setZoom(7);
                }
        }

        @Override
        public boolean draw(Canvas canvas, MapView mv, boolean shadow, long when) {
                super.draw(canvas, mv, shadow);
                drawPath(mv, canvas);
                return true;
        }

        public void drawPath(MapView mv, Canvas canvas) {
                int x1 = -1, y1 = -1, x2 = -1, y2 = -1;
                Paint paint = new Paint();
                paint.setColor(Color.GREEN);
                paint.setStyle(Paint.Style.STROKE);
                paint.setStrokeWidth(3);
                for (int i = 0; i < mPoints.size(); i++) {
                        Point point = new Point();
                        mv.getProjection().toPixels(mPoints.get(i), point);
                        x2 = point.x;
                        y2 = point.y;
                        if (i > 0) {
                                canvas.drawLine(x1, y1, x2, y2, paint);
                        }
                        x1 = x2;
                        y1 = y2;
                }
        }
}

Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
Re:sostituire posizione statica con gps
« Risposta #7 il: 07 Aprile 2012, 16:29:27 CEST »
0
Ti da errore perchè Lat e Long sono della variabili private di metodi. Devi dichiararle come attributi della classe activity, in questo modo sono utilizzabili da tutti i metodi e classi private che hai implementato nell'activity.

Offline nil85x

  • Utente junior
  • **
  • Post: 55
  • Respect: 0
    • Mostra profilo
Re:sostituire posizione statica con gps
« Risposta #8 il: 07 Aprile 2012, 17:24:34 CEST »
0
e...e come si fa ? :D

Offline nil85x

  • Utente junior
  • **
  • Post: 55
  • Respect: 0
    • Mostra profilo
Re:sostituire posizione statica con gps
« Risposta #9 il: 07 Aprile 2012, 17:29:27 CEST »
0
e sopratutto ---> fromLat = getlat(), fromLon = getlng()

che cosa gli passo?!

Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
Re:sostituire posizione statica con gps
« Risposta #10 il: 08 Aprile 2012, 03:15:53 CEST »
0
Devi semplicemente dichiarare all'inizio dell'activity fuori da qualunque metodo le due variabili double (lat e long) e nel locationlistener valorizzi quelle

Offline nil85x

  • Utente junior
  • **
  • Post: 55
  • Respect: 0
    • Mostra profilo
Re:sostituire posizione statica con gps
« Risposta #11 il: 08 Aprile 2012, 18:56:23 CEST »
0
no l'ho fatto ma mi prende solo i valori statici (es. double lat=50; double lng=60; e l'applicazione parte senza problemi) io voglio inserire dentro questie 2 variabili double i valori della mia posizione corrente per poi usarla nella funzione successiva che traccia la distanza tra due punti...e non c'è verso...ho 2 occhi gonfi da tre giorni girando per i forum e non ho trovato niente......aiutooooooooooooooooo  ...tanti auguri di buona pasqua cmq  :-)

Offline nil85x

  • Utente junior
  • **
  • Post: 55
  • Respect: 0
    • Mostra profilo
Re:sostituire posizione statica con gps
« Risposta #12 il: 08 Aprile 2012, 22:00:26 CEST »
0
allora ho usato double fuori come hai detto tu.
Ho implementato in automatico un getter e un setter
solo che non so perchè se metto fromLat= getlat() mi dà errore (stessa cosa per getlng() ) e quindi mi dice che il getlat () e il getlng () non sono utilizzati... 

Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
Re:sostituire posizione statica con gps
« Risposta #13 il: 10 Aprile 2012, 11:33:43 CEST »
0
Allora lascia perdere i metodi get e set perchè non servono. Quello che devi fare è semplicemente scrivere dopo le altre variabili e oggetti della classe activity, per intenderci dove dichiari ad esempio l'oggetto privato Road mRoad, le 2 variabili double lat e lng
Codice (Java): [Seleziona]
private double lat;
private double lng;


Poi ovviamente saranno queste variabili che dovranno essere aggiornate dal locationlistener ed utilizzate dal tuo metodo. Aggiungo anche (anche se è sottointeso) che il thread che ti posiziona i punti sulla mappa e ti calcola le distanze non può più essere lanciato dal metodo onCreate ma deve essere lanciato dal locationlistener non appena riceve le coordinate correnti altrimenti mi sembra ovvio che usa le vecchie coordinate "statiche"

Offline nil85x

  • Utente junior
  • **
  • Post: 55
  • Respect: 0
    • Mostra profilo
Re:sostituire posizione statica con gps
« Risposta #14 il: 10 Aprile 2012, 12:58:39 CEST »
0
allora ho fatto così:

Codice (Java): [Seleziona]
public class MapRouteActivity extends MapActivity {

        LinearLayout linearLayout;
        MapView mapView;
        MapController mapController;
       
        private Road mRoad;
        private  double lat;
        private double lng;


       
       
       
      //Riferimento al MyLocationOverlay
        private MyLocationOverlay myLocationOverlay;
       
       

        // Otteniamo il riferimento al LocationManager
        LocationManager locationManager;
       
       
       
        LocationListener locationListener;
        //double Lat = 45.46367;
        //double Long = 9.188126;
       
             
       
       
       
       
        private class mylocationlistener implements LocationListener  {
           
               
                               
               

                        public void onLocationChanged(Location location)
                {
                               
                               
                                lat= location.getLatitude()*1E6;
                                lng= location.getLongitude()*1E6;
                               
                                mapView.invalidate();
                               
                    if (location != null)
                    {
                       
                 
                       
                       
                        Double Lat = location.getLatitude()*1E6;
                       
   
                        Double Lng = location.getLongitude()*1E6;              
                       
                       
                        GeoPoint point = new GeoPoint(Lat.intValue(), Lng.intValue());
                       
                        mapController.animateTo(point);
                       
                       
                        new Thread() {
                        @Override
                         public void run() {
                                 double fromLat=lat, fromLng=lng, toLat = 38.110738, toLon = 15.656086;
                                String url = RoadProvider
                                                .getUrl(fromLat, fromLng, toLat, toLon);
                                InputStream is = getConnection(url);
                                 mRoad = RoadProvider.getRoute(is);
                                 mHandler.sendEmptyMessage(0);
                        }
                 }.start();

                        }
           
                };
               
       


in teoria le aggangia...solo che quando parto l'applicazione parte il gps, ma non mi traccia la distanza (qiundi non fa tutto il resto) e poi appena provo a dare due coordinate per spostarmi crasha tutto.
« Ultima modifica: 10 Aprile 2012, 13:07:53 CEST da nil85x »