Osmdroid 使用之加载google影像地图


Osmdroid 使用之加载google影像

转载 osmdroid 在线加载谷歌瓦片

Osmdroid 是开源的GIS加载框架。

package com.googlemap.online;
 
import org.osmdroid.tileprovider.MapTile;
import org.osmdroid.tileprovider.tilesource.XYTileSource;
 
public class GoogleTileSource extends XYTileSource {
    //影像的叠加层 lyrs=h
    static final String[] baseUrl_GoogleLabel = new String[]{
            "http://mt1.google.cn/vt/imgtp=png32&lyrs=h@210000000&hl=en-US&gl=US&src=app&s=G",
            "http://mt2.google.cn/vt/imgtp=png32&lyrs=h@210000000&hl=en-US&gl=US&src=app&s=G",
            "http://mt3.google.cn/vt/imgtp=png32&lyrs=h@210000000&hl=en-US&gl=US&src=app&s=G"
    };
 
    //矢量底图 lyrs=m  lyrs=是指瓦片类型 有标注  在国内但有偏移,国外暂无测试
    static final String[] baseUrl_GoogleRoad = new String[]{
            "http://mt1.google.cn/vt/lyrs=m@209712068&hl=en-US&gl=US&src=app&s=G",
            "http://mt2.google.cn/vt/lyrs=m@209712068&hl=en-US&gl=US&src=app&s=G",
            "http://mt3.google.cn/vt/lyrs=m@209712068&hl=en-US&gl=US&src=app&s=G"
    };
 
 
    //影像底图 lyrs=y  有标注  在国内但有偏移,国外暂无测试
    static final String[] baseUrl_Google_cn = new String[]{
            "http://mt0.google.cn/vt/lyrs=y@126&hl=zh-CN&gl=cn&src=app&s=G",
            "http://mt1.google.cn/vt/lyrs=y@126&hl=zh-CN&gl=cn&src=app&s=G",
            "http://mt2.google.cn/vt/lyrs=y@126&hl=zh-CN&gl=cn&src=app&s=G",
            "http://mt3.google.cn/vt/lyrs=y@126&hl=zh-CN&gl=cn&src=app&s=G"
    };
 
 
    //影像底图 lyrs=s  没有标注
    static final String[] baseUrl_GoogleSatellite = new String[]{
            "http://mt0.google.cn/vt/lyrs=s@126&hl=en-US&gl=US&src=app&s=G",
            "http://mt1.google.cn/vt/lyrs=s@126&hl=en-US&gl=US&src=app&s=G",
            "http://mt2.google.cn/vt/lyrs=s@126&hl=en-US&gl=US&src=app&s=G",
            "http://mt3.google.cn/vt/lyrs=s@126&hl=en-US&gl=US&src=app&s=G"
    };
 
    String urlXYZ = "&x={$x}&y={$y}&z={$z}";
 
   public GoogleTileSource(String[] urls) {
        super("Google", 2, 22, 256, ".png", urls);
    }

 
  @Override
    public String getTileURLString(long pMapTileIndex) {
        String url = getBaseUrl() + urlXYZ
                .replace("{$x}", MapTileIndex.getX(pMapTileIndex) + "")
                .replace("{$y}", MapTileIndex.getY(pMapTileIndex) + "")
                .replace("{$z}", MapTileIndex.getZoom(pMapTileIndex) + "");
        return url;

    }
}

Activity加载地图

public class GoogleImgActivity extends Activity {
    private static final int PERMISSION_REQUEST_CODE = 0x001;
    private static final String TAG = GoogleImgActivity.class.getName();
    private MapView mapView = null;
    private static final String FILE_PATH = "/osmdroid/google/Satellite/";
    private static final String SP_NAME = "osmdroid_google_Satellite";
   
   private RotationGestureOverlay mRotationGestureOverlay;
    private ScaleBarOverlay mScaleBarOverlay;
    private CompassOverlay mCompassOverlay;
    private MyLocationNewOverlay mLocationOverlay;
    
