OsmdroidAPI功能介绍----基本功能

OsmdroidAPI功能介绍—基本功能

https://github.com/osmdroid/osmdroid

基本应用

Osmdroid通过MapViewgetOverlays()方法获取所有的覆盖物集合,然后通过add()方法添加到地图上面。
Osmdroid中有一个Overlay的覆盖物接口。添加到MapView中的覆盖物需要实现这个接口。

       //built in zoom controls
        mMapView.setBuiltInZoomControls(true);

        //needed for pinch zooms
        mMapView.setMultiTouchControls(true);

        //scales tiles to the current screen's DPI, helps with readability of labels
        mMapView.setTilesScaledToDpi(true);
1,定位

Osmdroid提供了一个实现方式一个定位的覆盖物实现类MyLocationNewOverlay.java和定位功能的实现类GpsMyLocationProvider.java类。具体的实现方式为:

        //My Location
        //note you have handle the permissions yourself, the overlay did not do it for you
        mLocationOverlay = new MyLocationNewOverlay(new GpsMyLocationProvider(context), mMapView);
        mLocationOverlay.enableMyLocation();
       //定位的图标和方向旋转
        mLocationOverlay.setDirectionArrow(((BitmapDrawable)getContext().getResources().getDrawable(R.drawable.ic_location_pressed)).getBitmap(),
                ((BitmapDrawable)getContext().getResources().getDrawable(R.drawable.compass_mark)).getBitmap());
        mMapView.getOverlays().add(this.mLocationOverlay);

查看MyLocationNewOverlay.java代码,可以设置是否绘制精度范围。如下图:
精度范围

当GPS定位信息中有方向旋转角度的时候会绘制ArrowBitmap,而且绘制定位点图片的时候有一定的偏移量。
在这里插入图片描述
效果图:
定位图
定位的模式

//开启跟随模式
LocationOverlay.enableFollowLocation()
//关闭跟随模式
LocationOverlay.disableFollowLocation()

如果Osmdroid提供的定位不满足需求可以自定义一个。

2,小地图

使用代码:

	 //Mini map
        mMinimapOverlay = new MinimapOverlay(context, mMapView.getTileRequestCompleteHandler());
        mMinimapOverlay.setWidth(dm.widthPixels / 5);
        mMinimapOverlay.setHeight(dm.heightPixels / 5);
        mMapView.getOverlays().add(this.mMinimapOverlay);
3,在线图层的Copyright显示
	    //Copyright overlay
        mCopyrightOverlay = new CopyrightOverlay(context);
        //i hate this very much, but it seems as if certain versions of android and/or
        //device types handle screen offsets differently
        if (Build.VERSION.SDK_INT <= 10)
             mCopyrightOverlay.setOffset(0, (int) (55 * dm.density));
        mMapView.getOverlays().add(this.mCopyrightOverlay);
5,比例尺显示
 		//map scale
        mScaleBarOverlay = new ScaleBarOverlay(mMapView);
        mScaleBarOverlay.setCentred(true);
        //设置比例尺显示的位置
        mScaleBarOverlay.setScaleBarOffset(dm.widthPixels / 2, 10);
        mMapView.getOverlays().add(this.mScaleBarOverlay);

ScaleBarOverlay 支持设置比例尺的单位,有metric, imperial, nautical 三种。还可以设置比例尺的文本画笔,背景画笔和尺子的画笔

6,指南针显示
         //On screen compass
        //sorry for the spaghetti code this is to filter out the compass on api 8
        //Note: the compass overlay causes issues on API 8 devices. See https://github.com/osmdroid/osmdroid/issues/218
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.FROYO) {
            mCompassOverlay = new CompassOverlay(context, new InternalCompassOrientationProvider(context),
                mMapView);
            mCompassOverlay.enableCompass();
            mMapView.getOverlays().add(this.mCompassOverlay);
        }

InternalCompassOrientationProvider是Osmdroid提供的方向数据提供者

