自定义地图平铺可以在Chrome中使用,但不能在Android中使用

自定义地图平铺可以在Chrome中使用,但不能在Android中使用,android,google-maps,Android,Google Maps,我正在构建一个Android应用程序,它使用自定义地图分幅。我一开始用的是一套效果很好但缩放级别和面积有限的相机。然后我切换到另一个瓷砖集,它覆盖了更多的区域,但只是拒绝在Android中显示。我可以在Javascript映射中看到它们,我的LogCat中没有错误,所以我不确定发生了什么 Android地图覆盖层只支持某些图像格式吗 以下是两个瓷砖集供参考: public class VfrTileProvider extends UrlTileProvider { // private st

我正在构建一个Android应用程序,它使用自定义地图分幅。我一开始用的是一套效果很好但缩放级别和面积有限的相机。然后我切换到另一个瓷砖集,它覆盖了更多的区域,但只是拒绝在Android中显示。我可以在Javascript映射中看到它们,我的LogCat中没有错误,所以我不确定发生了什么

Android地图覆盖层只支持某些图像格式吗

以下是两个瓷砖集供参考:

public class VfrTileProvider extends UrlTileProvider
{
//  private static final String BASE_URL = "http://www.mooproductions.org/vfrs/%d/%d/%d.png";
//  private static final String BASE_URL = "http://mw1.google.com/mw-planetary/lunar/lunarmaps_v1/clem_bw/%d/%d/%d.jpg";
    private static final String BASE_URL = "http://vfrmap.com/20170914/tiles/vfrc/%d/%d/%d.jpg";

    public VfrTileProvider (int width, int height)
    {
        super(width, height);
    }

    @Override
    public URL getTileUrl (int x, int y, int zoom)
    {
        int reversedY = (1 << zoom) - y - 1;
//      String tileUrl = String.format(Locale.US, BASE_URL, zoom, x, reversedY);
        String tileUrl = String.format(Locale.US, BASE_URL, zoom, reversedY, x);
        Log.d("Tile Provider", tileUrl);
        URL url = null;

        try { url = new URL(tileUrl); }
        catch (MalformedURLException e) { e.printStackTrace(); }

        return url;
    }
}
这一款既适用于网络,也适用于Android:

这张图片可以在网络上使用,但无法在Android上呈现:

下面是我用来提供瓷砖集的代码:

public class VfrTileProvider extends UrlTileProvider
{
//  private static final String BASE_URL = "http://www.mooproductions.org/vfrs/%d/%d/%d.png";
//  private static final String BASE_URL = "http://mw1.google.com/mw-planetary/lunar/lunarmaps_v1/clem_bw/%d/%d/%d.jpg";
    private static final String BASE_URL = "http://vfrmap.com/20170914/tiles/vfrc/%d/%d/%d.jpg";

    public VfrTileProvider (int width, int height)
    {
        super(width, height);
    }

    @Override
    public URL getTileUrl (int x, int y, int zoom)
    {
        int reversedY = (1 << zoom) - y - 1;
//      String tileUrl = String.format(Locale.US, BASE_URL, zoom, x, reversedY);
        String tileUrl = String.format(Locale.US, BASE_URL, zoom, reversedY, x);
        Log.d("Tile Provider", tileUrl);
        URL url = null;

        try { url = new URL(tileUrl); }
        catch (MalformedURLException e) { e.printStackTrace(); }

        return url;
    }
}

这是因为
VfrTileProvider.getTileUrl()
URL URL
对象的属性设置错误。您可以通过
setRequestProperty()
将其设置为正确:


我更喜欢第二个(
System.setProperty(“http.agent”),第二个(
)案例。

似乎问题不在图像格式中,但在Android本机应用程序中使用自定义平铺层:似乎本机应用程序无法显示特定缩放级别的地图,如果没有平铺,则无法自动跳过该层。可能是您开始从缩放级别显示地图时没有自定义分幅,而Google地图引擎只是停留在地图上(在缩放级别时没有自定义分幅)。另外,请添加一些源代码以更好地理解这个问题。我将地图的缩放级别设置为我知道有分幅的级别。我也尝试过缩放我服务器上的互动程序,然后退出,然后再返回,它从来不会“卡住”。事实上,我甚至在构建互动程序时注销其url,然后单击它们,它们就会在浏览器中打开。哦,我的天哪!我从来没有想到过!非常感谢。
URL url = null;
try {
    url = new URL(tileUrl);
    try {
        url.openConnection().setRequestProperty("User-Agent","<correct user agent name>");
    } catch (IOException e) {
        e.printStackTrace();
} catch (MalformedURLException e) {
    throw new AssertionError(e);
}
@Override
public void onMapReady (GoogleMap googleMap)
{
    System.setProperty("http.agent", "");    
    _map = googleMap;
    ...
}