В Android 1.0 было пространство имен com.google.googlenav для
маршрутов движения: Маршрут - Улучшенные маршруты проезда Google
Но в новом SDK оно было по какой-то причине удалено ...
Android: DrivingDirections удалено с API 1.0 - как это сделать в 1.5 / 1.6?
На BlackBerry также нет API для таких вещей:
как найти маршрут между двумя местами в Blackberry?
ЭВКп-ТВт дает обходной путь (GMaps запроса для KML файла и разобрать его):
Android - направление движения (Route Path)
Также Андреа сделал DrivingDirections вспомогательных классов для Android.
Я написал небольшой помощник для этой функции в j2me, поэтому я хотел бы поделиться своими примерами на Android и BlackBerry.
ОБНОВЛЕНИЕ
Как было сказано в комментариях, это официально не разрешено Условиями использования API Карт Google :
Условия использования API Карт Google / Google Планета Земля
Последнее обновление: 27 мая 2009 г.
...
10. Ограничения лицензии. За исключением случаев, когда это прямо разрешено Условиями, или если вы не получили предварительного письменного разрешения от Google (или, если применимо, от поставщика определенного Контента), вышеупомянутые лицензии Google регулируются вашим соблюдением всех перечисленных ниже ограничений. За исключением случаев, явно разрешенных в Разделе 7 или Документации по API Карт, вы не должны (и не можете разрешать кому-либо еще):
...
10.9 использовать Сервис или Контент с любыми продуктами, системами или приложениями для или в связи с:
(a) навигация в реальном времени или руководство по маршруту, включая, помимо прочего, пошаговое руководство по маршруту, которое синхронизируется с положением сенсорного устройства пользователя;
и может быть отключен для определенных приложений (как-то, по крайней мере, на Android) ... Из парсинга Geocode в разговоре .NET :
Это не допускается условиями использования API. Вы не должны очищать Карты Google для создания геокодов. Мы заблокируем службы, которые выполняют автоматические запросы к нашим серверам.
Брет Тейлор,
менеджер по продуктам, Карты Google
Буду признателен за любые альтернативы и / или предложения!
Благодарность!
источник
Ответы:
Поставщик маршрутов карты 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
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
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; } }
См. Полный код J2MEMapRouteAndroidEx в Google Code
источник