Kartograph:地图创建失败

时间:2014-02-21 14:25:34

标签: javascript python svg kartograph

最近我开始使用Kartograph。我对SVG缺乏经验,因此地图创建给我带来了麻烦。在创建一个概述国家边界的世界地图(类似于this - 和其他一些东西(城市地区和一些装饰元素)的最初问题之后,我的问题归结为无证件 - 或者至少我没有找到它在文档中 - 错误。我想这与我对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
        }
   }

}

我知道输出文件很大,而且这一代人需要很长时间,但这只是一个测试。我稍后会尝试“简化”选项。该文件中的大部分代码都基于this tutorial。此外,空的简化条款可能没有必要,但是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)。

提前致谢, 卡森

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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