    @Override
    public void onCreate(Bundle savedInstance) {
        super.onCreate(savedInstance);
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) !=  PackageManager.PERMISSION_GRANTED) {
            requestPermissions(Manifest.permission.ACCESS_COARSE_LOCATION,
                    Manifest.permission.ACCESS_FINE_LOCATION,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE);
            return;
        }
        init(true);
    }

    private void init(boolean setFile) {
        if (setFile) {
            String path = Environment.getExternalStorageDirectory().getAbsolutePath();
            File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), FILE_PATH);
            if (!file.exists() && !file.mkdirs()) {
                Log.d(TAG, "onCreate: " + file.getAbsolutePath() + " mkdirs fail ");
            }
            Configuration.getInstance().setOsmdroidBasePath(new File(path + FILE_PATH));
            Configuration.getInstance().setOsmdroidTileCache(new File(path + FILE_PATH));
        }
        Configuration.getInstance().load(getApplicationContext(), getSharedPreferences(SP_NAME, MODE_PRIVATE));
        //TODO check permissions
        setContentView(R.layout.activity_main);
        mapView = (MapView) findViewById(R.id.mapView);

        mapView.setDrawingCacheEnabled(true);
        mapView.setMultiTouchControls(true);// 触控放大缩小
        mapView.setMaxZoomLevel(22.0);
        mapView.setMinZoomLevel(6.0);
        mapView.getController().setZoom(12.0);
        //mMapView
        mapView.setUseDataConnection(true);
        mapView.setMultiTouchControls(true);// 触控放大缩小
        //是否显示地图数据源
        mapView.getOverlayManager().getTilesOverlay().setEnabled(true);
        //加载谷歌地图,设置地图数据源的形式
        mapView.setTileSource(new GoogleTileSource(GoogleTileSource.baseUrl_GoogleSatellite));
        mapView.getController().setZoom(18.0);
        mapView.getController().setCenter(new GeoPoint(31.16590625, 121.28804862));

        //地图自由旋转
        mRotationGestureOverlay = new RotationGestureOverlay(mapView);
        mRotationGestureOverlay.setEnabled(true);
        mapView.getOverlays().add(this.mRotationGestureOverlay);
         //比例尺配置
        final DisplayMetrics dm = getResources().getDisplayMetrics();
        mScaleBarOverlay = new ScaleBarOverlay(mapView);
        mScaleBarOverlay.setCentred(true);
        mScaleBarOverlay.setAlignBottom(true); //底部显示
        mScaleBarOverlay.setScaleBarOffset(dm.widthPixels / 5, 80);
        mapView.getOverlays().add(this.mScaleBarOverlay);
        //指南针方向
        mCompassOverlay = new CompassOverlay(this, new InternalCompassOrientationProvider(this),
                mapView);
        mCompassOverlay.enableCompass();
        mapView.getOverlays().add(this.mCompassOverlay);
          //设置导航图标
        this.mLocationOverlay = new MyLocationNewOverlay(new GpsMyLocationProvider(this),
                mapView);
        this.mLocationOverlay.setDirectionArrow(((BitmapDrawable)                  	
        mapView.getContext().getResources().getDrawable(org.osmdroid.library.R.drawable.direction_arrow)).getBitmap(),
                ((BitmapDrawable)
        mapView.getContext().getResources().getDrawable(org.osmdroid.library.R.drawable.person)).getBitmap());
        
        mapView.getOverlays().add(this.mLocationOverlay);
        mLocationOverlay.enableMyLocation();  //设置可视
}

   // 请求权限兼容低版本
    private void requestPermissions(String... permissions) {
        ActivityCompat.requestPermissions(this, permissions, PERMISSION_REQUEST_CODE);
    }
    
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode == PERMISSION_REQUEST_CODE && hasAllPermissionsGranted(permissions, grantResults)) {
            Log.d(TAG, "onRequestPermissionsResult: true");
            init(true);
        } else {
            Log.d(TAG, "onRequestPermissionsResult: false");
            init(false);
        }
    }
    
    // 含有全部的权限
    private boolean hasAllPermissionsGranted(@NonNull String[] permissions, @NonNull int[] grantResults) {
        for (int grantResult : grantResults) {
            if (grantResult == PackageManager.PERMISSION_DENIED) {
                return false;
            }
        }
        return true;
    }
    
    @Override
    public void onResume() {
        super.onResume();
//        Configuration.getInstance().load(getApplicationContext(), PreferenceManager.getDefaultSharedPreferences(getApplicationContext()));
        if (mapView != null)
            mapView.onResume();
    }
   
    @Override
    public void onPause() {
        super.onPause();
        Configuration.getInstance().save(getApplicationContext(), getSharedPreferences(SP_NAME, MODE_PRIVATE));
        if (mapView != null)
            mapView.onPause();
    }
}

转载自:https://blog.csdn.net/qq_28656671/article/details/84994236

You may also like...