osmdroid基础教程(1)

开端

本文皆在指引大家在自己的项目里嵌入OpenStreetMap,并可以在地图上添加覆盖物、折线等常用地图功能。


1.1 API和文档

相关网站:

osm android版 : https://code.google.com/p/osmdroid/

osm android官方简介:http://wiki.openstreetmap.org/wiki/Android#OpenStreetMap_editing_features

osm 官方入口:http://wiki.openstreetmap.org/wiki/Main_Page

wiki 开发FAQ:http://wiki.openstreetmap.org/wiki/Developer_FAQ#Do_you_have_an_API.3F

osm tracker 简介:https://code.google.com/p/osmtracker-android/


1.2osmroid-android-3.0.10.jar

从openstreetmap android版官方网站下载jar包:osmroid-android-3.0.10.jar和slf4j-api-1.7.2.jar包,前者是地图库后者是个输出日志库,因为地图类库里使用到了,所以两者缺一不可。

osmdroid基础教程(1)_第1张图片

1.3地图实例化

layout.xml:

[html]  view plain copy
  1. xml version="1.0" encoding="UTF-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent" >  
  5.   
  6.     <org.osmdroid.views.MapView  
  7.         android:id="@+id/myOSMmapview"  
  8.         android:layout_width="match_parent"  
  9.         android:layout_height="match_parent"  
  10.         tilesource="MapquestOSM"  
  11.         android:clickable="true">  
  12.     org.osmdroid.views.MapView>  
  13.   
  14. RelativeLayout>  
osm.java:

[java]  view plain copy
  1. 示例代码:  
  2.         mMapView = (MapView) findViewById(R.id.myOSMmapview);  
  3.         mController = mMapView.getController();  
  4.         //ResourceProxy init  
  5.         mResourceProxy = new DefaultResourceProxyImpl(this);  
  6.         mMapView.setTileSource(TileSourceFactory.MAPNIK);  
  7.         mMapView.setBuiltInZoomControls(true);  
  8.         mMapView.setMultiTouchControls(true);  
  9.         //定位当前位置,北京市西长安街复兴路  
  10.         GeoPoint center = new GeoPoint(39.901873116.326655);  
  11.         mController.setCenter(center);  
  12.         mController.setZoom(8);  
效果图:

osmdroid基础教程(1)_第2张图片
初始化后,地图可以正常显示,双指可以缩放地图比例尺

1.4 ItemizedOverlayWithFocus(overlay)

添加一个ItemizedOerlayWithFoucs类型的overlay
[java]  view plain copy
  1. 示例代码:  
  2.         //添加自定义image Overlay  
  3.         Drawable drawable = this.getResources().getDrawable(  
  4.                 R.drawable.marker_gpsvalid);  
  5.         ArrayList items = new ArrayList();  
  6.         OverlayItem item = new OverlayItem("~title~""I`m a marker,a subtitile", center);  
  7.         item.setMarker(drawable);  
  8.         items.add(item);  
  9.           
  10.         this.mLocationOverlay = new ItemizedOverlayWithFocus(    
  11.                 items,    
  12.                 new ItemizedIconOverlay.OnItemGestureListener() {    
  13.                     @Override    
  14.                     public boolean onItemSingleTapUp(final int index,    
  15.                             final OverlayItem item) {    
  16.                         return true;    
  17.                     }    
  18.   
  19.                     @Override    
  20.                     public boolean onItemLongPress(final int index,    
  21.                             final OverlayItem item) {    
  22.                         return false;    
  23.                     }    
  24.                 }, mResourceProxy);    
  25.         this.mLocationOverlay.setFocusItemsOnTap(true);  
  26.         this.mLocationOverlay.setFocusedItem(0);    
  27.         mMapView.getOverlays().add(mLocationOverlay);     
效果图:
osmdroid基础教程(1)_第3张图片

可以添加自定义的Overlay,设置image。但是如代码中所示,实现了OnItemGestureListener接口,并返回true。

1.5 自定义Overlay

