• 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();
        }
    }
  • 相关阅读:
    设计模式系列之中介者模式(Mediator Pattern)——协调多个对象之间的交互
    设计模式系列之外观模式(Facade Pattern)——提供统一的入口
    设计模式系列之装饰模式(Decorator Pattern)——扩展系统功能
    设计模式系列之组合模式(Composite Pattern)——树形结构的处理
    设计模式系列之工厂模式三兄弟(Factory Pattern)
    设计模式系列之建造者模式(Builder Pattern)——复杂对象的组装与创建
    设计模式系列之原型模式(Prototype Pattern)——对象的克隆
    动态追踪技术之SystemTap
    一次内核 crash 的排查记录
    LLVM Coding Standards
  • 原文地址:https://www.cnblogs.com/LKit/p/8881427.html
Copyright © 2020-2023  润新知