Pregunta

En Android 1.0 no era un espacio de nombres para las direcciones de conducción com.google.googlenav:
Ruta - Mejora de Google para llegar al
Pero en nuevos SDK que fue removido por alguna razón ...
Android:? DrivingDirections removidos desde API 1.0 - cómo hacerlo en 1.5 / 1.6 En BlackBerry también hay falta de APIs para tales cosas:
cómo encontrar la ruta entre dos lugares en Blackberry?

CSIE-tw da una solución (gmaps de consulta para el archivo KML y analizarlo):
Android - dirección de la marcha (ruta Path)
También Andrea hizo un noreferrer DrivingDirections ayudante para Android.
Escribí un pequeño ayudante para esta funcionalidad, en J2ME, así que me gustaría compartir mis muestras en Android y BlackBerry.

Actualizar
Como se dijo en los comentarios, no está permitido oficialmente API de Google Maps Condiciones del servicio :

  

Google Maps / Google Earth API © Derechos de
  Última actualización: 27 de mayo de 2009
  ...
  10. Restricciones de la licencia. Con excepción de lo expresamente permitido en virtud de las Condiciones, o menos que haya recibido la autorización previa por escrito de Google (o, en su caso, desde el proveedor de contenido particular), licencias de Google anteriormente están sujetos a su adhesión a todas las restricciones siguientes. Salvo que se permita explícitamente en la Sección 7 o la documentación API de Google Maps, no se debe (ni puede permitir a otros):
  ...
  10.9 utilizar el Servicio o Contenido con productos, sistemas o aplicaciones para o relacionados con:
  (A) navegación en tiempo real o guía, incluyendo, pero no limitado ruta para convertir-by-turn guía de ruta que se sincroniza con la posición del dispositivo sensor habilitado de un usuario;

y puede ser inhabilitado para ciertas aplicaciones (de alguna manera, al menos en Android) ... De Geocode raspando en .NET conversación :

  

Esto no está permitido por los términos de uso de la API. No se debe raspar   Google Maps para generar códigos geográficos. Vamos a bloquear los servicios que hacen   consultas automatizadas de nuestros servidores.

     

Bret Taylor
  Responsable de producto de Google Maps

Agradecería cualquier alternativa y / o sugerencias!
Gracias!

¿Fue útil?

Solución

J2ME Mapa Ruta Proveedor

maps.google.com tiene un servicio de navegación que le puede proporcionar información de la ruta en KML formato.

Para obtener el archivo KML que necesitamos para formar url con las ubicaciones de partida y de destino:

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();
}

A continuación, tendrá que analizar XML (implementado con SAXParser) y llenar las estructuras de datos:

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[] {};
}

Conexión de red está implementado de diferentes maneras en Android y Blackberry, por lo que tendrá a primera forma url:

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

a continuación, crear una conexión con esta url y obtener InputStream.
A continuación, pasar este InputStream y obtener la estructura de datos y procesado:

 public static Road getRoute(InputStream is) 

El código fuente 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;
    }
}

Ver código completo en J2MEMapRouteBlackBerryEx en google Code

Android

Android G1 pantalla

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;
    }
}

Ver código completo en J2MEMapRouteAndroidEx en google Code

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top