Я хочу визуализировать 2 файла, основываясь только на одном шейп-файле (.sh): один файл содержит только Францию желтого цвета, а другой файл png - только Канаду красным. Все страны в цвете по умолчанию.
Я попробую код, но он не работает. Кто-нибудь может мне помочь, пожалуйста? Вот мой код:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import mapnik, shapefile, sys
LEVEL_COLUMN = 6
COUNTRY_COLUMN = 3
DEFAULT_LEVEL = 2
# SHAPES
shape_filename='ne_110m_admin_0_countries.shp'
france_map = mapnik.Map(600, 300)
canada_map = mapnik.Map(600, 300)
countries = [
{
'name' : 'France',
'obj' : france_map,
'level' : 1
},
{
'name':'Canada',
'obj' : canada_map,
'level' : 3
}
]
for country in countries:
sh = shapefile.Editor(shape_filename)
sh.records
s = mapnik.Style()
r = mapnik.Rule()
country.get('obj').background = mapnik.Color('steelblue')
for table_attributaire in sh.records:
try:
if table_attributaire[COUNTRY_COLUMN] == country.get('name'):
table_attributaire[LEVEL_COLUMN] = country.get('level')
else:
# Others atributs to default value
table_attributaire[LEVEL_COLUMN] = DEFAULT_LEVEL
except KeyError as e:
print (e)
sh.save(shape_filename)
polygon_symbolizer = mapnik.PolygonSymbolizer(mapnik.Color('#f2eff9'))
r.symbols.append(polygon_symbolizer)
line_symbolizer = mapnik.LineSymbolizer(mapnik.Color('rgb(50%,50%,50%)'),0.1)
r.symbols.append(line_symbolizer)
s.rules.append(r)
r.filter = mapnik.Filter("[LEVEL] = 1 ")
symbol_level1 = mapnik.PolygonSymbolizer(mapnik.Color("yellow"))
r.symbols.append(symbol_level1)
s.rules.append(r)
r.filter = mapnik.Filter("[LEVEL] = 3")
symbol_level2 = mapnik.PolygonSymbolizer(mapnik.Color("red"))
r.symbols.append(symbol_level2)
s.rules.append(r)
country.get('obj').append_style('My Style',s)
ds = mapnik.Shapefile(file=shape_filename)
layer = mapnik.Layer('world')
layer.datasource = ds
layer.styles.append('My Style')
country.get('obj').layers.append(layer)
country.get('obj').zoom_all()
print('Render To File "{}"\n'.format('world-{}.png'.format(country.get('name'))))
mapnik.render_to_file(country.get('obj'),'world-{}.png'.format(country.get('name')), 'png')
Я посмотрел файл формы в каждом цикле: значения корректно изменены.
Столбец уровня "1" для "Франция" (все остальные до 2) и "3" для "Канада" (все остальные до 2).
К сожалению, файлы рендеринга одинаковы (Франция в желтом)
Можете ли вы помочь мне, пожалуйста? :)
Спасибо
F.