使用自定义ARCGis磁贴服务器的OSMDroid应用程序 - 磁贴被洗牌

时间:2016-05-07 13:05:54

标签: android arcgis osmdroid esri

我正在使用OSMDroid开发一个android映射应用程序。我试图使用免费自定义航拍图像,完全独立于谷歌和/或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,但叠加是可以的。

Basemap tiles are shuffled

1 个答案:

答案 0 :(得分:2)

磁贴服务器可能使用不同的方案来检索磁贴。尝试翻转X和Y坐标。 Slippy地图服务器(osm)使用Z / X / Y.ext格式。 ArgGis和其他几个人使用Z / Y / X.ext格式。所有其他坐标都是相同的。这意味着解决方案很简单,覆盖getTileURLString方法并以服务器所需的任何格式提供坐标。

Osmdroid就是这样做的一个例子。

https://github.com/osmdroid/osmdroid/blob/master/OpenStreetMapViewer/src/main/java/org/osmdroid/samplefragments/SampleCustomTileSource.java

相关位代码

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

您还希望在此更改后清除缓存,因为它的坐标错误