java - 通过 OSMDroid 使用在线存储中的 MBTiles

标签 java android osmdroid mbtiles

我已经在我的项目中导入了 OSMDroid,并且它在默认的 OpenStreetMap 下运行得很好。我想使用 MBTiles 格式映射而不是 OSM。有很多关于使用 MBTiles 作为离线 map 的教程,但我的 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 文件?

最佳答案

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

编辑:考虑到数据库的大小,您要做的最简单的事情是托管一个简单的 Web 服务,从数据库(服务器端)获取图 block ,然后通过自定义 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

关于java - 通过 OSMDroid 使用在线存储中的 MBTiles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33209230/

相关文章:

osmdroid - 当我点击 map 时,标记消失了怎么办?

java - 带有 MySql 数据库的 Spring Boot/Web

java - 无法向 JButton 添加操作监听器

android - 线性布局内的 listView 和其他东西

android - 避免 "No EGLConfig found!"错误

android - "Application not installed"用于动态壁纸,在某些手机上

java - 使用 Powershell 静默安装 Java 8

java - 找到白色节点的最长路径

android - Osmdroid。 onItemSingleTapUp 不适用于自定义 Drawable

android - 将 ItemizedOverlay 添加到我的 map View