Osmdroid脱机文件

问题描述 投票:4回答:3

我有一个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

android zip offline osmdroid tile
3个回答
2
投票

我也遇到了同样的问题,并通过使用Mapnik的在线图块解决了该问题。这样,我的应用程序在移动设备(电话/ osmdroid / tiles / Mapnik)中创建了路径。

    mMapView.setTileSource(TileSourceFactory.Mapnik);

您也可以通过将其添加到xml文件和mapview中来添加tileouce:

    tilesource="Mapnik"

不要忘记添加以下内容来指定您不希望应用程序下载数据:

      mMapView.setUseDataConnection(false);

完成后,您可以使应用程序使用离线磁贴,只需按照本指南进行操作:http://www.haakseth.com/?p=30


1
投票

您的代码正确MapTileProviderBasic使用MapTileFileArchiveProvider:

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

您应该验证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);
    }
}

活动.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”) 。

祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.