开端
本文皆在指引大家在自己的项目里嵌入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包,前者是地图库后者是个输出日志库,因为地图类库里使用到了,所以两者缺一不可。
1.3地图实例化
layout.xml:
- <?xml version="1.0" encoding="UTF-8"?>
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent" >
- <org.osmdroid.views.MapView
- android:id="@+id/myOSMmapview"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tilesource="MapquestOSM"
- android:clickable="true">
- </org.osmdroid.views.MapView>
- </RelativeLayout>
- 示例代码:
- mMapView = (MapView) findViewById(R.id.myOSMmapview);
- mController = mMapView.getController();
- //ResourceProxy init
- mResourceProxy = new DefaultResourceProxyImpl(this);
- mMapView.setTileSource(TileSourceFactory.MAPNIK);
- mMapView.setBuiltInZoomControls(true);
- mMapView.setMultiTouchControls(true);
- //定位当前位置,北京市西长安街复兴路
- GeoPoint center = new GeoPoint(39.901873, 116.326655);
- mController.setCenter(center);
- mController.setZoom(8);
初始化后,地图可以正常显示,双指可以缩放地图比例尺
1.4 ItemizedOverlayWithFocus(overlay)
添加一个ItemizedOerlayWithFoucs类型的overlay
- 示例代码:
- //添加自定义image Overlay
- Drawable drawable = this.getResources().getDrawable(
- R.drawable.marker_gpsvalid);
- ArrayList<OverlayItem> items = new ArrayList<OverlayItem>();
- OverlayItem item = new OverlayItem("~title~", "I`m a marker,a subtitile", center);
- item.setMarker(drawable);
- items.add(item);
- this.mLocationOverlay = new ItemizedOverlayWithFocus<OverlayItem>(
- items,
- new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() {
- @Override
- public boolean onItemSingleTapUp(final int index,
- final OverlayItem item) {
- return true;
- }
- @Override
- public boolean onItemLongPress(final int index,
- final OverlayItem item) {
- return false;
- }
- }, mResourceProxy);
- this.mLocationOverlay.setFocusItemsOnTap(true);
- this.mLocationOverlay.setFocusedItem(0);
- mMapView.getOverlays().add(mLocationOverlay);
1.5 自定义Overlay
- 示例代码:
- //自定义marker图层
- ArrayList<OverlayItem> markers = new ArrayList<OverlayItem>();
- OverlayItem one = new OverlayItem("~one~", "custom marker", gp1);
- one.setMarker(drawable);
- markers.add(one);
- CustomMarker marker = new CustomMarker(markers, gestureListener, mResourceProxy);
- mMapView.getOverlays().add(marker);
- mController.setCenter(gp1);
- mMapView.invalidate();
- 自定义Overlay:
- /**
- * 自定义Marker
- * @author Administrator
- *
- */
- public class CustomMarker extends ItemizedOverlayWithFocus<OverlayItem> implements org.osmdroid.views.overlay.ItemizedIconOverlay.OnItemGestureListener<OverlayItem>{
- public CustomMarker(
- List<OverlayItem> aList,
- org.osmdroid.views.overlay.ItemizedIconOverlay.OnItemGestureListener<OverlayItem> aOnItemTapListener,
- ResourceProxy pResourceProxy) {
- super(aList, aOnItemTapListener, pResourceProxy);
- }
- @Override
- public void addItem(int location, OverlayItem item) {
- super.addItem(location, item);
- }
- @Override
- protected boolean onTap(int index) {
- return super.onTap(index);
- }
- @Override
- public boolean onSingleTapUp(MotionEvent event, MapView mapView) {
- return super.onSingleTapUp(event, mapView);
- }
- @Override
- public int size() {
- return super.size();
- }
- @Override
- public boolean onItemLongPress(int arg0, OverlayItem arg1) {
- return true;
- }
- @Override
- public boolean onItemSingleTapUp(int arg0, OverlayItem arg1) {
- return true;
- }
- }
效果图:
1.6 MinimapOverlay(小地图)
- 示例代码:
- //右下角小地图Overlay
- MinimapOverlayoverlay = new MinimapOverlay(this,
- mMapView.getTileRequestCompleteHandler());
- mMapView.getOverlays().add(overlay);
1.7PathOverlay(画线)和SimpleLocationOverlay
- 示例代码:
- //PathOverlay 路线Overlay
- GeoPoint gp1 = new GeoPoint(40.067225, 116.369758);
- GeoPoint gp2 = new GeoPoint(40.064808, 116.346362);
- GeoPoint gp3 = new GeoPoint(40.058669, 116.336648);
- GeoPoint gp4 = new GeoPoint(40.036685, 116.343619);
- GeoPoint gp5 = new GeoPoint(40.036368, 116.327699);
- PathOverlay line = new PathOverlay(Color.BLUE, this);
- line.addPoint(gp1);
- line.addPoint(gp2);
- line.addPoint(gp3);
- line.addPoint(gp4);
- line.addPoint(gp5);
- mMapView.getOverlays().add(line);
- mController.setCenter(gp1);
- //Simple图层
- SimpleLocationOverlay simpleLocation = new SimpleLocationOverlay(this);
- simpleLocation.setEnabled(true);
- simpleLocation.setLocation(gp5);
- mMapView.getOverlays().add(simpleLocation);
效果图:
黄色的小人便是simpleLocationOverlay
转载自http://blog.csdn.net/mad1989/article/details/9733985