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))
Beispiel #6
0
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))
Beispiel #8
0
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


	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
Beispiel #9
0
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')