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 磁贴提供程序不再工作的主要内容,如果未能解决你的问题,请参考以下文章

osmdroid离线地图不加载瓷砖

更改 OSMDroid 磁贴路径

OSMDROID android 4.2:Mapquest:截至 2016 年 7 月 11 日,直接磁贴访问已停止

使用 OSMDroid 实现的离线 StreetMap

osmdroid - 显示更大的图块

使用自定义凭据提供程序时,登录屏幕上出现多个磁贴