[java]  view plain copy
  1. 示例代码:  
  2.         //自定义marker图层  
  3.         ArrayList markers = new ArrayList();  
  4.         OverlayItem one = new OverlayItem("~one~""custom marker", gp1);  
  5.         one.setMarker(drawable);  
  6.         markers.add(one);  
  7.         CustomMarker marker = new CustomMarker(markers, gestureListener, mResourceProxy);  
  8.         mMapView.getOverlays().add(marker);  
  9.         mController.setCenter(gp1);  
  10.         mMapView.invalidate();  
  11. 自定义Overlay:  
  12.     /** 
  13.      * 自定义Marker 
  14.      * @author Administrator 
  15.      * 
  16.      */  
  17.     public class CustomMarker  extends ItemizedOverlayWithFocus implements org.osmdroid.views.overlay.ItemizedIconOverlay.OnItemGestureListener{  
  18.         public CustomMarker(  
  19.                 List aList,  
  20.                 org.osmdroid.views.overlay.ItemizedIconOverlay.OnItemGestureListener aOnItemTapListener,  
  21.                 ResourceProxy pResourceProxy) {  
  22.             super(aList, aOnItemTapListener, pResourceProxy);  
  23.         }  
  24.           
  25.         @Override  
  26.         public void addItem(int location, OverlayItem item) {  
  27.             super.addItem(location, item);  
  28.         }  
  29.         @Override  
  30.         protected boolean onTap(int index) {  
  31.             return super.onTap(index);  
  32.         }  
  33.         @Override  
  34.         public boolean onSingleTapUp(MotionEvent event, MapView mapView) {  
  35.             return super.onSingleTapUp(event, mapView);  
  36.         }  
  37.         @Override  
  38.         public int size() {  
  39.             return super.size();  
  40.         }  
  41.   
  42.         @Override  
  43.         public boolean onItemLongPress(int arg0, OverlayItem arg1) {  
  44.             return true;  
  45.         }  
  46.   
  47.         @Override  
  48.         public boolean onItemSingleTapUp(int arg0, OverlayItem arg1) {  
  49.             return true;  
  50.         }  
  51.           
  52.     }  

效果图:

osmdroid基础教程(1)_第4张图片

1.6 MinimapOverlay(小地图)

[java]  view plain copy
  1. 示例代码:  
  2.                    //右下角小地图Overlay  
  3.                    MinimapOverlayoverlay = new MinimapOverlay(this,  
  4.                                      mMapView.getTileRequestCompleteHandler());  
  5.                    mMapView.getOverlays().add(overlay);  
效果图:

osmdroid基础教程(1)_第5张图片

1.7PathOverlay(画线)和SimpleLocationOverlay

[java]  view plain copy
  1. 示例代码:  
  2.         //PathOverlay 路线Overlay  
  3.         GeoPoint gp1 = new GeoPoint(40.067225116.369758);  
  4.         GeoPoint gp2 = new GeoPoint(40.064808116.346362);  
  5.         GeoPoint gp3 = new GeoPoint(40.058669116.336648);  
  6.         GeoPoint gp4 = new GeoPoint(40.036685116.343619);  
  7.         GeoPoint gp5 = new GeoPoint(40.036368116.327699);  
  8.           
  9.         PathOverlay line = new PathOverlay(Color.BLUE, this);  
  10.         line.addPoint(gp1);  
  11.         line.addPoint(gp2);  
  12.         line.addPoint(gp3);  
  13.         line.addPoint(gp4);  
  14.         line.addPoint(gp5);  
  15.         mMapView.getOverlays().add(line);  
  16.         mController.setCenter(gp1);  
  17.         //Simple图层  
  18.         SimpleLocationOverlay simpleLocation = new SimpleLocationOverlay(this);  
  19.         simpleLocation.setEnabled(true);  
  20.         simpleLocation.setLocation(gp5);  
  21.         mMapView.getOverlays().add(simpleLocation);  

效果图:

osmdroid基础教程(1)_第6张图片

黄色的小人便是simpleLocationOverlay


转载自http://blog.csdn.net/mad1989/article/details/9733985

你可能感兴趣的:(GIS)