最近我开始使用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)。
提前致谢, 卡森
答案 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