当前位置: 首页 > 知识库问答 >
问题:

OSMDROID-loading.map文件从mapsforge下载

锺离珂
2023-03-14

我正在尝试加载.map文件,它放在android Studio的/assets文件夹中。.map文件是从mapsforge@override protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(r.layout.activity_main)下载的;

    map = (MapView) findViewById(R.id.map);
    map.setBuiltInZoomControls(true);
    map.setTileSource(TileSourceFactory.MAPNIK);
    IMapController controller = map.getController();
    GeoPoint point = new GeoPoint(41.2585, 69.2097);
    controller.animateTo(point);
    controller.setZoom(10);

    File f = new File("file:///android_asset/" + "myfile.map");
    if (f.exists()) {
        File[] list = f.listFiles();
        if (list != null) {
            for (int i = 0; i < list.length; i++) {
                if (list[i].isDirectory()) {
                    continue;
                }
                String name = list[i].getName().toLowerCase();
                if (!name.contains(".")) {
                    continue; //skip files without an extension
                }
                name = name.substring(name.lastIndexOf(".") + 1);
                if (name.length() == 0) {
                    continue;
                }
                if (ArchiveFileFactory.isFileExtensionRegistered(name)) {
                    try {
                        OfflineTileProvider tileProvider = new OfflineTileProvider(new SimpleRegisterReceiver(this),
                                new File[]{list[i]});
                        map.setTileProvider(tileProvider);
                        String source = "";
                        IArchiveFile[] archives = tileProvider.getArchives();
                        if (archives.length > 0) {
                            Set<String> tileSources = archives[0].getTileSources();
                            if (!tileSources.isEmpty()) {
                                source = tileSources.iterator().next();
                                map.setTileSource(FileBasedTileSource.getSource(source));
                            } else map.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE);

                        } else map.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE);
                        map.invalidate();
                        return;
                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }
                }
            }
        }
        Toast.makeText(this, f.getAbsolutePath() + " did not have any files I can open! Try using MOBAC", Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(this, f.getAbsolutePath() + " dir not found!", Toast.LENGTH_SHORT).show();
    }
}

找不到获取错误“MyFileDirectory”。

共有1个答案

邵星河
2023-03-14

既然你发的代码是我写的,我想我是插话的。

  1. 您发布的代码实际上是用于加载osmdroid支持的离线平铺数据库集合,它使用默认的平铺提供程序链(sqlite、mbtile、zip等)。Mapsforge不在该列表中,因为这是一种特殊情况。
  2. 要使用maps forge提供的带有osmdroid的tiles,您可能应该遵循以下示例https://github.com/osmdroid/osmdroid/blob/master/openstreetmapviewer/src/main/Java/org/osmdroid/samplefragments/tileproviders/mapsforgetileprovidersample。Java我相信您会在那里找到其他各种有用的示例。
  3. 绑定assets文件夹中的映射文件或任何其他数据库(尽管可以这样做),但在osmdroid中加载此块是不可能的,除非将原始JPG/PNG存储在assets中。因此,如果绑定资产是您选择的路径,您将希望将数据库复制到设备存储,然后告诉osmdroid加载它。我不确定原因,但可能与权限有关。

为了节省一些时间,下面是相关的代码片段,其中maps是一个文件[]

XmlRenderTheme theme = null;
        try {
            theme = new AssetsRenderTheme(getContext().getApplicationContext(), "renderthemes/", "rendertheme-v4.xml");
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        fromFiles = MapsForgeTileSource.createFromFiles(maps, theme, "rendertheme-v4");
        forge = new MapsForgeTileProvider(
            new SimpleRegisterReceiver(getContext()),
            fromFiles, null);


        mMapView.setTileProvider(forge);
 类似资料:
  • 对于android,我通过osmdroid和osmbonuspack使用mapsforge tiles。到目前为止,我使用了以下软件 OSMbonusPack Omsdroid mapsforge-map(依赖项)。 Salida软件解决方案,如http://www.salidasoftware.com/how-to-render-mapsforge-tiles-in-osmdroid所示 问题1

  • 我们在Android应用程序中使用osmdroid和Mapsforge用于离线地图已经有一段时间了。本周我们决定更新到6.0.1版本。从那以后,当我尝试显示使用Osmdroid的地图时,我会收到以下错误: 地图仍然显示,但我认为上面的符号丢失了,不再显示。 我们所做的细节 我们从 致: 我还使用osmdroid 6.0.1和原始的Mapsforge库0.6.1进行了测试,得到了相同的结果。不幸的是

  • 请和这位新来的人一起.. 经过这里的几篇文章,它似乎有可能成为一个圣杯与Mapsforge、osmdroid、graphhopper和OsmBonusPack的离线路由和turn by-Turn导航。 我想为我的城市开发一个android应用程序,完全离线。有没有可能有“离线”版本的OSMNavigator,从这个意义上说,它将有从本地City.map文件的POI搜索,功能列表与MyLocatio

  • mapsforge提供了一个开源的工具箱能够让开发人员轻松创建基于OpenStreetMap的应用程序。这些工具和API 包括地图展示、路径规划和导航、POI索引和搜索、Map overlay。

  • OSMDroid 设计用于完全替换 Android 内部的 MapView 类,包含一个模块化的地图拼图,支持在线和离线地图以及覆盖地图,支持标注图标、位置跟踪和绘制形状。地图引擎使用 OpenStreetMap。

  • 问题内容: 我有一个需要从网站下载PDF的要求。PDF需要在代码中生成,我认为这将是freemarker和iText等PDF生成框架的结合。还有更好的办法吗? 但是,我的主要问题是如何允许用户通过Spring Controller下载文件? 问题答案: 一般来说,当你拥有时,你可以在其中编写任何内容。你可以将此输出流作为将生成的PDF放置到生成器的地方。另外,如果你知道要发送的文件类型,则可以设置