【问题标题】:Offline OSMdroid shows empty map离线 OSMdroid 显示空地图
【发布时间】:2015-02-18 11:38:30
【问题描述】:

我正在尝试在 android.support.v4.app.Fragment 中使用 OSMdroid 的离线模式。 MOBAC 使用“OSMdroid Zip”格式在全球坐标 0,0 周围下载了我的图块(它只是海,但我只是想显示一些东西作为开始)。

我的 zip 文件位于 /sdcard/osmdroid/MapquestOSM.zip 中,并包含 MapQuest 文件夹,该文件夹包含自己的子文件夹中的所有图块,以数字作为名称,从缩放 11 到缩放 16。图块是 png 文件和具有扩展名“.png”。请注意,/sdcard//osmdroid 文件夹仅包含我的 zip 文件。

我的问题是我只看到一个空地图,这是一个空的灰色网格。

public class ContactMapFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        return inflater.inflate(R.layout.map_fragment, container, false);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState){
        super.onActivityCreated(savedInstanceState);


        MapView map = (MapView) getActivity().findViewById(R.id.mapview);
        map.setBuiltInZoomControls(true);
        map.getController().setZoom(11);

        map.getController().setCenter(new GeoPoint(0,0));

        map.setClickable(true);
        map.setUseDataConnection(false);
        map.setMaxZoomLevel(16);
        map.setMinZoomLevel(11);

        map.setTileSource(new XYTileSource("MapQuest",
                ResourceProxy.string.offline_mode, 11, 16, 256, ".jpg", new String[] {
                "http://otile1.mqcdn.com/tiles/1.0.0/map/",
                "http://otile2.mqcdn.com/tiles/1.0.0/map/",
                "http://otile3.mqcdn.com/tiles/1.0.0/map/",
                "http://otile4.mqcdn.com/tiles/1.0.0/map/"})); 
    }
}

使用 osmdroid-android-4.2 和 slf4j-api-1.7.10 权限是:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.READ_LOGS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE"/>

所以我有两个问题:为什么什么都没有显示? XYTileSource 中的 url 应该指向什么(我在教程中找到了这些 url)?

【问题讨论】:

  • 在调用map.setTileSource() 中,您有一个参数new XYTileSource(...".jpg" ...)jpg 应该是 png 吗?另外,我希望我也知道网址是什么。你发现了吗?
  • 问题已得到解答。

标签: osmdroid


【解决方案1】:

这是我最终使用的解决方案,它正在工作。如果我没记错的话,你不必关心 zip 文件名,虽然我不确定它是不是真的。

private void createMap(){
    map = (MapView) getActivity().findViewById(R.id.mapview);

    //first parameter indicates the folder inside the zip file containing the atlas.
    String atlasName = "MapQuest";
    String atlasExtension = ".png";
    int tileSizePixels = 256;
    int defaultLatitude = 400000000;
    int defaultLongitude = 20000000;
    int minZoom = 11;
    int maxZoom = 17;
    int defaultZoom = 14;

    map.setTileSource(new XYTileSource(atlasName, ResourceProxy.string.mapquest_osm, minZoom, maxZoom, tileSizePixels, atlasExtension, new String[] {}));

    map.setBuiltInZoomControls(true);
    map.getController().setZoom(defaultZoom);
    map.setClickable(true);

    map.getController().setCenter(new GeoPoint(defaultLatitude, defaultLongitude));
}

在 zip 文件中是以 .png 格式存储的图块。

希望它会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多