Osmdroid离线文件

4

我有一个osmdroid地图,想要从MOBAC的osmdroid zip或gemf文件中加载离线瓦片。我查看了相关信息,到处都说只需要将它放在sdcard/osmdroid中即可。但实际操作并不起作用,请问我需要更改代码吗?

 public class Map extends Activity {
  private IMapView mMapView;
  private static IMapController mMapController;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_map);

    mMapView = (MapView) findViewById(R.id.mapview);
    ((MapView) mMapView).setBuiltInZoomControls(true);

    mMapController = mMapView.getController();
    mMapController.setZoom(13);
    GeoPoint geoPecs = new GeoPoint(46.070833,18.233056);
    mMapController.setCenter(geoPecs);

mProvider = new MapTileProviderBasic(getApplicationContext());
    mCustomTileSource = new XYTileSource("Turaterkep", null, 13, 15, 256, ".png", "http://users.atw.hu/perzsa/map/Turaterkep/");
    mProvider.setTileSource(mCustomTileSource);
    mTilesOverlay = new TilesOverlay(mProvider,this.getBaseContext());

    mMapView.getOverlays().add(mTilesOverlay);

更新: 我成功地将样例中的片状图块加载到osmdroid上,并更新了代码,我想我应该从这个样例开始,也许我可以从本地主机加载?我会再检查一下。

图片: http://i.stack.imgur.com/CoZT1.png


没有人知道任何解决方案吗? - perzsa
3个回答

2

我曾经遇到过同样的问题,我通过使用来自Mapnik的在线瓦片解决了它。这样一来,我的应用程序在我的移动设备上创建了路径(phone/osmdroid/tiles/Mapnik)。

    mMapView.setTileSource(TileSourceFactory.Mapnik);

您可以通过在xml文件和地图视图中添加以下内容来添加tilesouce:

    tilesource="Mapnik"

不要忘记通过添加以下内容来指定不希望应用程序下载数据:
      mMapView.setUseDataConnection(false);

完成这些步骤后,您可以让应用程序使用离线瓦片,只需按照此指南操作:http://www.haakseth.com/?p=30


@williedanielsson:我不确定**tilesource="Mapnik"**应该放在哪里,请问您能提供一些上下文吗? - Al Lelopath

1

您的代码是正确的,MapTileProviderBasic使用MapTileFileArchiveProvider:

https://code.google.com/p/osmdroid/source/browse/trunk/osmdroid-android/src/org/osmdroid/tileprovider/MapTileProviderBasic.java?r=681

您应该验证您的zip文件路径和zip文件中的目录结构。

zip文件应放置在OSMDROID_PATH(/mnt/sdcard/osmdroid)中。这是搜索zip文件的位置:

private void findArchiveFiles() {

    mArchiveFiles.clear();

    if (!getSdCardAvailable()) {
            return;
    }

    // path should be optionally configurable
    final File[] z = OSMDROID_PATH.listFiles();
    for (final File file : z) {
            final IArchiveFile archiveFile = ArchiveFileFactory.getArchiveFile(file);
            if (archiveFile != null) {
                    mArchiveFiles.add(archiveFile);
            }
    }
}

在您的zip文件中,不要忘记将瓦片源名称设置为基础目录:
/tilesourcename/zoomlevel/...

0
我也遇到了这个问题。我的设置是离线Osmdroid与Mapnik。现在它可以工作了。我正在使用的代码如下。
首先,您需要在build.gradle(Module:app)中包含OSMDroid。
implementation 'org.osmdroid:osmdroid-android:6.1.5'

在添加这行代码后,请进行Gradle同步。

我的主要活动是这样的:

public class MainActivity extends AppCompatActivity {

    MapView map = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Intent intent = getIntent();
        map = findViewById(R.id.map);
        map.setTileSource(TileSourceFactory.MAPNIK);
        map.setUseDataConnection(false);
        map.setMinZoomLevel(7.0);
        map.setMaxZoomLevel(18.0);

        IMapController mapController = map.getController();
        mapController.setZoom(9.0);

        map.invalidate();

        GeoPoint goToLocation = new GeoPoint(41.80937753568571, -5.739056020777395);
        mapController.setCenter(goToLocation);
    }
}

activity.xml 文件包含视图:

<org.osmdroid.views.MapView android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tilesource="Mapnik" />

我的地图瓦片.zip文件在/storage/emulated/0/osmdroid中。

(我无法从位置/sdcard/osmdroid中使其工作)

你的.zip文件的内部结构应该是/Mapnik/x/y/z.png,这是区分大小写的!

你的.zip文件叫什么似乎并不重要,甚至可以有多个。

第一次编译和安装后,你可能需要进入Android上的应用程序属性,并授予应用程序访问"存储"的权限(不确定确切的翻译,我的手机是西班牙语,它被称为"Almacenamiento")。

祝你好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接