osmdroid 地图 加载离线地图资源包 zip格式

osmdroid 加载离线地图资源包。我这只用了zip的。其他格式没试。

storage/emulated/0/osmdroid/hefeiosm.zip

主要逻辑是,拷贝  hefeiosm.zip 离线资源到根目录下  osmdroid/ 文件夹中。

注意:hefeiosm.zip里面为 hefeiosm 文件夹hefeiosm里面是0-17的数字文件夹这个是ZoomLevel。

osmdroid/hefeiosm.zip-》hefeiosm--》0-17的数字--》一窜数字文件夹--》 图片

 

另外如果加载失败的话,检查下图片路径和加载的图片路径是不是一致的。

debug 查看  BitmapTileSourceBase 类的    getTileRelativeFilenameString 方法返回的值。下面链接给的zip就是加载路劲不对的。可以改 BitmapTileSourceBase  getTileRelativeFilenameString 返回值   MapTileIndex.getY 和 MapTileIndex.getX  的值换下位置

osmdroid  github地址:https://github.com/osmdroid/osmdroid

 

hefeiosm.zip

链接:https://pan.baidu.com/s/1pAytTyaz94S4IbebPArVNA 
提取码:yr7o

下面是具体代码。

package com.example.android.osmdroidofflinedemo;

import android.app.Activity;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;


import org.osmdroid.api.IMapController;
import org.osmdroid.config.Configuration;
import org.osmdroid.tileprovider.IRegisterReceiver;
import org.osmdroid.tileprovider.modules.OfflineTileProvider;
import org.osmdroid.tileprovider.tilesource.FileBasedTileSource;
import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.tileprovider.util.SimpleRegisterReceiver;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;
import org.osmdroid.views.overlay.ScaleBarOverlay;
import org.osmdroid.views.overlay.mylocation.GpsMyLocationProvider;
import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends Activity {
    MapView mMapView;

    private MyLocationNewOverlay mLocationOverlay;
    private GpsMyLocationProvider gpsMyLocationProvider;
    private IMapController mController;
    private ScaleBarOverlay mScaleBarOverlay;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mMapView = (MapView) findViewById(R.id.mapview);
        Configuration.getInstance().setUserAgentValue(BuildConfig.APPLICATION_ID);
        //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);
        mapViewOtherData(mMapView);
        mMapView.setMaxZoomLevel(16.0);
//        mMapView.setMinZoomLevel(10.0);
        //我的位置
        gpsMyLocationProvider = new GpsMyLocationProvider(this);
        mLocationOverlay = new MyLocationNewOverlay(gpsMyLocationProvider, mMapView);
        mLocationOverlay.enableMyLocation();
        //定位的图标和方向旋转
//        mLocationOverlay.setDirectionArrow(((BitmapDrawable) getBaseContext().getResources().getDrawable(R.mipmap.ic_choose_location)).getBitmap(),
//                ((BitmapDrawable) getBaseContext().getResources().getDrawable(R.drawable.ic_menu_mylocation)).getBitmap());
//        mMapView.getOverlays().add(this.mLocationOverlay);

        //map scale
        mScaleBarOverlay = new ScaleBarOverlay(mMapView);
        mScaleBarOverlay.setCentred(true);
        //设置比例尺显示的位置
//        mScaleBarOverlay.setScaleBarOffset(ScreenUtils.getScreenWidth(mActivity) / 2, ScreenUtils.getScreenHeight(mActivity) - 50);
//        mMapView.getOverlays().add(this.mScaleBarOverlay);
        //经纬度网格显示
//        LatLonGridlineOverlay2 grids = new LatLonGridlineOverlay2();
//        grids.setBackgroundColor(Color.BLACK);
//        grids.setFontColor(Color.RED);
//        grids.setLineColor(Color.RED);
//        grids.setFontSizeDp((short) 14);
//        mMapView.getOverlayManager().add(grids);


        mController = mMapView.getController();
        mController.setZoom(14.0);
        mController.setCenter(new GeoPoint(31.82655, 117.166575));
        //指南针显示
//        CompassOverlay mCompassOverlay = new CompassOverlay(context, new InternalCompassOrientationProvider(context),
//                mMapView);
//        mCompassOverlay.enableCompass();
//        mMapView.getOverlays().add(mCompassOverlay);
    }

    /**
     * ————————————————
     * 版权声明:本文为CSDN博主「mmsx」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
     * 参考链接:https://blog.csdn.net/qq_16064871/article/details/54024687
     */
    public void mapViewOtherData(MapView mapView) {
        mapView.setUseDataConnection(false);
        String strFilepath = Environment.getExternalStorageDirectory().getPath() + "/osmdroid/hefeiosm.zip";// storage/emulated/0/osmdroid/hefeiosm.zip
        File exitFile = new File(strFilepath);
        if (!exitFile.exists()) {//文件不存在,用默认网络的
            mapView.setTileSource(TileSourceFactory.MAPNIK);
        } else {//文件存在
            try {
                OfflineTileProvider tileProvider = new OfflineTileProvider((IRegisterReceiver) new SimpleRegisterReceiver(this), new File[]{exitFile});
                mapView.setTileProvider(tileProvider);
                String source = "hefeiosm";//注意 hefeiosm 为  /osmdroid/hefeiosm.zip  文件内的 第一级文件夹名
                mapView.setTileSource(FileBasedTileSource.getSource(source));
                mapView.invalidate();
                Log.e("hefeiosm",strFilepath+"  =  "+source);
                return;
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            Toast.makeText(this, " did not have any files I can open! Try using MOBAC", Toast.LENGTH_LONG).show();
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        mMapView.onPause();
    }


    @Override
    protected void onResume() {
        super.onResume();
        mMapView.onResume();
    }

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
百度地图离线资源是一种用于JavaScript开发的工具,其目的是帮助开发人员实现在没有网络连接的环境下使用百度地图的功能。这套资源含了地图的基本数据和功能,可以在本地进行加载和使用。 百度地图离线资源的使用非常简单,只需要将资源引入到项目中,并按照文档提供的方式初始化地图对象即可。资源中的数据文件含了地图的各种信息,如地理坐标、地图图层、POI点等。通过使用这些数据文件,可以在离线状态下显示地图,进行地图操作、搜索等功能。 百度地图离线资源的优势在于提供了离线使用地图的能力,无需依赖网络连接。这对在一些网络环境较差或无法连接网络的场景下使用地图的应用非常有帮助。同时,该资源还具备较高的兼容性,可以在主流的浏览器中正常使用,并且提供了丰富的开发接口,支持开发人员根据项目需求进行自定义。 需要注意的是,百度地图离线资源并不含实时更新的地图数据,因此在使用过程中地图信息可能有一定的滞后性。同时,使用该资源需要遵守百度地图服务的相关规定和条款,确保合法合规使用地图服务。 总之,百度地图离线资源是一种方便开发人员在没有网络连接情况下使用百度地图功能的工具,可以在离线状态下加载地图数据,进行地图操作、搜索等功能。它的使用简单、兼容性好,并且提供了丰富的开发接口,是开发者开发地图应用的一项有力工具。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值