Osmdroid和Mapnik瓦片提供者不再可用。

7

我有一个开发完成、部署成功并且之前运行良好的应用程序,它使用Osmdroid来加载默认瓷砖提供者Mapnik提供的瓷砖。

mMapView.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE);

或者

mMapView.setTileSource(TileSourceFactory.MAPNIK);

最近(也许是从今天开始),真实设备上的瓦片图层(一个手机和一个平板电脑)不再加载。我使用的是 osmdroid 版本 3.0.5。如果我在模拟器上尝试最新的 4.0 版本,当尝试下载地图瓦片时,在 logcat 中会看到“403 禁止响应”。如果我将瓦片源切换至

mMapView.setTileSource(TileSourceFactory.MAPQUESTOSM);

那么地图可以正常显示。我在Osmdroid网站问题列表上没有看到任何报告的问题,谷歌搜索也没有发现任何新的问题报告,所以我想问问是否有其他人看到了来自Mapnik的这种新行为并知道如何解决?


TileSourceFactory.MAPQUESTOSM不再受支持。 - Leo DroidCoder
4个回答

5

我也遇到了同样的问题。

不幸的是,osmdroid似乎被禁止访问http://tile.openstreetmap.org。阅读瓷砖使用政策,我发现这两件事可能解释了为什么osmdroid被禁止:

未经系统管理员事先许可,禁止进行大量使用(例如分发使用来自openstreetmap.org的瓦片的应用程序)。

有效的User-Agent标识应用程序。冒充另一个应用程序的User-Agent将使您被阻止。

(osmdroid的用户代理是“Apache-HttpClient / UNAVAILABLE(java 1.4)”,相当通用)


如果osmdroid允许设置用户代理(已经有了吗?) ,这将解决问题。它已经明确将访问线程限制为2个,以符合OSMs使用政策。 - Torsten Römer
2
我查看了osmdroid的源代码,但是没有找到任何手动更改用户代理的方法。因此,我创建了一个补丁,将用户代理更改为符合OSM瓦片使用政策的内容。您可以在这里找到更多信息:http://code.google.com/p/osmdroid/issues/detail?id=515。 - user3210008
自从5.1版本以来,它是可变的。 - spy

5
请关注问题515以跟踪此问题。我们已经实施了修复措施,并将很快发布一个适当的更新。

非常感谢。我一直在追踪515,现在已经暂时制作了一个修补过的jar包。不过我期待新版本的发布,因为我更喜欢使用官方二进制文件。 - NickT
1
版本4.1的jar现在修复了这个问题。非常感谢。 - NickT

1
你可以使用这段代码来设置用户代理。
HttpClientFactory.setFactoryInstance(new IHttpClientFactory() {
    public HttpClient createHttpClient() {
        final DefaultHttpClient client = new DefaultHttpClient();
        client.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "useragent");
        return client;
    }
});

大家好,来自2021年。对于那些仍需要使用osmdroid 4.x的人,为了使其在现代Android上正常工作,请使用此答案,并从https://hc.apache.org/downloads.cgi下载包含lib ver.4的库。 - djdance

1

来自OpenPisteMap:

如果您开始收到“403 Forbidden”响应,请停止。不要持续向服务器发送请求 - 这可能意味着您因滥用行为而被禁止,并且继续向服务器发送请求只会延长您的禁令。

http://wiki.osm.org/wiki/Blocked


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接