使用自定义 ARCGis 瓦片服务器的 OSMDroid 应用程序 - 瓦片被洗牌
OSMDroid app using custom ARCGis tile server - tiles are shuffled
我正在使用 OSMDroid 开发 android 地图应用程序。我正在尝试使用完全独立于 google and/or bing api 的免费自定义航拍图像。请不要提出任何使用其映射 api 的解决方案。
我已经通过包含此代码来显示卫星图像:
mapView.setTileSource(TileSourceFactory.MAPQUESTAERIAL);
但是,图块服务器不提供 11 倍以上的图块,我需要比那个更近一点(比如说 15-16?)。
使用 ARCGis 瓦片服务器,我设法将卫星图像显示到 16 层缩放级别,但瓦片被打乱了。
mapControl = (MapController) mapView.getController();
mapControl.setZoom(11);
String[] urlArray = {"http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/"};
mapView.setTileSource(new XYTileSource("ArcGisOnline", null, 0, 18, 256, ".png",urlArray ));
底图图块被打乱,不对应 lat/lon,但覆盖没问题。
图块服务器可能使用不同的方案来检索图块。尝试翻转 X 和 Y 坐标。 Slippy 地图服务器 (osm) 使用 Z/X/Y.ext 格式。 ArgGis 和其他几个使用 Z/Y/X.ext 格式。所有其他坐标都相同。这意味着解决方案很简单,覆盖 getTileURLString 方法并以服务器需要的任何格式提供坐标。
Osmdroid 有一个例子可以做到这一点。
相关位代码this
mMapView.setTileSource(new OnlineTileSourceBase("USGS Topo", 0, 18, 256, "",
new String[] { "http://basemap.nationalmap.gov/ArcGIS/rest/services/USGSTopo/MapServer/tile/" }) {
@Override
public String getTileURLString(MapTile aTile) {
return getBaseUrl() + aTile.getZoomLevel() + "/" + aTile.getY() + "/" + aTile.getX()
+ mImageFilenameEnding;
}
});
您还需要在此更改后清除缓存,因为它的坐标有误
我正在使用 OSMDroid 开发 android 地图应用程序。我正在尝试使用完全独立于 google and/or bing api 的免费自定义航拍图像。请不要提出任何使用其映射 api 的解决方案。
我已经通过包含此代码来显示卫星图像:
mapView.setTileSource(TileSourceFactory.MAPQUESTAERIAL);
但是,图块服务器不提供 11 倍以上的图块,我需要比那个更近一点(比如说 15-16?)。
使用 ARCGis 瓦片服务器,我设法将卫星图像显示到 16 层缩放级别,但瓦片被打乱了。
mapControl = (MapController) mapView.getController();
mapControl.setZoom(11);
String[] urlArray = {"http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/"};
mapView.setTileSource(new XYTileSource("ArcGisOnline", null, 0, 18, 256, ".png",urlArray ));
底图图块被打乱,不对应 lat/lon,但覆盖没问题。
图块服务器可能使用不同的方案来检索图块。尝试翻转 X 和 Y 坐标。 Slippy 地图服务器 (osm) 使用 Z/X/Y.ext 格式。 ArgGis 和其他几个使用 Z/Y/X.ext 格式。所有其他坐标都相同。这意味着解决方案很简单,覆盖 getTileURLString 方法并以服务器需要的任何格式提供坐标。
Osmdroid 有一个例子可以做到这一点。
相关位代码this
mMapView.setTileSource(new OnlineTileSourceBase("USGS Topo", 0, 18, 256, "",
new String[] { "http://basemap.nationalmap.gov/ArcGIS/rest/services/USGSTopo/MapServer/tile/" }) {
@Override
public String getTileURLString(MapTile aTile) {
return getBaseUrl() + aTile.getZoomLevel() + "/" + aTile.getY() + "/" + aTile.getX()
+ mImageFilenameEnding;
}
});
您还需要在此更改后清除缓存,因为它的坐标有误