gpt4 book ai didi

python - 如何使用 libchamplain 在 Python 中加载本地瓦片或 OSM XML?

转载 作者:行者123 更新时间:2023-11-28 18:22:03 24 4
gpt4 key购买 nike

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

查看 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)

不幸的是,当运行应用程序时, map 没有显示,我收到以下错误消息:

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

基于一些 C 示例(onetwo),我假设缺少所谓的渲染器,称为 Memphis,它仅是 C。看起来 Champlain 的 ImageRenderer,尽管它的名字很相似,但似乎不是解决这个问题的正确工具。

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

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

非常感谢任何帮助。

最佳答案

我设法以一种非常简单的方式做到了:只需按照#z#/#x/#y# 逻辑组织您的图 block 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 文件。我不太确定它是如何工作的,我还没有尝试过。

关于python - 如何使用 libchamplain 在 Python 中加载本地瓦片或 OSM XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44607130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com