osmdroid XYTileSource не показывает плитки с сервера в Android

Я использую API OSMdroid для отображения пользовательских плиток. Они предоставляют оболочку Google для того же самого. Поэтому пытаюсь отобразить плитки с моего локального сервера

Вот мой код

final MapTileProviderBasic tileProvider = new MapTileProviderBasic(getApplicationContext());
final ITileSource tileSource = new XYTileSource("SomeName", null, 3, 20, 256, ".png",
                    "http://MyServer/tiles/");
tileProvider.setTileSource(tileSource);
final GoogleTilesOverlay tilesOverlay = new GoogleTilesOverlay(tileProvider, this.getBaseContext());
 mapView.getOverlays().add(tilesOverlay);

в макете я объявил вид карты следующим образом

<com.google.android.maps.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:apiKey="my API Key"
/>

Это отлично работает, если я помещаю плитки в SD-карту и использую следующий код

mProvider = new MapTileProviderBasic(getApplicationContext());
mProvider.setTileSource(TileSourceFactory.FIETS_OVERLAY_NL);
mTilesOverlay = new GoogleTilesOverlay(mProvider,getParent());
mTilesOverlay.setUseDataConnection(false);
mTilesOverlay.useDataConnection();
mapView.getOverlays().add(mTilesOverlay);
mapView.invalidate();   

person Nik    schedule 13.03.2012    source источник
comment
Вы проверили, что URL работает? (используйте URL-адрес в браузере на устройстве и убедитесь, что отображается плитка)   -  person pootle    schedule 13.03.2012
comment
Да, URL-адрес работает, если я помещаю его в браузер следующим образом: MyServer/tiles/15/x_y.png< /а>   -  person Nik    schedule 13.03.2012
comment
как насчет файлов журнала? вам нужно увидеть, что происходит, когда он пытается получить плитку. Или вы можете поставить точку останова кода с помощью отладчика, чтобы увидеть, что происходит, когда он пытается получить файл. Или вы можете попробовать использовать поставщика тайлов OSM. В логах сервера можно увидеть запрос тайла?   -  person pootle    schedule 13.03.2012
comment
правильно ли я называю плитку. Я создал их с помощью maptiles   -  person Nik    schedule 13.03.2012
comment
Хороший момент, мой тайловый сервер (построенный с помощью mapnik) использует zoom/x/y.png, я предположил, что ваша локальная копия будет использовать то же, что и сервер. Проверка журналов сервера покажет вам, что он запрашивает у сервера, чтобы подтвердить это.   -  person pootle    schedule 13.03.2012
comment
Я только что обнаружил, что некоторые изображения плитки отсутствуют в журналах сервера, но я думаю, что все остальные изображения должны отображаться правильно?   -  person Nik    schedule 13.03.2012


Ответы (1)


Вот мой рабочий код для xytilesource, надеюсь, он может быть кому-то полезен.

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        MapView mapView = (MapView) findViewById(R.id.mapview);
        mapView.setBuiltInZoomControls(true);

        mapView.getController().setZoom(5);
        GeoPoint point = new LatLonPoint(6.83917,79.91455);
        //mapView.getController().setCenter(new GeoPoint(51500000, 5400000));
        mapView.getController().setCenter(point);
        final MapTileProviderBasic tileProvider = new MapTileProviderBasic(getApplicationContext());
        final ITileSource tileSource = new XYTileSource("SomeName", null, 3,14, 256, ".png",
                        "http://192.168.1.5/mapcache/tms/1.0.0/ms-base@GoogleMapsCompatible/");
        //mapView.setTileSource((new XYTileSource("localMapnik", Resource, 0, 18, 256, ".png", 
            //  "http://tile.openstreetmap.org/"))); 
        tileProvider.setTileSource(tileSource);
        final TilesOverlay tilesOverlay = new TilesOverlay(tileProvider, this.getBaseContext());
        mapView.getOverlays().add(tilesOverlay);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    private static final class LatLonPoint extends GeoPoint {
        public LatLonPoint(double latitude, double longitude) {
            super((int) (latitude * 1E6), (int) (longitude * 1E6));
        }
    }

Файл макета должен включать

<org.osmdroid.views.MapView
    android:id="@+id/mapview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true" />
person MWH    schedule 01.06.2013