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(); } }
相關文章
相關標籤/搜索