离线 OSMdroid 显示空地图
Offline OSMdroid shows empty map
我正在尝试在 android.support.v4.app.Fragment 中使用 OSMdroid 的离线模式。
MOBAC 使用围绕地球坐标 0,0 的 "OSMdroid Zip" 格式下载了我的图块(它只是大海,但我只想显示一些东西作为开始)。
我的 zip 文件位于 /sdcard/osmdroid/MapquestOSM.zip 中,包含 MapQuest 文件夹,该文件夹包含子文件夹中的所有图块,名称为数字,从 zoom 11 到 zoom 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)?
这是我最终使用的解决方案,它正在运行。如果我没记错的话,你不必关心 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 格式存储的图块。
希望对您有所帮助。
我正在尝试在 android.support.v4.app.Fragment 中使用 OSMdroid 的离线模式。 MOBAC 使用围绕地球坐标 0,0 的 "OSMdroid Zip" 格式下载了我的图块(它只是大海,但我只想显示一些东西作为开始)。
我的 zip 文件位于 /sdcard/osmdroid/MapquestOSM.zip 中,包含 MapQuest 文件夹,该文件夹包含子文件夹中的所有图块,名称为数字,从 zoom 11 到 zoom 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)?
这是我最终使用的解决方案,它正在运行。如果我没记错的话,你不必关心 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 格式存储的图块。
希望对您有所帮助。