【问题标题】:How to use libchamplain to load local tiles or OSM XML in Python?如何使用 libchamplain 在 Python 中加载本地切片或 OSM XML?
【发布时间】:2017-06-17 16:55:39
【问题描述】:

我正在尝试使用 GTK 和 libchamplain 从本地地图数据中显示地图。该应用程序将在没有互联网连接的计算机上运行。

查看mapbox.py 示例后,似乎应该将NetworkTileSource 源替换为FileTileSource。所以我使用minimal.py 示例来处理 FileTileSource:

widget = GtkChamplain.Embed()
widget.set_size_request(640, 480)

tile_source = Champlain.FileTileSource.new_full(
        ID,
        NAME,
        LICENSE_TEXT,
        LICENSE_URL,
        MIN_ZOOM,
        MAX_ZOOM,
        TILE_SIZE,
        Champlain.MapProjection.MERCATOR,
        Champlain.ImageRenderer())

tile_source.load_map_data("map.osm")
widget.get_view().set_map_source(tile_source)

很遗憾,在运行应用程序时,地图没有显示,并且我收到以下错误消息:

(minimal.py:26308): libchamplain-WARNING **: NULL pixbuf

基于一些 C 示例(onetwo),我假设缺少一个所谓的渲染器,称为 Memphis,它仅是 C。似乎 Champlain 的 ImageRenderer 尽管名称相似,但并不适合做这件事。

所以我的问题是我将如何继续这一点。除了 Memphis 之外,还有很多 OSM 渲染器,可能还有一些是用 Python 编写的,但是哪一个可以与 Champlain 很好地集成?

它也不一定是 OSM。我也可以使用一组预渲染的 PNG。只是FileTileSource documentation 特别提到“在给定路径加载 OpenStreetMap XML 文件”,这就是为什么我假设对 OSM 的支持更好。

非常感谢任何帮助。

【问题讨论】:

  • 您的问题解决了吗?
  • @mariotomo nope.
  • 现在呢? ;-)

标签: python gtk openstreetmap glib libchamplain


【解决方案1】:

我设法以一种非常简单的方式做到了这一点:只需按照 #z#/#x/#y# 逻辑 as described in the docs 组织您的图块,然后不要更改该 mapbox.py 示例中的任何内容,除了 URI。您的情况,/tmp 目录上的文件结构可能如下所示:

    MAX_ZOOM,
    TILE_SIZE,
    Champlain.MapProjection.MERCATOR,
    "file:///tmp/tiles-#Z#/#X#/#Y#.png",
    #"https://a.tiles.mapbox.com/v4/mapbox.streets/#Z#/#X#/#Y#.png?access_token=" + ACCESS_TOKEN,
    Champlain.ImageRenderer())

仍然根据文档,FileTileSource 用于使用单个 osm 文件。我不太确定它是如何工作的,我还没有尝试过。

【讨论】:

    猜你喜欢
    • 2016-08-20
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多