【问题标题】:Osmdroid offline fileOsmdroid 离线文件
【发布时间】:2013-03-29 10:54:07
【问题描述】:

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

【问题讨论】:

  • 没人知道解决办法吗?

标签: android zip offline osmdroid tile


【解决方案1】:

我遇到了同样的问题,我通过使用 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" 应该在哪里。你能添加上下文吗?
【解决方案2】:

你的代码是对的 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/...

【讨论】:

    【解决方案3】:

    我也遇到了问题。我的设置是使用 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);
        }
    }
    

    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” )。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-23
      • 1970-01-01
      相关资源
      最近更新 更多