我只想基于一个shapefile(.sh)渲染2个文件:一个文件只有黄色的法国,另一个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。