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 的示例从在线加载磁贴,我也更新了代码,我想我必须从这个示例开始,也许我可以从 localhost 加载?生病回来看看

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

4

3 回答 3

2

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

    mMapView.setTileSource(TileSourceFactory.Mapnik);

您还可以通过将其添加到您的 xml 文件和地图视图中来添加tilesouce:

    tilesource="Mapnik"

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

      mMapView.setUseDataConnection(false);

完成后,您可以让应用程序使用离线磁贴,只需遵循本指南:http ://www.haakseth.com/?p=30

于 2014-04-01T19:04:52.590 回答
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 中,不要忘记将 tile 源名称设置为基本目录:

/tilesourcename/zoomlevel/...

于 2013-04-12T16:31:23.873 回答
0

我也遇到了问题。我的设置是使用 Mapnik 离线 Osmdroid。它现在正在工作。我正在使用的代码如下。

首先你需要在 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”)。

祝你好运!

于 2020-03-11T11:05:08.660 回答