J2ME / Android / BlackBerry – маршруты проезда, маршрут между двумя точками

На Android 1.0 было пространство имен com.google.googlenav для проезда:
Маршрут – улучшенные направления вождения в Google
Но в новом SDK он был удален по какой-то причине …
Android: DrivingDirections удален с API 1.0 – как это сделать в 1.5 / 1.6? На BlackBerry также отсутствует API для таких вещей:
как найти маршрут между двумя местами в Blackberry?

csie-tw дает обходное решение (запрашивает gmaps для файла kml и анализирует его):
Android – Направление движения (маршрут маршрута)
Кроме того, Андреа создал вспомогательные classы DrivingDirections для Android.
Я написал небольшой помощник для этой функции, в j2me, поэтому я хотел бы поделиться своими примерами на Android и BlackBerry.

ОБНОВИТЬ
Как было указано в комментариях, официально не разрешено использование Условий использования API Карт Google :

Условия использования Google Maps / Google Earth API
Последнее обновление: 27 мая 2009 г.

10. Ограничения лицензии. За исключением случаев, когда это явно разрешено в соответствии с Условиями или если вы не получили предварительное письменное разрешение от Google (или, если применимо, от поставщика конкретного Контента), вышеупомянутые лицензии Google подчиняются всем вашим ограничениям ниже. За исключением случаев, явно разрешенных в Разделе 7 или Документах API Карт, вы не должны (и не разрешаете кому-либо еще):

10.9 используйте Службу или Контент с любыми продуктами, системами или приложениями для или в связи с:
(a) навигацию в режиме реального времени или руководство по маршруту, включая, но не ограничиваясь, пошаговое руководство по маршруту, которое синхронизируется с положением устройства с сенсорным управлением пользователя;

и может быть отключен для определенных приложений (каким-то образом, по крайней мере, на Android) … Из скрепок Geocode в .NET-чате :

Это не допускается условиями использования API. Вы не должны очищать Карты Google для генерации геокодов. Мы будем блокировать службы, которые выполняют автоматические запросы наших серверов.

Брет Тейлор
Менеджер продуктов, Карты Google

Был бы благодарен за любые альтернативы и / или предложения!
Благодаря!

One Solution collect form web for “J2ME / Android / BlackBerry – маршруты проезда, маршрут между двумя точками”

Поставщик маршрутных карт J2ME

На maps.google.com есть служба навигации, которая может предоставить вам информацию о маршруте в формате KML .

Чтобы получить файл kml, нам нужно сформировать URL-адрес с местами запуска и назначения:

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

Далее вам нужно проанализировать xml (реализованный с помощью SAXParser) и заполнить структуры данных:

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

Сетевое подключение осуществляется по-разному на Android и Blackberry, поэтому вам придется сначала сформировать URL:

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

затем создайте соединение с этим URL-адресом и получите InputStream.
Затем передайте этот InputStream и получите анализируемую структуру данных:

  public static Road getRoute(InputStream is) 

Полный исходный код RoadProvider.java

BlackBerry

Мертвая ссылка – Скриншот BlackBerry Storm

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

Посмотреть полный код на J2MEMapRouteBlackBerryEx в Google Code

Android

Снимок экрана Android G1

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

Посмотреть полный код на J2MEMapRouteAndroidEx в Google Code

Interesting Posts

Предел изменения для слишком большого размера строки Mysql

Алгоритм: эффективный способ удаления повторяющихся целых чисел из массива

Windows 7 любит крушить меня каждую неделю

Как быстро включить и отключить Aero в Windows 7?

Как визуализировать шрифты в Windows 8, как в XP?

Как я могу поместить ListView в ScrollView без его свертывания?

Что делать с резервными копиями в Windows 10

Автоматический вход root в Debian 6.0 без GUI (xserver)

Почему «source <(cmd)» работает, но не «$ (cmd)»

Как я могу использовать / создать динамический шаблон для компиляции динамического компонента с угловым 2.0?

Преобразование AVI в H.264, который работает внутри тега видео HTML5

Растяните и масштабируйте изображение CSS в фоновом режиме – только с CSS

Печать экрана экрана Windows на Mac

Есть ли способ включить «божественный режим» в Windows 8, как в Windows 7?

В чем разница между сетью NAT / Bridged / Host-Only?

Давайте будем гением компьютера.