2016-05-07 61 views
0

我正在开发一个使用OSMDroid的android地图应用程序。我试图使用免费的自定义航拍图像,完全独立于谷歌和/或bing api。请不要提出任何使用其映射api的解决方案。OSMDroid应用程序使用自定义ARCGis瓷砖服务器 - 瓷砖洗牌

我已成功通过包括此代码显示卫星图像:(?比如说15-16)

mapView.setTileSource(TileSourceFactory.MAPQUESTAERIAL); 

,但瓷砖服务器不提供上述11变焦瓷砖和我需要得到撒尿比接近。

使用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)); 

底图瓦片被混洗,不对应经纬度,但覆盖是好的。

Basemap tiles are shuffled

回答

2

瓷砖服务器可能用来检索瓷砖不同的方案。尝试翻转X和Y坐标。滑动地图服务器(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; 
      } 
     }); 

您还需要此更改后清除高速缓存,因为它有错误的代码坐标

+0

PERFECTO。这正是发生的事情。 UPVOTED。公认。 –