SORU
7 Ocak 2010, PERŞEMBE


J2ME/Android/BlackBerry - yol tarifi, yol iki yer arasında

Android 1.0 üzerinde bir com vardı.google.sürüş için googlenav ad tarifi:
Route - Improved Google Driving Directions
Ama daha yeni SDK nedense kaldırıldı
Android: DrivingDirections removed since API 1.0 - how to do it in 1.5/1.6? BlackBerry de bu tür şeyler için API eksikliği var:
how to find the route between two places in Blackberry?

csie-tw geçici bir çözüm verir (kml için sorgu e ve dosya ayrıştırma):
Android - Driving Direction (Route Path)
Ayrıca Andrea Android için DrivingDirections helper classes.
İşlevselliği, Android ve BlackBerry örneklerimi paylaşmak istiyorum bu yüzden j2me, bu küçük bir yardımcı yazmıştım.

GÜNCELLEME
Açıklamalarda belirttiği gibi, resmi olarak Google Maps APIs Terms of Service yasak:

Google Earth, Google Haritalar Hizmeti Açısından API
Son güncelleme: 27 Mayıs 2009
...
10. Lisans Kısıtlamaları. Dışında kurulmasına izin Şartları altında, ya da sürece almış olduğunuz yazılı izni Google (ya da, uygulanabilir olarak, hizmet sağlayıcı özel İçerik), Google'ın lisans üstü konusu olan bağlılığınızın tüm bu kısıtlamalar altında. Açıkça veya Haritalar API Belgelerine Bölüm 7, olmamalıdır izin verilen (ne de bir başkası için izin verir) hariç:
...
10.9 herhangi bir ürün, Hizmet ya da İçeriği, sistemleri, ya da sizinle bağlantı için: uygulamalar kullanın
(a) gerçek zamanlı navigasyon veya yol Rehberi de dahil ancak bunlarla sınırlı olmamak-by-turn turn kullanıcının sensör aygıtının konumunu eşzamanlı rota yönlendirme için;

ve devre dışı bırakılabilir Geocode scraping in .NET conversation bazı uygulamalar (her nasılsa, en azından Android) için...:

Bu kullanım API Şartlar tarafından izin verilmiyor. Kazımak gerekir Haritalar geocodes oluşturmak için Google. Bu hizmetleri engelleyeceğiz. bizim otomatik sunucuları sorgular.

Bret Taylor
Ürün Yöneticisi, Google Haritalar

Herhangi bir alternatif ve/veya öneriler için minnettar olacaktır!
Teşekkürler!

CEVAP
7 Ocak 2010, PERŞEMBE


J2ME Rota Sağlayıcı Göster

maps.google.com sana KML biçiminde rota bilgileri sağlayan bir navigasyon hizmeti var.

Kml almak için başlangıç ve varış yerleri ile url oluşturmak için ihtiyacımız olan dosya:

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

Bir sonraki xml (SAXParser ile uygulanan) ayrıştırma ve veri yapıları doldurmak için ihtiyacınız olacak:

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

Ağ bağlantısı Android ve Blackberry üzerinde farklı şekillerde uygulanır, ilk url oluşturmak için:

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

daha sonra bu url ile bağlantı oluşturmak ve İnputStream.
O zaman bu İnputStream geçmek ve ayrıştırılmış veri yapısı:

 public static Road getRoute(InputStream is) 

Tam kaynak kodu 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;
 }    
}

Google Code J2MEMapRouteBlackBerryEx tam kod bakın

Android

Android G1 screenshot

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

Google Code J2MEMapRouteAndroidEx tam kod bakın

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Distractify

    Distractify

    1 Aralık 2011
  • Edgar flores

    Edgar flores

    7 HAZİRAN 2006
  • World Science Festival

    World Scienc

    1 Mayıs 2008