Domanda

Su Android 1.0 vi era uno spazio dei nomi com.google.googlenav per le indicazioni stradali:
percorso - Migliorata Indicazioni Google Guidare Ma nei nuovi SDK è stato rimosso da un certo motivo ...
Android:? DrivingDirections rimossi dal API 1.0 - come farlo a 1.5 / 1.6 Su BlackBerry v'è anche la mancanza di API per roba del genere:
come trovare il percorso tra due luoghi in Blackberry?

CSIE-TW dà una soluzione alternativa (Gmaps di query per il file KML e analizzarlo):
Android - direzione di guida (percorso itinerario)
Anche Andrea fatto un noreferrer DrivingDirections helper per Android.
Ho scritto un po 'di aiuto per questa funzionalità, in J2ME, quindi vorrei condividere i miei campioni su Android e BlackBerry.

Aggiorna
Come è stato affermato nei commenti, non è permesso ufficialmente Google Maps API Termini di servizio :

  

Google Maps / Google Earth API Termini di servizio
  Ultimo aggiornamento: May 27, 2009
  ...
  10. Limitazioni di licenza. Ad eccezione di quanto espressamente consentito ai sensi dei Termini, o se non previa autorizzazione scritta da parte di Google (o, a seconda dei casi, dal fornitore di particolari contenuti), le licenze di Google sopra sono soggette a vostra adesione a tutte le restrizioni di seguito. Ad eccezione di quanto consentito in modo esplicito nella casella 7 o documentazione Maps API, non si deve (né può permettere a nessuno di):
  ...
  10.9 utilizzare il Servizio o contenuti con eventuali prodotti, sistemi o applicazioni per o in connessione con:
  (A) navigazione in tempo reale o orientamento, incluso ma non limitato a percorso passo-guida stradale che è sincronizzato alla posizione del dispositivo sensore abilitato di un utente;

e può essere disattivato per alcune applicazioni (in qualche modo, almeno su Android) ... Da Geocode raschiare in .NET conversazione :

  

Ciò non è consentito dai termini API di utilizzo. Non si deve raschiare   Google Maps per generare codici geografici. Noi bloccare i servizi che fanno   query automatizzate dei nostri server.

     

Bret Taylor
  Product Manager, Google Maps

Sarei grato per eventuali alternative e / o suggerimenti!
Grazie!

È stato utile?

Soluzione

Provider J2ME Mappa Itinerario

maps.google.com dispone di un servizio di navigazione che può fornire informazioni sul percorso in KML formato.

Per ottenere il file kml abbiamo bisogno di formare URL con partenza ed arrivo posizioni:

public static String getUrl(double fromLat, double fromLon,
                            double toLat, double toLon) {// connect to map web service
    StringBuffer urlString = new StringBuffer();
    urlString.append("http://maps.google.com/maps?f=d&hl=en");
    urlString.append("&saddr=");// from
    urlString.append(Double.toString(fromLat));
    urlString.append(",");
    urlString.append(Double.toString(fromLon));
    urlString.append("&daddr=");// to
    urlString.append(Double.toString(toLat));
    urlString.append(",");
    urlString.append(Double.toString(toLon));
    urlString.append("&ie=UTF8&0&om=0&output=kml");
    return urlString.toString();
}

Successivamente sarà necessario analizzare XML (implementato con SAXParser) e riempire strutture di dati:

public class Point {
    String mName;
    String mDescription;
    String mIconUrl;
    double mLatitude;
    double mLongitude;
}

public class Road {
    public String mName;
    public String mDescription;
    public int mColor;
    public int mWidth;
    public double[][] mRoute = new double[][] {};
    public Point[] mPoints = new Point[] {};
}

connessione di rete viene attuata in modi diversi su Android e Blackberry, in modo da avere per prima forma url:

 public static String getUrl(double fromLat, double fromLon,
     double toLat, double toLon)

quindi creare il collegamento con questo URL e ottenere InputStream.
Poi passare questo InputStream e ottenere struttura di dati analizzata:

 public static Road getRoute(InputStream is) 

Il codice sorgente completo RoadProvider.java

BlackBerry

class MapPathScreen extends MainScreen {
    MapControl map;
    Road mRoad = new Road();
    public MapPathScreen() {
        double fromLat = 49.85, fromLon = 24.016667;
        double toLat = 50.45, toLon = 30.523333;
        String url = RoadProvider.getUrl(fromLat, fromLon, toLat, toLon);
        InputStream is = getConnection(url);
        mRoad = RoadProvider.getRoute(is);
        map = new MapControl();
        add(new LabelField(mRoad.mName));
        add(new LabelField(mRoad.mDescription));
        add(map);
    }
    protected void onUiEngineAttached(boolean attached) {
        super.onUiEngineAttached(attached);
        if (attached) {
            map.drawPath(mRoad);
        }
    }
    private InputStream getConnection(String url) {
        HttpConnection urlConnection = null;
        InputStream is = null;
        try {
            urlConnection = (HttpConnection) Connector.open(url);
            urlConnection.setRequestMethod("GET");
            is = urlConnection.openInputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return is;
    }
}

Vedere tutta codice J2MEMapRouteBlackBerryEx su Google Code

Android

Android G1 screenshot

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 = 49.85, fromLon = 24.016667;
                double toLat = 50.45, toLon = 30.523333;
                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;
    }
}

Vedere tutta codice J2MEMapRouteAndroidEx su Google Code

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top