离线OSMdroid显示空地图

3
我正在尝试在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)?


您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Al Lelopath
问题已经得到解答。 - Vulpo
1个回答

1

这是我最终使用的解决方案,它可以工作。如果我没记错,你不必担心压缩文件的名称,虽然我不确定这是否正确。

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));
}

在压缩文件中,瓦片以 .png 格式存储。希望能对您有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接