def test_get_color(): colorizer = mapnik2.RasterColorizer() # Setup the color bands. band[N].color will apply to all # values 'v' if band[N].value <= v < band[N+1].color # If no color is found then "transparent" will be assigned bands = [(value, mapnik2.Color(color)) for value, color in [ ( 0, "#0044cc"), ( 10, "#00cc00"), ( 20, "#ffff00"), ( 30, "#ff7f00"), ( 40, "#ff0000"), ( 50, "#ff007f"), ( 60, "#ff00ff"), ( 70, "#cc00cc"), ( 80, "#990099"), ( 90, "#660066"), ( 200, "#ffffff"), ]] for value, color in bands: colorizer.append_band(value, color) eq_(colorizer.get_color(-1), mapnik2.Color("transparent")) eq_(colorizer.get_color(0), bands[0][1]) eq_(colorizer.get_color(5), bands[0][1]) eq_(colorizer.get_color(10), bands[1][1]) # last value is used if it matches exactly eq_(colorizer.get_color(200), bands[-1][1]) # values greater than the last value are mapped to "transparent" eq_(colorizer.get_color(201), mapnik2.Color("transparent"))
def test_get_color_with_max_value(): colorizer = mapnik2.RasterColorizer() c1 = mapnik2.Color("#0044cc") colorizer.append_band(0, c1) c2 = mapnik2.Color("#0055dd") colorizer.append_band(1, 2, c2) eq_(colorizer.get_color(-1), mapnik2.Color("transparent")) eq_(colorizer.get_color(0), c1) eq_(colorizer.get_color(0.5), c1) eq_(colorizer.get_color(1), c2) eq_(colorizer.get_color(1.5), c2) eq_(colorizer.get_color(2), mapnik2.Color("transparent"))
def test_dataraster_coloring(): srs = '+init=epsg:32630' lyr = mapnik2.Layer('dataraster') lyr.datasource = mapnik2.Gdal( file='../data/raster/dataraster.tif', band=1, ) lyr.srs = srs _map = mapnik2.Map(256, 256, srs) style = mapnik2.Style() rule = mapnik2.Rule() sym = mapnik2.RasterSymbolizer() # Assigning a colorizer to the RasterSymbolizer tells the later # that it should use it to colorize the raw data raster sym.colorizer = mapnik2.RasterColorizer(mapnik2.COLORIZER_DISCRETE, mapnik2.Color("transparent")) for value, color in [ (0, "#0044cc"), (10, "#00cc00"), (20, "#ffff00"), (30, "#ff7f00"), (40, "#ff0000"), (50, "#ff007f"), (60, "#ff00ff"), (70, "#cc00cc"), (80, "#990099"), (90, "#660066"), (200, "transparent"), ]: sym.colorizer.add_stop(value, mapnik2.Color(color)) rule.symbols.append(sym) style.rules.append(rule) _map.append_style('foo', style) lyr.styles.append('foo') _map.layers.append(lyr) _map.zoom_to_box(lyr.envelope()) im = mapnik2.Image(_map.width, _map.height) mapnik2.render(_map, im) # save a png somewhere so we can see it save_data('test_dataraster_coloring.png', im.tostring('png')) imdata = im.tostring() # we have some values in the [20,30) interval so check that they're colored assert contains_word('\xff\xff\x00\xff', imdata)
def test_get_color_exact(): #setup colorizer = mapnik2.RasterColorizer() colorizer.default_color = mapnik2.Color(0, 0, 0, 0) colorizer.default_mode = mapnik2.COLORIZER_EXACT colorizer.add_stop(10, mapnik2.Color(100, 100, 100, 100)) colorizer.add_stop(20, mapnik2.Color(200, 200, 200, 200)) #should be default colour eq_(colorizer.get_color(-50), mapnik2.Color(0, 0, 0, 0)) eq_(colorizer.get_color(11), mapnik2.Color(0, 0, 0, 0)) eq_(colorizer.get_color(20.001), mapnik2.Color(0, 0, 0, 0)) #should be stop 1 eq_(colorizer.get_color(10), mapnik2.Color(100, 100, 100, 100)) #should be stop 2 eq_(colorizer.get_color(20), mapnik2.Color(200, 200, 200, 200))
def test_get_color_discrete(): #setup colorizer = mapnik2.RasterColorizer() colorizer.default_color = mapnik2.Color(0, 0, 0, 0) colorizer.default_mode = mapnik2.COLORIZER_DISCRETE colorizer.add_stop(10, mapnik2.Color(100, 100, 100, 100)) colorizer.add_stop(20, mapnik2.Color(200, 200, 200, 200)) #should be default colour eq_(colorizer.get_color(-50), mapnik2.Color(0, 0, 0, 0)) eq_(colorizer.get_color(0), mapnik2.Color(0, 0, 0, 0)) #now in stop 1 eq_(colorizer.get_color(10), mapnik2.Color(100, 100, 100, 100)) eq_(colorizer.get_color(19), mapnik2.Color(100, 100, 100, 100)) #now in stop 2 eq_(colorizer.get_color(20), mapnik2.Color(200, 200, 200, 200)) eq_(colorizer.get_color(1000), mapnik2.Color(200, 200, 200, 200))
def ogc_RasterSymbolizer_to_mapnik(sym): if hasattr(sym, 'ColorMap'): m_sym = mapnik.RasterSymbolizer() type = sym.ColorMap.attrib.get('type', 'ramp') type_map = { 'ramp': mapnik.COLORIZER_LINEAR, 'intervals': mapnik.COLORIZER_DISCRETE, 'values': mapnik.COLORIZER_EXACT, } mode = type_map[type] colorizer = mapnik.RasterColorizer(mode, mapnik.Color('transparent')) for c in sym.ColorMap.ColorMapEntry: color = mapnik.Color(c.attrib['color']) color.a = int(float(c.attrib.get('opacity', 1)) * 255) value = float(c.attrib['quantity']) label = c.attrib.get('label', '') stop = mapnik.ColorizerStop(value, mapnik.COLORIZER_INHERIT, color) stop.label = label colorizer.add_stop(stop) m_sym.colorizer = colorizer yield m_sym
def test_get_color_linear(): #setup colorizer = mapnik2.RasterColorizer() colorizer.default_color = mapnik2.Color(0, 0, 0, 0) colorizer.default_mode = mapnik2.COLORIZER_LINEAR colorizer.add_stop(10, mapnik2.Color(100, 100, 100, 100)) colorizer.add_stop(20, mapnik2.Color(200, 200, 200, 200)) #should be default colour eq_(colorizer.get_color(-50), mapnik2.Color(0, 0, 0, 0)) eq_(colorizer.get_color(9.9), mapnik2.Color(0, 0, 0, 0)) #should be stop 1 eq_(colorizer.get_color(10), mapnik2.Color(100, 100, 100, 100)) #should be stop 2 eq_(colorizer.get_color(20), mapnik2.Color(200, 200, 200, 200)) #half way between stops 1 and 2 eq_(colorizer.get_color(15), mapnik2.Color(150, 150, 150, 150)) #after stop 2 eq_(colorizer.get_color(100), mapnik2.Color(200, 200, 200, 200))
def mapnik_rendering(f_pct,f_vct,f_render): import mapnik2 as mapnik ref_pct = GR.geo_raster.open(f_pct) proj = ref_pct.projection tr = ref_pct.geo_transform width = ref_pct.width height = ref_pct.height size_p = tr[1] minx = tr[0] maxy = tr[3] miny = tr[3] - height * size_p maxx = tr[0] + width * size_p bbox = (minx, miny, maxx, maxy) #---- init _map = mapnik.Map(width,height) _map.background = mapnik.Color('black') #----==== raster style_gdal = mapnik.Style() # style object to hold rules rule_gdal = mapnik.Rule() # rule object to hold symbolizers symbol_gdal = mapnik.RasterSymbolizer() #symbol_gdal.opacity = 0.5 #$symbol_gdal.colorizer = mapnik.RasterColorizer(mapnik.COLORIZER_INHERIT, mapnik.Color(255,255,255)) c = mapnik.RasterColorizer( mapnik.COLORIZER_LINEAR , mapnik.Color(0,0,0) ) c.epsilon = 0.001 c.add_stop(0) c.add_stop(900, mapnik.COLORIZER_LINEAR, mapnik.Color("#F3DDB4")) c.add_stop(1300, mapnik.COLORIZER_LINEAR, mapnik.Color("cyan")) c.add_stop(2000, mapnik.COLORIZER_LINEAR, mapnik.Color("white")) #c.get_color(2000) #c.stops[1].color #''' symbol_gdal.colorizer = c rule_gdal.symbols.append(symbol_gdal) style_gdal.rules.append(rule_gdal) _map.append_style("Raster Style", style_gdal) mlyr_gdal = mapnik.Layer('TM_images') mlyr_gdal.datasource = mapnik.Gdal(file=f_pct,band=1,bbox=bbox) #mlyr_gdal.srs = '+proj=utm +zone=46 +ellps=WGS84 +units=m +no_defs ' mlyr_gdal.styles.append('Raster Style') _map.layers.append(mlyr_gdal) #''' #----==== shape style_vct = mapnik.Style() # style object to hold rules rule_vct = mapnik.Rule() # rule object to hold symbolizers #==== ==== add labels symbol_text = mapnik.TextSymbolizer(mapnik.Expression('[Code_uniq]'), 'DejaVu Sans Book', 20, mapnik.Color('black')) symbol_text.halo_fill = mapnik.Color('white') symbol_text.halo_radius = 1 symbol_text.avoid_edges = True #symbol_text.allow_overlap = False symbol_text.vertical_alignment = mapnik.vertical_alignment.TOP symbol_text.label_placement = mapnik.label_placement.POINT_PLACEMENT #LINE_PLACEMENT # is default rule_vct.symbols.append(symbol_text) #==== ==== 1.add polygon symbol_vct = mapnik.PolygonSymbolizer(mapnik.Color('#059BFF')) symbol_vct.opacity = 1#0.6 rule_vct.symbols.append(symbol_vct) # add the symbolizer to the rule object #==== ==== 2.add outlines line_symbolizer = mapnik.LineSymbolizer(mapnik.Color('black'),0.3) rule_vct.symbols.append(line_symbolizer) # add the symbolizer to the rule object style_vct.rules.append(rule_vct) # now add the rule to the style and we're done _map.append_style('vector',style_vct) # Styles are given names only as they are applied to the map ds_shp = mapnik.Shapefile(file=f_vct) mlyr_shp = mapnik.Layer('lakes') mlyr_shp.datasource = ds_shp mlyr_shp.styles.append('vector') _map.layers.append(mlyr_shp) #''' _map.zoom_all() # Write the data to a png image called world.png the current directory mapnik.render_to_file(_map,f_render, 'png') print f_render
def mapnik_rendering(f_pct, f_vct, f_render): import mapnik2 as mapnik ref_pct = GR.geo_raster.open(f_pct) proj = ref_pct.projection tr = ref_pct.geo_transform width = ref_pct.width height = ref_pct.height size_p = tr[1] minx = tr[0] maxy = tr[3] miny = tr[3] - height * size_p maxx = tr[0] + width * size_p bbox = (minx, miny, maxx, maxy) #---- init _map = mapnik.Map(width, height) _map.background = mapnik.Color('black') #''' #----==== shape style_vct = mapnik.Style() # style object to hold rules rule_vct = mapnik.Rule() # rule object to hold symbolizers symbol_vct = mapnik.PolygonSymbolizer(mapnik.Color('#f2eff9')) symbol_vct.opacity = 0.8 rule_vct.symbols.append( symbol_vct) # add the symbolizer to the rule object line_symbolizer = mapnik.LineSymbolizer(mapnik.Color('rgb(50%,50%,50%)'), 0.1) rule_vct.symbols.append( line_symbolizer) # add the symbolizer to the rule object style_vct.rules.append( rule_vct) # now add the rule to the style and we're done _map.append_style( 'vector', style_vct ) # Styles are given names only as they are applied to the map ds_shp = mapnik.Shapefile(file=f_vct) mlyr_shp = mapnik.Layer('lakes') mlyr_shp.srs = '+proj=utm +zone=46 +ellps=WGS84 +units=m +no_defs ' mlyr_shp.datasource = ds_shp mlyr_shp.styles.append('vector') _map.layers.append(mlyr_shp) #''' #----==== raster style_gdal = mapnik.Style() # style object to hold rules rule_gdal = mapnik.Rule() # rule object to hold symbolizers symbol_gdal = mapnik.RasterSymbolizer() #symbol_gdal.mode = 'multiply' symbol_gdal.opacity = 0.5 #symbol_gdal.colorizer = mapnik.RasterColorizer(mapnik.COLORIZER_INHERIT, mapnik.Color(0,255,255)) c = mapnik.RasterColorizer(mapnik.COLORIZER_LINEAR, mapnik.Color(255, 0, 0)) c.epsilon = 0.001 c.add_stop(0) c.add_stop(255, mapnik.COLORIZER_LINEAR, mapnik.Color("red")) c.get_color(255) c.stops[1].color #''' symbol_gdal.colorizer = c rule_gdal.symbols.append(symbol_gdal) style_gdal.rules.append(rule_gdal) _map.append_style("Raster Style", style_gdal) mlyr_gdal = mapnik.Layer('TM_images') mlyr_gdal.datasource = mapnik.Gdal(file=f_pct, band=1, bbox=bbox) mlyr_gdal.srs = '+proj=utm +zone=46 +ellps=WGS84 +units=m +no_defs ' mlyr_gdal.styles.append('Raster Style') _map.layers.append(mlyr_gdal) #==== style_gdal1 = mapnik.Style() # style object to hold rules rule_gdal1 = mapnik.Rule() # rule object to hold symbolizers symbol_gdal1 = mapnik.RasterSymbolizer() #symbol_gdal.mode = 'multiply' symbol_gdal1.opacity = 0.5 #symbol_gdal.colorizer = mapnik.RasterColorizer(mapnik.COLORIZER_INHERIT, mapnik.Color(0,255,255)) c1 = mapnik.RasterColorizer(mapnik.COLORIZER_LINEAR, mapnik.Color(0, 255, 0)) c1.epsilon = 0.001 c1.add_stop(0) c1.add_stop(255, mapnik.COLORIZER_LINEAR, mapnik.Color("green")) c1.get_color(255) c1.stops[1].color #''' symbol_gdal1.colorizer = c1 rule_gdal1.symbols.append(symbol_gdal1) style_gdal1.rules.append(rule_gdal1) _map.append_style("Raster Style2", style_gdal1) mlyr_gdal1 = mapnik.Layer('TM_images2') mlyr_gdal1.datasource = mapnik.Gdal(file=f_pct, band=2, bbox=bbox) mlyr_gdal1.srs = '+proj=utm +zone=46 +ellps=WGS84 +units=m +no_defs ' mlyr_gdal1.styles.append('Raster Style2') _map.layers.append(mlyr_gdal1) #==== #==== style_gdal_b = mapnik.Style() # style object to hold rules rule_gdal_b = mapnik.Rule() # rule object to hold symbolizers symbol_gdal_b = mapnik.RasterSymbolizer() #symbol_gdal.mode = 'multiply' symbol_gdal_b.opacity = 0.5 #symbol_gdal.colorizer = mapnik.RasterColorizer(mapnik.COLORIZER_INHERIT, mapnik.Color(0,255,255)) c_b = mapnik.RasterColorizer(mapnik.COLORIZER_LINEAR, mapnik.Color(0, 0, 255)) c_b.epsilon = 0.001 c_b.add_stop(0) c_b.add_stop(255, mapnik.COLORIZER_LINEAR, mapnik.Color("blue")) c_b.get_color(255) c_b.stops[1].color #''' symbol_gdal_b.colorizer = c_b rule_gdal_b.symbols.append(symbol_gdal_b) style_gdal_b.rules.append(rule_gdal_b) _map.append_style("Raster Style3", style_gdal_b) mlyr_gdal_b = mapnik.Layer('TM_images3') mlyr_gdal_b.datasource = mapnik.Gdal(file=f_pct, band=3, bbox=bbox) mlyr_gdal_b.srs = '+proj=utm +zone=46 +ellps=WGS84 +units=m +no_defs ' mlyr_gdal_b.styles.append('Raster Style3') _map.layers.append(mlyr_gdal_b) #==== _map.zoom_all() # Write the data to a png image called world.png the current directory mapnik.render_to_file(_map, f_render, 'png')