Я создал пользовательский UrlTileProvider
для визуализации плитки в MapsActivity
следующим образом:Пользовательские плитки не отображаются на карте GoogleMap
public class MapsActivity extends FragmentActivity {
private GoogleMap mMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
setUpMapIfNeeded();
}
@Override
protected void onResume() {
super.onResume();
setUpMapIfNeeded();
}
private void setUpMapIfNeeded() {
if (mMap == null) {
mMap = ((SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map)).getMap();
if (mMap != null) {
setUpMap();
}
}
}
private void setUpMap() {
TileProvider tileProvider = new CustomTileProvider();
TileOverlayOptions tileOverlayOptions = new TileOverlayOptions()
.tileProvider(tileProvider);
tileOverlayOptions.visible(true);
tileOverlayOptions.zIndex(10000);
TileOverlay tileOverlay = mMap.addTileOverlay(tileOverlayOptions);
}
}
..
public class CustomTileProvider extends UrlTileProvider {
private static final int TILE_WIDTH = 256;
private static final int TILE_HEIGHT = 256;
private static final int MIN_ZOOM = 12;
private static final int MAX_ZOOM = 16;
private static final String TILE_SERVER_URL = ...
public CustomTileProvider() {
this(TILE_WIDTH, TILE_HEIGHT);
}
public CustomTileProvider(final int width, final int height) {
super(width, height);
}
@Override
public URL getTileUrl(int x, int y, int zoom) {
String tileServerUrl = String.format(TILE_SERVER_URL, zoom, x, y);
if (!checkTileExists(x, y, zoom)) {
return null;
}
try {
return new URL(tileServerUrl);
} catch (MalformedURLException exception) {
throw new AssertionError(exception);
}
}
private boolean checkTileExists(int x, int y, int zoom) {
if ((zoom < MIN_ZOOM || zoom > MAX_ZOOM)) {
return false;
}
return true;
}
}
Это в основном те же, которые могут можно найти в Google documentation.
По какой-то причине плитки не отображаются в области, предоставляемой сервером. Метод getTileUrl()
никогда не вызывается.
Вы должны вернуть TileProvider.NO_TILE вместо нулевого, если вы не хотите предоставлять плитки для некоторого уровня масштабирования или координат x/y. Если вы абсолютно уверены, что метод никогда не вызывается, это, конечно же, не устранит вашу проблему. – user2808624
Класс 'abstract'' UrlTileProvider' требует реализации 'public abstract java.net.URL getTileUrl (int i, int i1, int i2);' – JJD