Osmdroid 和 Mapnik 磁贴提供程序不再工作
Posted
技术标签:
【中文标题】Osmdroid 和 Mapnik 磁贴提供程序不再工作【英文标题】:Osmdroid and Mapnik tile provider no longer working 【发布时间】:2014-02-07 03:07:00 【问题描述】:我有一个开发、部署和以前成功的应用程序,它使用 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 web site issues list,Google 搜索也没有发现任何报告的新问题,所以我想问其他人是否看到 Mapnik 的这种新行为并可能知道修复?
【问题讨论】:
TileSourceFactory.MAPQUESTOSM 不再受支持 【参考方案1】:请关注Issue 515 跟踪此问题。我们已经实施了修复,我们将很快发布适当的更新。
【讨论】:
非常感谢。我一直在跟踪 515 并临时制作了一个修补过的 jar。不过我期待新版本,因为我更喜欢使用官方二进制文件。 版本 4.1 jar 现在修复了这个问题。非常感谢【参考方案2】:也有同样的问题。
不幸的是,osmdroid 似乎被禁止访问http://tile.openstreetmap.org。阅读tile usage policy,我发现这两件事可以解释为什么osmdroid被禁止:
未经系统管理员事先许可,禁止大量使用(例如,分发使用来自 openstreetmap.org 的图块的应用程序)。
和
有效的用户代理识别应用程序。伪造其他应用的 User-Agent 会让你被屏蔽。
(osmdroid 的用户代理是“Apache-HttpClient/UNAVAILABLE (java 1.4)”,非常通用)
【讨论】:
如果 osmdroid 允许设置用户代理(已经设置了吗?)会很好,因为我认为这会解决问题。它已经明确地将访问线程限制为 2 个以符合 OSM 使用策略。 我查看了osmdroid的源码,找不到任何手动更改用户代理的方法。因此,我创建了一个补丁,将用户代理更改为更符合 OSM 的磁贴使用策略的东西。你可以在这里找到更多信息:code.google.com/p/osmdroid/issues/detail?id=515 从 5.1 开始可以更改【参考方案3】:来自OpenPisteMap:
如果您开始收到“403 Forbidden”响应,停止。不要只是 不停地敲击服务器——这可能意味着你已经 因滥用行为而被禁止并继续抨击 服务器只会延长你的禁令。
http://wiki.osm.org/wiki/Blocked
【讨论】:
【参考方案4】:您可以使用此代码设置用户代理
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 以使其在现代机器人上运行的用户,请使用此答案,并包含来自 hc.apache.org/downloads.cgi 的 lib ver.4以上是关于Osmdroid 和 Mapnik 磁贴提供程序不再工作的主要内容,如果未能解决你的问题,请参考以下文章