7,地图旋转
       //support for map rotation
        mRotationGestureOverlay = new RotationGestureOverlay(mMapView);
       //true地图旋转,false地图不旋转
        mRotationGestureOverlay.setEnabled(true);
        mMapView.getOverlays().add(this.mRotationGestureOverlay);
8,地图点击事件

地图的点击事件也是用Overlay实现的
实现代码

final MapEventsReceiver mReceive = new MapEventsReceiver() {
				@Override
				public boolean singleTapConfirmedHelper(GeoPoint p) {
					return false;
				}

				@Override
				public boolean longPressHelper(final GeoPoint p) {
					Toast.makeText("longPressHelper", Toast.LENGTH_LONG).show();
					return true;
				}
			};
			mMapView.getOverlays().add(new MapEventsOverlay(mReceive));

效果图:
效果图

9,经纬度网格显示

代码实现:

        LatLonGridlineOverlay2 grids = new LatLonGridlineOverlay2();
        grids.setBackgroundColor(Color.BLACK);
        grids.setFontColor(Color.RED);
        grids.setLineColor(Color.RED);
        grids.setFontSizeDp((short)14);
        mMapView.getOverlayManager().add(grids);

效果图
在这里插入图片描述

10,动画效果

1,移动到某一点

mMapView.getController().animateTo(geoPoint);

2,移动到某一个范围

mMapView.zoomToBoundingBox(boundingBox, true, border);

mMapView.zoomToBoundingBox(box, animated, borderSizeInPixels, zoomFallback, animationSpeed);
11,设置地图移动范围

提供能够设置地图移动范围的功能

/**
	 * @since 6.0.0
	 */
	public void resetScrollableAreaLimitLatitude() {
		mScrollableAreaLimitLatitude = false;
	}

	/**
	 * @since 6.0.0
	 */
	public void resetScrollableAreaLimitLongitude() {
		mScrollableAreaLimitLongitude = false;
	}

	/**
	 * sets the scroll limit
	 * Example:
	 *	To block vertical scroll of the view outside north/south poles:
	 * 	mapView.setScrollableAreaLimitLatitude(MapView.getTileSystem().getMaxLatitude(),
	 * 	                                       MapView.getTileSystem().getMinLatitude(),
	 * 	                                       0);
	 * Warning:
	 * 	Don't use latitude values outside the [MapView.getTileSystem().getMinLatitude(),
	 * 	MapView.getTileSystem().getMaxLatitude()] range, this would cause an ANR.
	 * @since 6.0.0
	 * @param pNorth decimal degrees latitude
	 * @param pSouth decimal degrees latitude
	 * @param pExtraPixelHeight in pixels, enables scrolling this many pixels past the bounds
	 */
	public void setScrollableAreaLimitLatitude(final double pNorth, final double pSouth,
											   final int pExtraPixelHeight) {
		mScrollableAreaLimitLatitude = true;
		mScrollableAreaLimitNorth = pNorth;
		mScrollableAreaLimitSouth = pSouth;
		mScrollableAreaLimitExtraPixelHeight = pExtraPixelHeight;
	}

	/**
	 * sets the scroll limit
	 * @since 6.0.0
	 * @param pWest decimal degrees longitude
	 * @param pEast decimal degrees longitude
	 * @param pExtraPixelWidth in pixels, enables scrolling this many pixels past the bounds
	 */
	public void setScrollableAreaLimitLongitude(final double pWest, final double pEast,
												final int pExtraPixelWidth) {
		mScrollableAreaLimitLongitude = true;
		mScrollableAreaLimitWest = pWest;
		mScrollableAreaLimitEast = pEast;
		mScrollableAreaLimitExtraPixelWidth = pExtraPixelWidth;
	}

	/**
	 * @since 6.0.0
	 */
	public boolean isScrollableAreaLimitLatitude() {
		return mScrollableAreaLimitLatitude;
	}

	/**
	 * @since 6.0.0
	 */
	public boolean isScrollableAreaLimitLongitude() {
		return mScrollableAreaLimitLongitude;
	}

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值