Di Android 1.0 ada ruang nama com.google.googlenav untuk petunjuk arah mengemudi:
Rute - Arah Mengemudi Google yang Ditingkatkan
Tetapi di SDK yang lebih baru, itu dihapus karena beberapa alasan ...
Android: DrivingDirections dihapus sejak API 1.0 - bagaimana melakukannya di 1.5 / 1.6?
Di BlackBerry juga ada kekurangan API untuk hal-hal seperti:
bagaimana cara menemukan rute antara dua tempat di Blackberry?
csie-tw memberikan solusi (query gmaps untuk file kml dan parse):
Android - Driving Direction (Route Path)
Juga Andrea membuat kelas pembantu DrivingDirections untuk Android.
Saya menulis sedikit bantuan untuk fungsi ini, di j2me, jadi saya ingin membagikan sampel saya di Android dan BlackBerry.
PERBARUI
Seperti yang dinyatakan dalam komentar, ini tidak diizinkan secara resmi. Persyaratan Layanan Google Maps API :
Persyaratan Layanan Google Maps / Google Earth API
Terakhir diperbarui: 27 Mei 2009
...
10. Pembatasan Lisensi. Kecuali jika diizinkan secara tersurat menurut Persyaratan, atau kecuali Anda telah menerima otorisasi tertulis sebelumnya dari Google (atau, sebagaimana berlaku, dari penyedia Konten tertentu), lisensi Google di atas tunduk pada kepatuhan Anda terhadap semua pembatasan di bawah ini. Kecuali jika diizinkan secara eksplisit dalam Bagian 7 atau Maps APIs Documentation, Anda tidak boleh (Anda juga tidak boleh mengizinkan orang lain untuk):
...
10.9 menggunakan Layanan atau Konten dengan produk, sistem, atau aplikasi apa pun untuk atau sehubungan dengan:
(a) panduan navigasi atau rute waktu nyata, termasuk namun tidak terbatas pada panduan rute belokan demi belokan yang disinkronkan dengan posisi perangkat pengguna yang mengaktifkan sensor;
dan mungkin dinonaktifkan untuk aplikasi tertentu (entah bagaimana, setidaknya di Android) ... Dari pengikisan Geocode dalam percakapan .NET :
Ini tidak diperbolehkan oleh persyaratan penggunaan API. Anda tidak boleh menggores Google Maps untuk menghasilkan geocode. Kami akan memblokir layanan yang melakukan kueri otomatis dari server kami.
Manajer Produk Bret Taylor , Google Maps
Akan berterima kasih atas alternatif dan / atau saran!
Terima kasih!
sumber
Jawaban:
Penyedia Rute Peta J2ME
maps.google.com memiliki layanan navigasi yang dapat memberi Anda informasi rute dalam format KML .
Untuk mendapatkan file kml kita perlu membentuk url dengan lokasi awal dan tujuan:
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(); }
Selanjutnya Anda perlu mengurai xml (diimplementasikan dengan SAXParser) dan mengisi struktur data:
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[] {}; }
Koneksi jaringan diimplementasikan dengan cara yang berbeda di Android dan Blackberry, jadi Anda harus terlebih dahulu membentuk url:
public static String getUrl(double fromLat, double fromLon, double toLat, double toLon)
lalu buat koneksi dengan url ini dan dapatkan InputStream.
Kemudian teruskan InputStream ini dan dapatkan struktur data yang diurai:
public static Road getRoute(InputStream is)
Kode sumber lengkap 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; } }
Lihat kode lengkap di J2MEMapRouteBlackBerryEx di Google Code
Android
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; } }
Lihat kode lengkap di J2MEMapRouteAndroidEx di Google Code
sumber