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

來源:互聯網
上載者:User

關於OpenStreetMap的介紹,國內還是很少,csdn上面有一篇,寫的不錯,我也就不再做重複的事情了。

這裡貼出連結地址:http://blog.csdn.net/mad1989/article/details/9733985

下面,開始介紹一下osmbonuspack導航。

注意,如果要做商業應用,請先仔細閱讀許可文檔,以免發生不必要的麻煩。

#0,首先,先去mapquest上面註冊一個開發人員帳號!

強烈推薦大家先做這一步,從註冊到申請到的App Key可以使用,要等待1小時左右。所以,先註冊了吧。

註冊的網址:http://developer.mapquest.com/

註冊好之後,你會得到一個類似於“Fmjtd%7Cluubn10zn9%2C8s%3Do5-90rnq6”這樣的App key。也就是API KEY。

#1,顯示地圖。

這個,按照http://blog.csdn.net/mad1989/article/details/9733985來做就可以了。其中,我們只需要做完“1.3地圖執行個體化”即可。

這個步奏不難,只是下載的東西比較多,大家慢慢來就可以了。

#2,下載osmbonuspack。

這裡的下載方式和我們所常見的不太一樣,你需要通過svn來下載。

下面是svn的代碼:

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-mapviewBoundingBoxE6 areaLimit = new BoundingBoxE6(22.499, 113.698, 22.123,113.363);mMapView.setScrollableAreaLimit(areaLimit);mZoomLevel = mMapView.getZoomLevel();new Thread(new Runnable() {@Overridepublic 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 pointRoad 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

問題:

匯入用來導航的OSMBonusPack第三方包時,編譯器出現如下錯誤:

Multiple dex files define Lorg/slf4j/ILoggerFactory

原因:

       這個是由於在來源程式中,需要引用slf4j的jar包,而OSMBonusPack也引用了這個jar包,但是兩個jar包的版本不同導致的。

解決方案:

       將OSMBonusPack中slf4j的jar包刪除,並匯入現在項目中使用的jar包,重新引用,編譯一次即可。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.