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