我有一个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的示例的切片,我也更新了代码,我想我必须从此示例开始,也许我可以从本地主机加载?病检查回来
我也遇到了同样的问题,并通过使用Mapnik的在线图块解决了该问题。这样,我的应用程序在移动设备(电话/ osmdroid / tiles / Mapnik)中创建了路径。
mMapView.setTileSource(TileSourceFactory.Mapnik);
您也可以通过将其添加到xml文件和mapview中来添加tileouce:
tilesource="Mapnik"
不要忘记添加以下内容来指定您不希望应用程序下载数据:
mMapView.setUseDataConnection(false);
完成后,您可以使应用程序使用离线磁贴,只需按照本指南进行操作:http://www.haakseth.com/?p=30
您的代码正确MapTileProviderBasic使用MapTileFileArchiveProvider:
您应该验证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里面,别忘了将图块源名称设置为基本目录:
/ tilesourcename / zoomlevel / ...
我在使它正常工作方面也遇到了问题。我的设置是离线的Osmdroid与Mapnik。现在正在工作。我使用的代码如下。
首先,您需要在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”) 。
祝你好运!