2016-05-07 3 views
0

Я разрабатываю приложение для сопоставления android с помощью OSMDroid. Я пытаюсь использовать бесплатные пользовательские аэрофотоснимки, полностью независимые от google и/или bing api. Пожалуйста, не предлагайте ЛЮБОЕ решение, которое использует их сопоставление api.OSMDroid приложение с использованием пользовательского сервера ARCGis tile - плитки перетасовываются

мне удалось отобразить спутниковые снимки, включив этот код: (? Скажут 15-16)

mapView.setTileSource(TileSourceFactory.MAPQUESTAERIAL); 

, но сервер плитки не предлагает черепицу выше 11 зума и мне нужно, чтобы получить крошечные ближе, чем ,

Используя ARCGis tile server, мне удается отображать спутниковые снимки даже до уровня 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

ответ

2

Сервер плитки, вероятно, использует другую схему для извлечения фрагментов. Попробуйте перевернуть координаты X и Y. Slippy map servers (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. ПРИНЯТО. –