J2ME / Android / BlackBerry-wskazówki dojazdu, trasa między dwoma lokalizacjami
Na Androidzie 1.0 był com.google.przestrzeń nazw googlenav dla wskazówek dojazdu:
trasa-ulepszone wskazówki dojazdu w Google
Ale w nowszym SDK został usunięty z jakiegoś powodu...
Android: DrivingDirections usunięte od API 1.0 - Jak to zrobić w 1.5/1.6?
Na BlackBerry też brakuje API do takich rzeczy:
Jak znaleźć trasę między dwoma miejscami w Blackberry?
Csie-tw daje obejście (zapytanie gmaps dla kml file and parse it):
Android - kierunek jazdy (ścieżka trasy)
Ponadto Andrea stworzyła klasy pomocnicze DrivingDirections dla Androida.
Napisałem mały pomocnik dla tej funkcjonalności, w j2me, więc chciałbym podzielić się moimi samplami na Androida i BlackBerry.
UPDATE
Jak stwierdzono w komentarzach, nie jest oficjalnie dozwolone Google Maps API Warunki korzystania z usługi :
Google Maps/Google Earth API Warunki Serwis
Ostatnia aktualizacja: 27 maja 2009
...
10. Ograniczenia Licencji. Z wyjątkiem przypadków wyraźnie dozwolonych w Warunkach lub o ile Użytkownik nie otrzymał uprzedniej pisemnej zgody od Google (lub, w stosownych przypadkach, od dostawcy określonych treści), Powyższe licencje Google podlegają przestrzeganiu przez Użytkownika wszystkich poniższych ograniczeń. Z wyjątkiem przypadków wyraźnie dozwolonych w Sekcji 7 lub dokumentacji API Maps, użytkownik nie może (ani nie może na to pozwolić nikomu innemu):
...
10.9 korzystać z usługi lub treści z produktami, systemami lub aplikacjami dla lub w związku z:
(a) nawigacja w czasie rzeczywistym lub prowadzenie trasy, w tym, ale nie wyłącznie, prowadzenie trasy krok po kroku, które jest zsynchronizowane z pozycją urządzenia obsługującego czujnik użytkownika; [11]}
I może być wyłączony dla niektórych aplikacji (jakoś, przynajmniej na Androidzie)... Z skrobanie Geokodów w rozmowie z. NET :
Nie jest to dozwolone w Warunkach korzystania z API. Nie należy skrobać Google Maps do generowania geokodów. Zablokujemy usługi, które wykonują zautomatyzowane zapytania naszych serwerów.
Bret Taylor
Product Manager, Google Maps
Byłabym wdzięczna za wszelkie alternatywy i / lub sugestie!
Dzięki!
1 answers
J2ME Map Route Provider
Maps.google.com posiada usługę nawigacyjną, która może dostarczyć informacje o trasie w formacie KML .
Aby uzyskać plik kml musimy utworzyć adres url z lokalizacją początkową i docelową:
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();
}
Następnie będziesz musiał przeanalizować xml (zaimplementowany za pomocą Saxparsera) i wypełnić struktury danych:
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[] {};
}
Połączenie sieciowe jest realizowane na różne sposoby na Androida i Blackberry, więc będziesz musiał najpierw utworzyć url:
public static String getUrl(double fromLat, double fromLon,
double toLat, double toLon)
Następnie Utwórz połączenie z tym adresem url i uzyskaj strumień wejściowy.
Następnie podaj ten strumień wejściowy i uzyskaj przetworzoną strukturę danych:
public static Road getRoute(InputStream is)
Pełny kod źródłowy 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;
}
}
Zobacz pełny kod na J2MEMapRouteBlackBerryEx na 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;
}
}
Zobacz pełny kod na J2MEMapRouteAndroidEx na Google Code
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-24 21:28:17