Android GIS osmdroid地图使用

package com.example.administrator.test;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

import com.GSCAndroid.DBSqlite.SqliteHelper;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.model.LatLng;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import org.osmdroid.ResourceProxy;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.overlay.ItemizedIconOverlay;
import org.osmdroid.views.overlay.ItemizedOverlayWithFocus;
import org.osmdroid.views.overlay.OverlayItem;
import org.osmdroid.views.overlay.PathOverlay;

import java.util.ArrayList;


public class MainActivity extends AppCompatActivity {

    public MapView mMapView ;
    public static boolean ViewChanges = false;
    public static SqliteHelper sqliteHelper = null;
    public static Bitmap pallet;
    Paint paint;
    private ResourceProxy mResourceProxy;
    private ItemizedOverlayWithFocus<OverlayItem> mLocationOverlay;
    private PathOverlay mLine;
    private float mLevel;
    private ArrayList<OverlayItem> mItems = new ArrayList<OverlayItem>();
    private BaiduMap mBaiduMap;
    private BitmapDescriptor mCurrentMarker;
    private MyLocationConfiguration.LocationMode mCurrentMode;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_main);
        //获取地图控件引用
        mMapView  = (MapView) findViewById(R.id.bmapView);

        mBaiduMap = mMapView.getMap();

        //地图出不来可能是经纬度写反了
        LatLng cenpt = new LatLng(30.508923,114.406027);
        MapStatus mMapStatus = new MapStatus.Builder()
                .target(cenpt)
                .zoom(18)
                .build();
        //定义MapStatusUpdate对象,以便描述地图状态将要发生的变化
        MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);
        //改变地图状态
        mBaiduMap.setMapStatus(mMapStatusUpdate);






        //开启交通图
        //mBaiduMap.setTrafficEnabled(true);
//
////普通地图
//        mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
//
////卫星地图
//        mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
//
////空白地图, 基础地图瓦片将不会被渲染。在地图类型中设置为NONE,将不会使用流量下载基础地图瓦片图层。使用场景:与瓦片图层一起使用,节省流量,提升自定义瓦片图下载速度。
//        mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NONE);

        // 以Sticky的形式注册
        EventBus.getDefault().register(this);
//        mLevel = 0f;
//        mResourceProxy = new DefaultResourceProxyImpl(this);
//        mapView = new MapView(this); //constructor
//        mapView.setMultiTouchControls(true);
//        mapView.setClickable(false);
//        mapView.setBuiltInZoomControls(true);
//        setContentView(mapView);
//        mapView.setTileSource(TileSourceFactory.MAPNIK);
//        mapView.getController().setZoom(13);
//        mapView.getController().setCenter(new GeoPoint(114.406027,30.508923));
//        mapView.setUseDataConnection(true);
//        mapView.setMaxZoomLevel(22);
//        GeoPoint center = new GeoPoint(114.406027,30.508923);
//        initData(center,0);
        //initData();
        //地图改变监听
//        mapView.setMapListener(new MapListener() {
//            @Override
//            public boolean onScroll(ScrollEvent event) {
//                return false;
//            }
//
//            @Override
//            public boolean onZoom(ZoomEvent event) {
//
//                mapView.getOverlays().clear();
//                init();
//                return true;
//            }
//
//            @Override
//            public boolean onTouch(TouchEvent event) {
//                return false;
//            }
//        });

    }
    @Subscribe(threadMode = ThreadMode.MAIN,sticky = true)
    public void onEventMainThread(SendGPSData gpsData) {
        //Toast.makeText(this, "点的数量" + gpsData.Heading, Toast.LENGTH_SHORT).show();
//        if(gpsData!=null){
//            GeoPoint point = new GeoPoint(gpsData.Latitude, gpsData.Longitude);
//
//            initData(point, (float) gpsData.Heading);
//        }

    }
    private void initData() {
    //private void initData(GeoPoint gpsPoint,float heading) {

        mLine = new PathOverlay(Color.BLUE, this);



        //********************外界传过来点的坐标(需要组合代码的)********************
        GeoPoint center = new GeoPoint(114.406027,30.508923);
        GeoPoint center1 = new GeoPoint(114.416027,30.508923);
        GeoPoint center2 = new GeoPoint(114.426027,30.508923);
        AddPoint(center);
        AddPoint(center1);
        AddPoint(center2);
        //********************外界传过来点的坐标(结束)********************


        //mapView.getOverlays().add(mLine);

        OverlayItem overlayItem = mItems.get(mItems.size() - 1);
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.zhinanzhen);
        bitmap = rotateBitmap(bitmap, 30f);
        Bitmap smallBitmap = small(bitmap, 0.3f);
        Drawable drawable = new BitmapDrawable(smallBitmap);
        overlayItem.setMarker(drawable);

        //Toast.makeText(this, "点的数量" + mItems.size(), Toast.LENGTH_SHORT).show();
    }



    //旋转图片
    private Bitmap rotateBitmap(Bitmap origin, float alpha) {

        if (origin == null) {
            return null;
        }
        int w = origin.getWidth();
        int h = origin.getHeight();
        Bitmap newb = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);// 创建一个新的和SRC长度宽度一样的位图
        Canvas cv = new Canvas(newb);
        Matrix m = new Matrix();
//        m.postScale(1, -1);   //镜像垂直翻转
//        m.postScale(-1, 1);   //镜像水平翻转
        m.postRotate(-90);  //旋转-90度
        Bitmap new2 = Bitmap.createBitmap(origin, 0, 0, w, h, m, true);
        cv.drawBitmap(new2, new Rect(0, 0, new2.getWidth(), new2.getHeight()), new Rect(0, 0, w, h), null);
        return newb;
    }

    //添加点
    public void AddPoint(GeoPoint center) {
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.timg);

//        if (mapView.getZoomLevel() == 0) {
//            mLevel = 0.8f;
//        } else {
//            mLevel = (float) mapView.getMaxZoomLevel() / mapView.getZoomLevel();
//        }
        Bitmap smallBitmap = small(bitmap, mLevel);
        Drawable drawable = new BitmapDrawable(smallBitmap);

        OverlayItem item = new OverlayItem("~title~", "I`m a marker," + center.getLatitude(), center);

        item.setMarker(drawable);
        mItems.add(item);

        this.mLocationOverlay = new ItemizedOverlayWithFocus<OverlayItem>(
                mItems,
                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);
        mLine.addPoint(center);
        //mapView.getOverlays().add(mLocationOverlay);
    }


    /**
     * Bitmap等比缩放的方法
     */
    private static Bitmap small(Bitmap bitmap, float num) {
        Matrix matrix = new Matrix();
        matrix.postScale(num, num); //长和宽放大缩小的比例
        Bitmap resizeBmp = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
        return resizeBmp;
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
        mMapView.onDestroy();
    }
    @Override
    protected void onResume() {
        super.onResume();
        //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
        mMapView.onResume();
    }
    @Override
    protected void onPause() {
        super.onPause();
        //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
        mMapView.onPause();
    }
}

 

posted on 2018-04-19 11:48  LKit  阅读(2587)  评论(0编辑  收藏  举报