【问题标题】:Use MBTiles from online storage with OSMDroid通过 OSMDroid 使用来自在线存储的 MBTiles
【发布时间】:2015-10-19 07:52:03
【问题描述】:

我已经在我的项目中导入了 OSMDroid,它在默认的 OpenStreetMap 下运行得很好。我想使用 MBTiles 格式映射而不是 OSM。有很多使用 MBTiles 作为离线地图的教程,但我的 MBTiles 文件存储在在线存储中,例如

http://www.example.com/mymbtiles.mbtiles.

我在我的 MainActivity.java 中使用以下代码,这是 OSMDroid 默认教程的施乐

package com.example.user.osmdroid;

import android.app.Activity;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;

import org.osmdroid.api.IMapController;
import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.tileprovider.tilesource.XYTileSource;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;

public class MainActivity extends Activity {
    @Override public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        MapView map = (MapView) findViewById(R.id.map);
        map.setTileSource(TileSourceFactory.MAPNIK);
        map.setBuiltInZoomControls(true);
        map.setMultiTouchControls(true);
        IMapController mapController = map.getController();
        mapController.setZoom(9);
        GeoPoint startPoint = new GeoPoint(23.7588, 90.38967);
        mapController.setCenter(startPoint);
    }
}

如何在我的 OSMDroid 项目中使用在线存储的 MBTiles 文件?

【问题讨论】:

    标签: java android osmdroid mbtiles


    【解决方案1】:

    你不能直接使用它。 MBTiles 基本上是一个 sqlite 数据库。 OSMDroid 可以从设备的存储中读取和使用它,但不能通过网络。要解决这个问题,您必须将数据库传输到设备,然后通过 tile source 和 tile provider 告诉 OSMDroid 使用 mbtiles 文件。

    编辑:考虑到数据库的大小,您要做的最简单的事情是托管一个简单的 Web 服务,该服务从数据库(服务器端)获取图块,然后通过自定义 ITileSource 将它们提供给您的用户。我实际上有诸如服务之类的代码,但是(还)不能发布。 “标准” osm 方式是http://server/port:path/Z/X/Y.png,但只要在 android 设备上有 ITileSource 设置,您就可以将其设为您想要的任何格式。另外,你可能想看看这个例子https://github.com/osmdroid/osmdroid/blob/master/OpenStreetMapViewer/src/main/java/org/osmdroid/samplefragments/SampleCustomTileSource.java 注意,我们正在扩展 OnlineTileSourceBase

    【讨论】:

    • 我有一个 38 GB 的 MBTiles 文件。我打算开发一个在线地图服务。我几乎用那个 MBTiles 文件完成了我的 Web 开发部分。所以在安卓应用中,地图应该和网页界面一样。为此,我选择 OSMDroid 的方法可能是错误的。有什么建议???无论如何,非常感谢。
    • 我已经对您提供的示例进行了很多尝试,但无法实现。我需要更多地挖掘它。在 Web 服务中,我使用 php-tile-server 来渲染带有传单 API 的 MBTiles。安卓开发没有这样的API。
    • 你让mbtiles通过你的php tile服务器出现。在 OsmDroid 中,您必须使用指向您的 php tile 服务器的自定义在线 tile 源分发您的应用程序
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2015-11-26
    相关资源
    最近更新 更多