Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android OpenStreetMap(OSM) 使用 osmbonuspack 進行導航

Android OpenStreetMap(OSM) 使用 osmbonuspack 進行導航

編輯:關於Android編程

#0,首先,先去mapquest上面注冊一個開發者賬號! 強烈推薦大家先做這一步,從注冊到申請到的App Key可以使用,要等待1小時左右。所以,先注冊了吧。     注冊好之後,你會得到一個類似於“Fmjtd%7Cluubn10zn9%2C8s%3Do5-90rnq6”這樣的App key。也就是API KEY。   #1,顯示地圖。 這個,按照http://blog.csdn.net/mad1989/article/details/9733985來做就可以了。其中,我們只需要做完“1.3地圖實例化”即可。   這個步奏不難,只是下載的東西比較多,大家慢慢來就可以了。   #2,下載osmbonuspack。 這裡的下載方式和我們所常見的不太一樣,你需要通過svn來下載。   下面是svn的代碼:   1 svn checkout http://osmbonuspack.googlecode.com/svn/trunk/ osmbonuspack-read-only 下載好後,文件夾下會有如下的三個項目。       #3,導入到eclipse中。 如何導入不講了,但是請注意,這裡只導入OSMBounsPack項目,其他項目不是必須要導入的。   還有,請注意勾選這個選項,因為這個項目是一個Android Library,不在同一級目錄下,引用時會出錯。   #4,將osmbonuspack引用到你的項目中。 這裡的引用很簡單,在你的項目上點擊右鍵,選擇Properties,在左邊的欄裡面選擇Android,然後在右邊的Library下,添加OSMBonusPack。       #5,寫代碼,實現導航。 這裡就很簡單了。由於是簡單的例子,這裡給大家看一下如何調用就可以了。   首先,onCreate方法的代碼:     super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         activity = this;         mMapView = (MapView) findViewById(R.id.mapview);         mController = mMapView.getController();         // ResourceProxy init         // mResourceProxy = new DefaultResourceProxyImpl(this);         mMapView.setTileSource(TileSourceFactory.MAPNIK);         mMapView.setBuiltInZoomControls(true);         mMapView.setMultiTouchControls(true);         // 定位當前位置,珠海         GeoPoint center = new GeoPoint(22.288874, 113.576873);         mController.setZoom(14); // 先設置縮放,後設置中心點,不然會出現偏差。         mController.setCenter(center);         mMapView.setMinZoomLevel(14);         mMapView.setMaxZoomLevel(17);         // 添加標記         setBickAndParkLocation();         mMapView.setKeepScreenOn(true);         // 右下角小地圖Overlay         // MinimapOverlay MinimapOverlayoverlay = new MinimapOverlay(this,         // mMapView.getTileRequestCompleteHandler());         // mMapView.getOverlays().add(MinimapOverlayoverlay);         // mMapView.getOverlays().remove(0);           // 地圖范圍控制         // http://stackoverflow.com/questions/5403733/restricting-the-area-the-user-can-go-to-on-mapview         BoundingBoxE6 areaLimit = new BoundingBoxE6(22.499, 113.698, 22.123,                 113.363);         mMapView.setScrollableAreaLimit(areaLimit);         mZoomLevel = mMapView.getZoomLevel();           new Thread(new Runnable() {             @Override             public void run() {                 RoadManager roadManager = new MapQuestRoadManager(                         "這裡是#0申請的那個App Key");                 roadManager.addRequestOption("routeType=bicycle");                 Marker startMarker = new Marker(mMapView);                 GeoPoint startPoint = new GeoPoint(22.274, 113.574);                 startMarker.setPosition(startPoint);                 startMarker.setAnchor(Marker.ANCHOR_CENTER, 1.0f);                 // startMarker.setIcon(getResources().getDrawable(R.drawable.ic_launcher));                 mMapView.getOverlays().add(startMarker);                 // mMapView.invalidate();                 startMarker.setTitle("Start point");                   // mMapView.invalidate();                 ArrayList<GeoPoint> waypoints = new ArrayList<GeoPoint>();                 waypoints.add(startPoint);                 waypoints.add(new GeoPoint(22.284, 113.553)); // end point                 Road road = roadManager.getRoad(waypoints);                 Polyline roadOverlay = RoadManager.buildRoadOverlay(road,                         activity);                 mMapView.getOverlays().add(roadOverlay);                 // mMapView.invalidate();                   Drawable nodeIcon = getResources().getDrawable(                         R.drawable.marker_node);                 for (int i = 0; i < road.mNodes.size(); i++) {                     RoadNode node = road.mNodes.get(i);                     Marker nodeMarker = new Marker(mMapView);                     nodeMarker.setPosition(node.mLocation);                     nodeMarker.setIcon(nodeIcon);                     nodeMarker.setTitle("Step " + i);                     mMapView.getOverlays().add(nodeMarker);                 }                   mhandler.obtainMessage(1).sendToTarget();             }         }).start(); 之後,在類中添加Handler:         Handler mhandler = new Handler() {     public void handleMessage(Message msg) {         mMapView.invalidate();     } }; 這裡開線程的原因,是因為網絡操作,不能在主線程中進行。   之後,就可以編譯運行啦。   #6,Unable to execute dex: Multiple dex files define Lorg/slf4j/ILoggerFactory
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved