2

最近我开始使用 Kartograph。我对 SVG 没有经验,所以地图的创建让我很头疼。在创建概述国家边界的世界地图(类似于)和其他一些东西(城市区域和一些装饰元素)的最初麻烦之后,我的问题归结为无证 - 或者至少我没有在文档中找到它- 错误。我想这与我对 kartograph.py 框架的无知有关。

我提供的 Kartograph 的 json 文件如下所示:

    {
    "proj": {
        "id": "lonlat",
        "lon0": 20,
        "lat0": 0
    },
    "layers": {
        "background": {
            "special": "sea",
            "charset": "latin-1",
            "simplify": false
        },
        "graticule": {
            "special": "graticule",
            "charset": "latin-1",
            "simplify": false,
            "latitudes": 1,
            "longitudes": 1,
            "styles":{
                "stroke-width": "0.3px"
            }
        },
        "world":{
            "src": "ne_50m_admin_0_countries.shp",
            "charset": "latin-1",
            "simplify": false
        },
        "lakes":{
            "src": "Lakes.shp",
            "charset": "latin-1",
            "simplify": false
        },
        "trees":{
            "src": "Trees.shp",
            "charset": "latin-1",
            "simplify": false
        },
        "depth":{
            "src": "DepthContours.shp",
            "charset": "latin-1",
            "simplify": false
        },
        "cities":{
            "src": "CityAreas.shp",
            "charset": "latin-1",
            "simplify": false
        }
   }

}

我知道输出文件会很大,生成需要很长时间,但这只是一个测试。稍后我将尝试“简化”选项。文件中的大部分代码都基于本教程。此外,可能不需要空的简化子句,但 kartograph 抱怨缺少该选项,所以我添加了它。

我使用的命令是这个:

kartograph world.json -o world.svg

它在中止之前运行了一段时间(我猜是解析所有输入文件等)。现在,我面临的错误是这个:

    cli.py, in render_map()
  71: K.generate(cfg, args.output, preview=args.preview, format=format, stylesheet=css)  kartograph.py, in generate()
  46: _map = Map(opts, self.layerCache, format=format)  map.py, in __init__()
  50: me.bounds_poly = me._init_bounds()  map.py, in _init_bounds()
  192: features = self._get_bounding_geometry()  map.py, in _get_bounding_geometry()
  257: charset=layer.options['charset']
get_features() got an unexpected keyword argument 'filter'

我尝试查看引发错误的文件(map.py),但我很快意识到文件中的交互太多,我无法快速掌握。

我希望我提供的数据足以让比我更熟悉 kartograph 的人跟踪错误。

更新:错误仍然有效。我现在在 MacBook Pro 和华硕上网本(分别为 Arch 和 Bodhi Linux)上测试了它。

在此先感谢,卡森

4

2 回答 2

2

据我所知,您可以通过包含“边界”参数来解决该问题。这确实非常棘手,因为根据文档(将其称为“文档”是否有效),不应出现此错误,因为唯一需要的参数是“层”。此外,如何定义边界显然取决于所选的投影。对于您的示例,我将使用简单的多边形边界。

于 2014-06-27T13:32:08.043 回答
1

我也有这个错误的问题。但是,经过多次尝试设置所有内容后,我注意到它显然只出现在 Kartograph 的命令行版本中,而不是在将 Kartograph 用作脚本中的 Python 模块时出现。即,尝试将 json 字典包含在导入 kartograph 的 Python 脚本中,如下面的示例所示。

我还举了一个过滤的例子,作为记录,因为在使用命令行版本的 Kartograph 时,这是另一件失败的事情。

# file: makeMap.py
from kartograph import Kartograph
K = Kartograph()

def myfilter(record):
    return record['iso_a3'] in ["FRA","ITA","DEU"]


config = {
    "layers": {
        "mylayer": {
            "src": "ne_50m_admin_0_countries.shp",
            "filter": myfilter,
            "attributes": {"iso_a3":"iso_a3", "name":"name", "id":"iso_a3"}
        }
    }, 
}

K.generate(config, outfile='world.svg')

然后,将该脚本作为 Python 脚本运行:

python makeMap.py
于 2014-04-01T18:28:44.797 回答