J2ME / Android / Blackberry - Wegbeschreibungen, Route zwischen zwei Standorten
-
19-09-2019 - |
Frage
Auf Android 1.0 gab es einen com.google.googlenav Namespace für Anfahrts:
Route - Verbesserte Google Directions
Fahr
Aber in neuerer SDK wurde es aus irgendeinem Grunde entfernt ...
Android: DrivingDirections entfernt, da API 1.0 - wie es zu tun in 1.5 / 1.6
Auf Blackberry gibt es auch Mangel an APIs für solche Sachen:
wie die Strecke zwischen zwei Orten in Blackberry zu finden?
CSIE-tw gibt eine Abhilfe (Abfrage gmaps für KML-Datei und analysieren es):
Android - Fahrtrichtung (Route-Pfad)
Auch Andrea einen DrivingDirections Helferklassen für Android.
Ich schrieb einen kleinen Helfer für diese Funktionalität, in J2ME, so mag ich meine Proben auf Android und Blackberry teilen.
UPDATE
Wie es in den Kommentaren erwähnt wurde, ist es nicht offiziell Google Maps APIs Nutzungsbedingungen erlaubt :
Google Maps / Google Earth-APIs Nutzungsbedingungen
Zuletzt aktualisiert am: 27. Mai 2009
...
10. Lizenzbeschränkungen. Soweit nicht ausdrücklich unter den Nutzungsbedingungen gestattet, oder, wenn Sie die vorherigen schriftliche Genehmigung von Google erhalten haben (oder, soweit zutreffend, von dem Anbieter von bestimmtem Inhalt), Googles oben Lizenzen unterliegen Ihre Einhaltung aller folgenden Einschränkungen. Außer wie in Abschnitt 7 oder Maps-APIs-Dokumentation ausdrücklich erlaubt, müssen Sie nicht (noch dürfen erlauben Sie jemand anderes):
...
10.9 verwenden den Dienst oder Inhalt mit Produkten, Systemen oder Anwendungen für oder in Verbindung mit:
(A) Echtzeit-Navigation oder Routenführung, einschließlich, aber nicht beschränkt auf Turn-by-Turn-Routenführung, die auf die Position eines Benutzers Sensor-fähiges Geräts synchronisiert ist;
und kann für bestimmte Anwendungen (irgendwie, zumindest auf Android) ... Von Geocode in .NET Gespräch Schaben:
Dies ist nicht durch die API Nutzungsbedingungen erlaubt. Sie sollten nicht kratzen Google Maps Geocodes zu erzeugen. Wir werden Dienste blockieren, tun automatisierte Abfragen unserer Server.
Bret Taylor
Product Manager, Google Maps
Wäre dankbar für alle Alternativen und / oder Anregungen!
Dank!
Lösung
J2ME Karte Routen Provider
maps.google.com hat einen Navigationsdienst, die Sie Routeninformationen zur Verfügung stellen kann in 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;
}
}
Siehe vollständigen Code auf J2MEMapRouteBlackBerryEx auf 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;
}
}
Siehe vollständigen Code auf J2MEMapRouteAndroidEx auf Google Code