Картограф: Создание карты не удалось

Недавно я начал использовать Картограф. Я неопытный в SVG, поэтому создание карты создает для меня головную боль. После первоначальной проблемы с созданием карты мира, которая очерчивает границы страны - аналогично этому - и нескольким другим вещам (городские районы и некоторые элементы оформления), моя проблема сводится к недокументированному - или, по крайней мере, я не нашел ее в документах - ошибка. Я предполагаю, что это связано с моим невежеством в отношении структуры kartograph.py.

Файл 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 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), но быстро понял, что в файлах слишком много взаимодействия, чтобы я мог что-то быстро понять.

Я надеюсь, что предоставленных мною данных достаточно для того, чтобы кто-то, более знакомый с картографом, чем я, мог отследить ошибку.

ОБНОВЛЕНИЕ: ошибка все еще действительна. Я тестировал его как на MacBook Pro, так и на нетбуке Asus (Arch и Bodhi Linux соответственно).

Заранее спасибо, карсон

2 ответа

Решение

У меня также были проблемы с этой ошибкой. Но после многих попыток настроить все, я заметил, что, по-видимому, это появляется только в версии Kartograph из командной строки, а не при использовании Kartograph в качестве модуля Python в скрипте. Т.е. попробуйте включить словарь json в скрипт 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

Насколько я знаю, вы можете решить эту проблему, включив параметр 'bounds'. Это на самом деле очень сложно, потому что согласно документации (допустимо ли называть это "документацией"), эта ошибка не должна появляться, так как единственный обязательный параметр - это "слои". Кроме того, то, как определяются границы, зависит, по-видимому, от выбранной проекции. Для вашего примера я бы использовал простые границы многоугольника.

Другие вопросы по тегам