2016-05-07 75 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。公認。 –