Pergunta

No Android 1.0 havia um namespace com.google.googlenav para instruções de direção:
Route - Melhoria Directions Google condução
Mas, na mais recente SDK que foi removido por alguma razão ...
Android: DrivingDirections removido desde API 1.0 - como fazê-lo em 1,5 / 1,6 ? No BlackBerry também há falta de APIs para tais coisas:
como encontrar a rota entre dois locais em Blackberry?

CSIE-tw dá uma solução alternativa (gmaps consulta para arquivo KML e analisá-lo):
Android - direcção de condução (Path Route)
Também Andrea fez uma DrivingDirections ajudante aulas para Android.
Eu escrevi um pequeno ajudante para esta funcionalidade, em J2ME, então eu gostaria de compartilhar minhas amostras no Android e BlackBerry.

Atualizar
Como foi afirmado em observações, não é permitido oficialmente Google Maps API Termos de serviço :

O Google Maps / API do Google Earth Termos de Serviço
Última atualização: 27 mai 2009
...
10. Restrições da licença. Exceto quando expressamente permitido ao abrigo dos Termos, ou a menos que tenha recebido autorização prévia por escrito da Google (ou, conforme o caso, a partir do fornecedor de um determinado Conteúdo), licenças do Google acima estão sujeitos a sua adesão a todas as restrições abaixo. Exceto quando expressamente autorizado na Seção 7 ou a Documentação Mapas APIs, você não deve (nem poderá permitir a mais ninguém):
...
10,9 usar o Serviço ou Conteúdo com qualquer produto, sistemas ou aplicações para ou em conexão com:
(A) a navegação ou a rota de orientação em tempo real, incluindo, mas não limitado a turn-by-turn orientação de rota que é sincronizada com a posição do dispositivo ativado por sensor do usuário;

e pode ser desativada para certas aplicações (de alguma forma, pelo menos no Android) ... De Geocode raspagem no .NET conversa :

Isso não é permitido pelos termos da API de uso. Você não deve raspar Google Maps para gerar geocodes. Vamos bloquear serviços que fazem consultas automáticas de nossos servidores.

Bret Taylor
Gerente de Produto, Google Maps

ficaria grato por todas as alternativas e / ou sugestões!
Obrigado!

Foi útil?

Solução

Provedor J2ME Mapa Route

maps.google.com tem um serviço de navegação que pode fornecer-lhe as informações de rota em formato KML .

Para obter o arquivo kml precisamos formar url com locais de partida e 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();
}

Em seguida, você precisará xml parse (implementado com SAXParser) e estruturas de dados de preenchimento:

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

rede é implementado de maneiras diferentes em Android e Blackberry, então você terá que primeiro url forma:

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

, em seguida, criar uma conexão com este url e obter InputStream.
Em seguida, passe esta InputStream e obter estrutura de dados analisado:

 public static Road getRoute(InputStream is) 

O código fonte 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;
    }
}

Veja código completo sobre J2MEMapRouteBlackBerryEx em Google Code

Android

Android G1 imagem

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

Veja código completo sobre J2MEMapRouteAndroidEx em Google Code

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top