Пример #1
0
    def render(self, shp_address=[WORK_DIR+'all_point.shp',WORK_DIR+'path_point.shp',\
        WORK_DIR+'way.shp',WORK_DIR+'src_point.shp'], \
        save_add = WORK_DIR+'output.png', graph_size = [1200,1200], bg = '#000000'):

        graph = mapnik.Map(graph_size[0], graph_size[1])

        style = mapnik.Style()
        rule = mapnik.Rule()

        #polygon_symbolizer = mapnik.PolygonSymbolizer(mapnik.Color('white'))
        #rule.symbols.append(polygon_symbolizer)

        point_symbolizer = mapnik.PointSymbolizer(
            mapnik.PathExpression(WORK_DIR + "fig\red_small.png"))
        rule.symbols.append(point_symbolizer)

        apoint_symbolizer = mapnik.PointSymbolizer(
            mapnik.PathExpression(WORK_DIR +
                                  "fig\blue_small.png"))  #along the path
        rule.symbols.append(apoint_symbolizer)

        line_symbolizer = mapnik.LineSymbolizer(mapnik.Color('#00FA9A'),
                                                3)  #the path
        rule.symbols.append(line_symbolizer)

        ypoint_symbolizer = mapnik.PointSymbolizer(
            mapnik.PathExpression(WORK_DIR +
                                  "fig\yellow_small.png"))  # the src point
        rule.symbols.append(ypoint_symbolizer)

        style.rules.append(rule)
        graph.backgroud = mapnik.Color(bg)
        graph.append_style('default', style)
        #layer = ['polygon','line','point']
        #address = [poly_add, line_add, node_add]

        layer = ['point', 'point', 'line', 'point']
        address = [item for item in shp_address]

        for l1 in xrange(len(address)):
            ds = mapnik.Shapefile(file=address[l1])
            lay = mapnik.Layer(layer[l1])
            lay.datasource = ds
            lay.styles.append('default')
            graph.layers.append(lay)

        graph.zoom_all()
        mapnik.render_to_file(graph, save_add, 'png')
Пример #2
0
    def addShapeSingleSymbole(self, fName, name=None):
        if name is None:
            name = str.split(fName, ".")[0]
        clr = self.randomColor()
        ds = mapnik.Shapefile(file=fName)
        lyr = mapnik.Layer(name)
        lyr.datasource = ds
        geomType = str(ds.geometry_type())

        if geomType in ["Point", "MultiPoint"]:
            s = self.singlePointStyle(mapnik.PathExpression("Icons/point.png"),
                                      0.1)
        elif geomType in ["LineString", "MultiLineString", "Line"]:
            s = self.singleLineStyle(clr, 0.5)
        elif geomType in ["Polygon", "MultiPolygon"]:
            s = self.singlePolyStyle(clr)
        prjFile = fName.rsplit(".", 1)[0] + '.prj'
        prj = self.esriprj2standards(prjFile)
        if len(self.map.layers) == 0 and prj != '':
            self.map.srs = prj

        if prj != '': lyr.srs = prj
        self.map.append_style(name, s)
        lyr.styles.append(name)
        self.map.layers.append(lyr)
        #self.mapLayers.append(self.readOgrShape(fName))
        self.mapLayers[name] = geomType
        self.map.resize(self.width(), self.height())
        return [name, clr, geomType]
Пример #3
0
def test_line_pattern():
    s = mapnik.LinePatternSymbolizer(mapnik.PathExpression('../data/images/dummy.png'))
    eq_(s.filename, '../data/images/dummy.png')
    eq_(s.smooth,0.0)
    eq_(s.transform,'')
    eq_(s.comp_op,mapnik.CompositeOp.src_over)
    eq_(s.clip,True)
Пример #4
0
def test_shieldsymbolizer_modify():
    s = mapnik.ShieldSymbolizer(
        mapnik.Expression('[Field Name]'), 'DejaVu Sans Bold', 6,
        mapnik.Color('#000000'),
        mapnik.PathExpression('../data/images/dummy.png'))
    # transform expression
    s.transform = "rotate(30+[a]) scale(2*[sx] [sy])"
    eq_(s.transform, "rotate((30+[a])) scale(2*[sx], [sy])")
Пример #5
0
def test_shieldsymbolizer_init():
    s = mapnik.ShieldSymbolizer(
        mapnik.Expression('[Field Name]'), 'DejaVu Sans Bold', 6,
        mapnik.Color('#000000'),
        mapnik.PathExpression('../data/images/dummy.png'))
    eq_(s.anchor, (
        0.0,
        0.5,
    ))
    eq_(s.displacement, (0.0, 0.0))
    eq_(s.allow_overlap, False)
    eq_(s.avoid_edges, False)
    eq_(s.character_spacing, 0)
    eq_(str(s.name), str(mapnik.Expression('[Field Name]')))
    eq_(s.face_name, 'DejaVu Sans Bold')
    eq_(s.allow_overlap, False)
    eq_(s.fill, mapnik.Color('#000000'))
    eq_(s.force_odd_labels, False)
    eq_(s.halo_fill, mapnik.Color('rgb(255,255,255)'))
    eq_(s.halo_radius, 0)
    eq_(s.label_placement, mapnik.label_placement.POINT_PLACEMENT)
    eq_(s.minimum_distance, 0.0)
    eq_(s.text_ratio, 0)
    eq_(s.text_size, 6)
    eq_(s.wrap_width, 0)
    eq_(s.vertical_alignment, mapnik.vertical_alignment.MIDDLE)
    eq_(s.label_spacing, 0)
    eq_(s.label_position_tolerance, 0)
    # 22.5 * M_PI/180.0 initialized by default
    assert_almost_equal(s.max_char_angle_delta, 0.39269908169872414)

    eq_(s.wrap_character, ' ')
    eq_(s.text_transform, mapnik.text_transform.NONE)
    eq_(s.line_spacing, 0)
    eq_(s.character_spacing, 0)

    # r1341
    eq_(s.wrap_before, False)
    eq_(s.horizontal_alignment, mapnik.horizontal_alignment.MIDDLE)
    eq_(s.justify_alignment, mapnik.justify_alignment.MIDDLE)
    eq_(s.opacity, 1.0)

    # r2300
    eq_(s.minimum_padding, 0.0)

    # was mixed with s.opacity
    eq_(s.text_opacity, 1.0)

    eq_(s.shield_displacement, (0.0, 0.0))
    # TODO - the pattern in bindings seems to be to get/set
    # strings for PathExpressions... should we pass objects?
    eq_(s.filename, '../data/images/dummy.png')

    eq_(s.transform, 'matrix(1, 0, 0, 1, 0, 0)')

    raise Todo(
        "FontSet pickling support needed: http://trac.mapnik.org/ticket/348")
    eq_(s.fontset, '')
Пример #6
0
def test_shield_symbolizer_init():
    s = mapnik.ShieldSymbolizer(
        mapnik.Expression('[Field Name]'), 'DejaVu Sans Bold', 6,
        mapnik.Color('#000000'),
        mapnik.PathExpression('../data/images/dummy.png'))
    eq_(s.comp_op, mapnik.CompositeOp.src_over)
    eq_(s.clip, True)
    eq_(s.displacement, (0.0, 0.0))
    eq_(s.allow_overlap, False)
    eq_(s.avoid_edges, False)
    eq_(s.character_spacing, 0)
    #eq_(str(s.name), str(mapnik2.Expression('[Field Name]'))) name field is no longer supported
    eq_(s.face_name, 'DejaVu Sans Bold')
    eq_(s.allow_overlap, False)
    eq_(s.fill, mapnik.Color('#000000'))
    eq_(s.force_odd_labels, False)
    eq_(s.halo_fill, mapnik.Color('rgb(255,255,255)'))
    eq_(s.halo_radius, 0)
    eq_(s.label_placement, mapnik.label_placement.POINT_PLACEMENT)
    eq_(s.minimum_distance, 0.0)
    eq_(s.text_ratio, 0)
    eq_(s.text_size, 6)
    eq_(s.wrap_width, 0)
    eq_(s.vertical_alignment, mapnik.vertical_alignment.AUTO)
    eq_(s.label_spacing, 0)
    eq_(s.label_position_tolerance, 0)
    # 22.5 * M_PI/180.0 initialized by default
    assert_almost_equal(s.max_char_angle_delta, 0.39269908169872414)

    eq_(s.wrap_character, ' ')
    eq_(s.text_transform, mapnik.text_transform.NONE)
    eq_(s.line_spacing, 0)
    eq_(s.character_spacing, 0)

    # r1341
    eq_(s.wrap_before, False)
    eq_(s.horizontal_alignment, mapnik.horizontal_alignment.AUTO)
    eq_(s.justify_alignment, mapnik.justify_alignment.AUTO)
    eq_(s.opacity, 1.0)

    # r2300
    eq_(s.minimum_padding, 0.0)

    # was mixed with s.opacity
    eq_(s.text_opacity, 1.0)

    eq_(s.shield_displacement, (0.0, 0.0))
    # TODO - the pattern in bindings seems to be to get/set
    # strings for PathExpressions... should we pass objects?
    eq_(s.filename, '../data/images/dummy.png')

    # 11c34b1: default transform list is empty, not identity matrix
    eq_(s.transform, '')

    eq_(s.fontset, None)
Пример #7
0
def test_pointsymbolizer_pickle():
    raise Todo("point_symbolizer pickling currently disabled")
    p = mapnik.PointSymbolizer(
        mapnik.PathExpression("../data/images/dummy.png"))
    p2 = pickle.loads(pickle.dumps(p, pickle.HIGHEST_PROTOCOL))
    # image type, width, and height only used in contructor...
    eq_(p.filename, p2.filename)
    eq_(p.allow_overlap, p2.allow_overlap)
    eq_(p.opacity, p2.opacity)
    eq_(p.ignore_placement, p2.ignore_placement)
    eq_(p.placement, p2.placement)
Пример #8
0
def test_introspect_symbolizers():
    # create a symbolizer
    p = mapnik.PointSymbolizer(
        mapnik.PathExpression("../data/images/dummy.png"))
    p.allow_overlap = True
    p.opacity = 0.5

    eq_(p.allow_overlap, True)
    eq_(p.opacity, 0.5)
    eq_(p.filename, '../data/images/dummy.png')

    # make sure the defaults
    # are what we think they are
    eq_(p.allow_overlap, True)
    eq_(p.opacity, 0.5)
    eq_(p.filename, '../data/images/dummy.png')

    # contruct objects to hold it
    r = mapnik.Rule()
    r.symbols.append(p)
    s = mapnik.Style()
    s.rules.append(r)
    m = mapnik.Map(0, 0)
    m.append_style('s', s)

    # try to figure out what is
    # in the map and make sure
    # style is there and the same

    s2 = m.find_style('s')
    rules = s2.rules
    eq_(len(rules), 1)
    r2 = rules[0]
    syms = r2.symbols
    eq_(len(syms), 1)

    ## TODO here, we can do...
    sym = syms[0]
    # this is hackish at best
    p2 = sym.symbol()
    assert isinstance(p2, mapnik.PointSymbolizer)

    eq_(p2.allow_overlap, True)
    eq_(p2.opacity, 0.5)
    eq_(p2.filename, '../data/images/dummy.png')

    ## but we need to be able to do:
    p2 = syms[0]  # get the actual symbolizer, not the variant object
    # this will throw for now...
    assert isinstance(p2, mapnik.PointSymbolizer)

    eq_(p2.allow_overlap, True)
    eq_(p2.opacity, 0.5)
    eq_(p2.filename, '../data/images/dummy.png')
Пример #9
0
def shield():
    symbolizer = mapnik.ShieldSymbolizer(mapnik.Expression('[ref]'), 'DejaVu Sans Book', 8, mapnik.Color('black'),
                                         mapnik.PathExpression(BASE_PATH + '../shields/motorway_shield4.png'))
    # symbolizer.filename = file
    # symbolizer.allow_overlap = True
    # if color is not None:
    #     symbolizer.fill = color
    # if transform is not None:
    #     symbolizer.transform = transform
    symbolizer.min_distance = 300

    return symbolizer
Пример #10
0
def test_pointsymbolizer_init():
    p = mapnik.PointSymbolizer()
    eq_(p.allow_overlap, False)
    eq_(p.opacity, 1)
    eq_(p.filename, '')
    eq_(p.ignore_placement, False)
    eq_(p.placement, mapnik.point_placement.CENTROID)

    p = mapnik.PointSymbolizer(
        mapnik.PathExpression("../data/images/dummy.png"))
    p.allow_overlap = True
    p.opacity = 0.5
    p.ignore_placement = True
    p.placement = mapnik.point_placement.INTERIOR
    eq_(p.allow_overlap, True)
    eq_(p.opacity, 0.5)
    eq_(p.filename, '../data/images/dummy.png')
    eq_(p.ignore_placement, True)
    eq_(p.placement, mapnik.point_placement.INTERIOR)
Пример #11
0
def test_point_symbolizer():
    p = mapnik.PointSymbolizer()
    eq_(p.filename,'')
    eq_(p.transform,'')
    eq_(p.opacity,1.0)
    eq_(p.allow_overlap,False)
    eq_(p.ignore_placement,False)
    eq_(p.comp_op,mapnik.CompositeOp.src_over)
    eq_(p.placement, mapnik.point_placement.CENTROID)

    p = mapnik.PointSymbolizer(mapnik.PathExpression("../data/images/dummy.png"))
    p.allow_overlap = True
    p.opacity = 0.5
    p.ignore_placement = True
    p.placement = mapnik.point_placement.INTERIOR
    eq_(p.allow_overlap, True)
    eq_(p.opacity, 0.5)
    eq_(p.filename,'../data/images/dummy.png')
    eq_(p.ignore_placement,True)
    eq_(p.placement, mapnik.point_placement.INTERIOR)
Пример #12
0
def test_shield_symbolizer_modify():
    s = mapnik.ShieldSymbolizer(
        mapnik.Expression('[Field Name]'), 'DejaVu Sans Bold', 6,
        mapnik.Color('#000000'),
        mapnik.PathExpression('../data/images/dummy.png'))

    # transform expression
    def check_transform(expr, expect_str=None):
        s.transform = expr
        eq_(s.transform, expr if expect_str is None else expect_str)

    check_transform("matrix(1 2 3 4 5 6)", "matrix(1, 2, 3, 4, 5, 6)")
    check_transform("matrix(1, 2, 3, 4, 5, 6 +7)",
                    "matrix(1, 2, 3, 4, 5, (6+7))")
    check_transform("rotate([a])")
    check_transform("rotate([a] -2)", "rotate(([a]-2))")
    check_transform("rotate([a] -2 -3)", "rotate([a], -2, -3)")
    check_transform("rotate([a] -2 -3 -4)", "rotate(((([a]-2)-3)-4))")
    check_transform("rotate([a] -2, 3, 4)", "rotate(([a]-2), 3, 4)")
    check_transform("translate([tx]) rotate([a])")
    check_transform("scale([sx], [sy]/2)")
Пример #13
0
def tileMap(request, version, ezmap_id, zoom, x, y):
    try:
        if version != "1.0":
            raise Http404
        try:
            ezmap = EzMap.objects.get(id=ezmap_id)
            layersMapOptions = LayerMapOptions.objects.filter(
                ezmap=ezmap, visible=True).order_by('-position')
        except Shapefile.DoesNotExist or Feature.DoesNotExist:
            raise Http404
        zoom = int(zoom)
        x = int(x)
        y = int(y)
        if zoom < 0 or zoom > MAX_ZOOM_LEVEL:
            raise Http404
        xExtent = _unitsPerPixel(zoom)
        yExtent = _unitsPerPixel(zoom)
        minLong = x * xExtent - 20037508.34
        minLat = y * yExtent - 20037508.34
        maxLong = minLong + xExtent
        maxLat = minLat + yExtent
        if (minLong < -20037508.34 or maxLong > 20037508.34
                or minLat < -20037508.34 or maxLat > 20037508.34):
            raise Http404

        if ezmap.changed:
            #create de mapnik.map object
            ezmap.changed = False
            ezmap.save()
            map = mapnik.Map(
                TILE_WIDTH, TILE_HEIGHT,
                "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +no_defs +over"
            )
            #map.background = mapnik.Color("#ffffff")
            #defining the feature layer
            for layer in layersMapOptions.all():
                label = LayerLabel.objects.get(layerMapOptions=layer)
                for layerStyle in layer.styles.all():
                    shapefile = layer.layer
                    geometryField = utils.calcGeometryField(
                        shapefile.geom_type)
                    query = '(select ' + geometryField + ', attribute_value->\'' + label.field.name + '\' as label, id_relat from "shapefile_feature" where' + ' shapefile_id in (' + str(
                        shapefile.id) + ')) as geom'

                    ##                    datasource = mapnik.SQLite(file='C:\mygeosite\sqlite3\sql3.db',
                    ##                                                    table=query,
                    ##                                                    srid=3857,
                    ##                                                    geometry_field=geometryField,
                    ##                                                    use_spatial_index=False)

                    datasource = mapnik.PostGIS(
                        user=dbSettings['USER'],
                        password=dbSettings['PASSWORD'],
                        dbname=dbSettings['NAME'],
                        table=query,
                        srid=3857,
                        geometry_field=geometryField,
                        geometry_table='"shapefile_feature"')

                    featureLayer = mapnik.Layer(
                        str(shapefile.filename) + str(layerStyle.id))
                    featureLayer.srs = "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +no_defs +over"
                    featureLayer.datasource = datasource
                    featureLayer.styles.append(
                        str(shapefile.filename) + '_Style' +
                        str(layerStyle.id))

                    #defining the feature layer styles
                    rule = mapnik.Rule()
                    if shapefile.geom_type in ["Point", "MultiPoint"]:
                        s = mapnik.PointSymbolizer(
                            mapnik.PathExpression(str(layerStyle.iconName)))
                        s.allow_overlap = True
                        rule.symbols.append(s)
                    elif shapefile.geom_type in [
                            "LineString", "MultiLineString"
                    ]:
                        rule.symbols.append(
                            mapnik.LineSymbolizer(
                                mapnik.Color(str(layerStyle.strokeColor)),
                                layerStyle.strokeWeight))
                    elif shapefile.geom_type in ["Polygon", "MultiPolygon"]:
                        p = mapnik.PolygonSymbolizer(
                            mapnik.Color(str((layerStyle.fillColor))))
                        p.fill_opacity = layerStyle.fillOpacity
                        rule.symbols.append(p)
                        rule.symbols.append(
                            mapnik.LineSymbolizer(
                                mapnik.Color(str(layerStyle.strokeColor)),
                                layerStyle.strokeWeight))

                    label = mapnik.TextSymbolizer(
                        mapnik.Expression('[label]'), 'DejaVu Sans Book',
                        label.font_size, mapnik.Color(str(label.font_color)))
                    label.halo_fill = mapnik.Color(str(label.halo_color))
                    label.halo_radius = int(label.halo_radius)
                    label.label_placement = mapnik.label_placement.INTERIOR_PLACEMENT
                    label.allow_overlap = False
                    label.avoid_edges = True
                    rule.symbols.append(label)
                    style = mapnik.Style()
                    style.rules.append(rule)

                    #add new feature to the map
                    map.append_style(
                        str(shapefile.filename) + '_Style' +
                        str(layerStyle.id), style)
                    map.layers.append(featureLayer)

            #saving the map mapnik xml
            mapnik.save_map(
                map, "c:\\mygeosite\\tilestache\\%s\\%s.xml" %
                (str(request.user), str(ezmap.map_name)))

        config = {
            "cache": {
                "name": "test",
                "path": "../tilestache/%s" % (request.user),
                "umask": "0000",
                "dirs": "portable"
            },
            "layers": {
                ezmap.map_name: {
                    "provider": {
                        "name":
                        "mapnik",
                        "mapfile":
                        "../tilestache/%s/%s.xml" %
                        (request.user, ezmap.map_name)
                    },
                    "projection": "spherical mercator"
                }
            }
        }

        # like http://tile.openstreetmap.org/1/0/0.png
        #coord = ModestMaps.Core.Coordinate(y, x, zoom)
        path = "/%s/%s/%s/%s.png" % (ezmap.map_name, zoom, x, y)
        config = TileStache.Config.buildConfiguration(config)
        #type, bytes = TileStache.getTile(config.layers[shapefile.filename], coord, 'png')
        type, bytes = TileStache.requestHandler(config, path)
        return HttpResponse(bytes, mimetype="image/png")

    except:
        traceback.print_exc()
        return HttpResponse("")
Пример #14
0
### START Layer 1
###

# style object to hold rules
s = mapnik.Style()

# rule object to hold symbolizers
r = mapnik.Rule()
r2 = mapnik.Rule()

# Lines (outlines of polygons and/or simple lines. Line-Color (RGB) line-thickness
polygon_symbolizer = mapnik.PolygonSymbolizer(
    mapnik.Color('red'))  #rgb(5%,5%,5%)

# Point Style. Path to marker.png
point_symbolizer = mapnik.PointSymbolizer(mapnik.PathExpression(point_marker))

# Allow Overlaps and set opacity of marker
point_symbolizer.allow_overlap = True
point_symbolizer.opacity = 0.7

# add the polygon_symbolizer to the rule object
r.symbols.append(polygon_symbolizer)
r2.symbols.append(point_symbolizer)

# now add the rule(s) to the style
s.rules.append(r)
s.rules.append(r2)

# Styles are added to the map
m.append_style('My Style', s)
Пример #15
0
def school_sheds_results(request=None,
                         school_id=None,
                         bbox=None,
                         width=816,
                         height=1056,
                         srid=3857,
                         format='png'):
    '''
    Default height and width are 'Letter' ratio
    '''

    format = format.encode('ascii')
    school = School.objects.get(pk=school_id)
    point = school.geometry
    circle = point.buffer(3400.0)

    m = mapnik.Map(int(width), int(height), "+init=epsg:" + str(srid))

    mapnik.load_map(m, os.path.dirname(__file__) + "/basemap/basemap.xml")

    if bbox is None:
        circle.transform(srid)
        bbox = mapnik.Box2d(*circle.extent)
    m.zoom_to_box(bbox)

    #m.background = mapnik.Color('steelblue')

    # styles for sheds
    s = mapnik.Style()
    for name, color in (('0.5', VIOLET), ('1.0', PURPLE), ('1.5', LAVENDER),
                        ('2.0', LIGHTCYAN)):
        r = mapnik.Rule()
        r.filter = mapnik.Expression("[name] = " + name)
        c = mapnik.Color(color)
        c.a = 80
        line_symbolizer = mapnik.LineSymbolizer(mapnik.Color("gray"), 1)
        poly_symbolizer = mapnik.PolygonSymbolizer(c)
        r.symbols.append(line_symbolizer)
        r.symbols.append(poly_symbolizer)
        s.rules.append(r)

    # styles for schools
    school_colors = SCHOOL_COLORS

    for name, color in school_colors:
        r = mapnik.Rule()
        r.filter = mapnik.Expression("[name] = '" + name + "'")
        line_symbolizer = mapnik.LineSymbolizer()
        poly_symbolizer = mapnik.PolygonSymbolizer(mapnik.Color(color))
        r.symbols.append(line_symbolizer)
        r.symbols.append(poly_symbolizer)
        s.rules.append(r)
    r = mapnik.Rule()
    r.filter = mapnik.Expression(
        "[name] != 'map_title' and [name] != 'map_subtitle' and [name] != 'legend_title' and [name] != 'school'"
    )
    text_symbolizer = mapnik.TextSymbolizer(mapnik.Expression('[label]'),
                                            'DejaVu Sans Book', 9,
                                            mapnik.Color('black'))
    text_symbolizer.halo_fill = mapnik.Color('white')
    text_symbolizer.halo_radius = 1
    text_symbolizer.horizontal_alignment = mapnik.horizontal_alignment.RIGHT
    #text_symbolizer.label_placement = mapnik.label_placement.VERTEX_PLACEMENT
    text_symbolizer.allow_overlap = True
    text_symbolizer.displacement = (12, 0)
    r.symbols.append(text_symbolizer)
    s.rules.append(r)

    r = mapnik.Rule()
    r.filter = mapnik.Expression("[name] = 'map_title'")
    text_symbolizer = mapnik.TextSymbolizer(mapnik.Expression('[label]'),
                                            'DejaVu Sans Book', 15,
                                            mapnik.Color('black'))
    text_symbolizer.horizontal_alignment = mapnik.horizontal_alignment.RIGHT
    text_symbolizer.halo_fill = mapnik.Color('white')
    text_symbolizer.allow_overlap = True
    r.symbols.append(text_symbolizer)
    s.rules.append(r)

    r = mapnik.Rule()
    r.filter = mapnik.Expression("[name] = 'map_subtitle'")
    text_symbolizer = mapnik.TextSymbolizer(mapnik.Expression('[label]'),
                                            'DejaVu Sans Book', 12,
                                            mapnik.Color('black'))
    text_symbolizer.horizontal_alignment = mapnik.horizontal_alignment.RIGHT
    text_symbolizer.halo_fill = mapnik.Color('white')
    text_symbolizer.allow_overlap = True
    r.symbols.append(text_symbolizer)
    s.rules.append(r)

    r = mapnik.Rule()
    r.filter = mapnik.Expression("[name] = 'legend_title'")
    text_symbolizer = mapnik.TextSymbolizer(mapnik.Expression('[label]'),
                                            'DejaVu Sans Condensed Bold', 11,
                                            mapnik.Color('black'))
    text_symbolizer.horizontal_alignment = mapnik.horizontal_alignment.RIGHT
    text_symbolizer.halo_fill = mapnik.Color('white')
    text_symbolizer.halo_radius = 1
    text_symbolizer.allow_overlap = True
    r.symbols.append(text_symbolizer)
    s.rules.append(r)

    r = mapnik.Rule()
    r.filter = mapnik.Expression("[name] = 'legend_box'")
    poly_symbolizer = mapnik.PolygonSymbolizer(mapnik.Color("white"))
    line_symbolizer = mapnik.LineSymbolizer(mapnik.Color("black"), 0.5)
    poly_symbolizer.fill_opacity = 0.8
    r.symbols.append(line_symbolizer)
    r.symbols.append(poly_symbolizer)
    s.rules.append(r)

    r = mapnik.Rule()
    r.filter = mapnik.Expression("[name] = 'school'")
    ps = mapnik.PointSymbolizer(
        mapnik.PathExpression(
            os.path.dirname(__file__) + '/static/img/School.svg'))
    ps.transform = 'scale(0.06)'
    ps.allow_overlap = True
    #shield.label_placement = mapnik.label_placement.POINT_PLACEMENT
    r.symbols.append(ps)
    s.rules.append(r)

    m.append_style("surveys", s)

    def p2l(pct_x, pct_y):
        loc_x = bbox.minx + (bbox.maxx - bbox.minx) * pct_x / 100.0
        loc_y = bbox.miny + (bbox.maxy - bbox.miny) * pct_y / 100.0
        return (loc_x, loc_y)

    sheds = {
        0.5: school.shed_05,
        1.0: school.shed_10,
        1.5: school.shed_15,
        2.0: school.shed_20
    }

    csv_string = 'wkt,name,label\n'
    for key, g in reversed(sorted(sheds.items(), key=lambda a: a[0])):
        if g is None:
            continue
        g.srid = 26986
        g.transform(srid)
        csv_string += '"%s","%s",""\n' % (g.wkt, str(key))

    surveys = Survey.objects.filter(school=school)
    for survey in surveys:
        survey.location.transform(srid)

        children = list(survey.child_set.all())
        if len(children) > 0:
            for c in children:
                name = str(c.to_school)
                point = survey.location
                point.x += random.randint(-50, 50)
                point.y += random.randint(-50, 50)
                school_circle = point.buffer(50)
                csv_string += '"%s","%s",""\n' % (school_circle.wkt, name)

        else:
            name = "o"
            point = survey.location
            point.x += random.randint(-50, 50)
            point.y += random.randint(-50, 50)
            school_circle = point.buffer(50)
            csv_string += '"%s","%s",""\n' % (school_circle.wkt, name)

    #Add School geometry
    school.geometry.transform(srid)
    csv_string += '"%s","school","%s"\n' % (school.geometry.wkt, school.name)

    def box(minx, miny, maxx, maxy):
        lmin = Point(p2l(minx, miny))
        lmax = Point(p2l(maxx, maxy))
        lr = LinearRing((lmin.x, lmin.y), (lmax.x, lmin.y), (lmax.x, lmax.y),
                        (lmin.x, lmax.y), (lmin.x, lmin.y))
        poly = Polygon(lr)
        return poly

    legend = box(2, 108, 50, 113.5)
    csv_string += '"%s","%s","%s"\n' % (legend.wkt, "legend_box", "")

    xy = p2l(3.5, 112)
    point = Point(*xy)
    csv_string += '"%s","%s","School Commute Survey Results"\n' % (point.wkt,
                                                                   "map_title")

    xy = p2l(3.5, 109.5)
    point = Point(*xy)
    csv_string += '"%s","%s","%s, %s"\n' % (point.wkt, "map_subtitle", school,
                                            school.districtid)

    legend_x = 53

    legend = box(legend_x, 97, 97.5, 113.5)
    csv_string += '"%s","%s","%s"\n' % (legend.wkt, "legend_box", "")

    xy = p2l(legend_x + 1.5, 112)
    point = Point(*xy)
    csv_string += '"%s","legend_title","Approx. home locations and travel to school mode"\n' % (
        point.wkt, )

    walksheds_x = 88
    xy = p2l(walksheds_x, 112)
    point = Point(*xy)
    csv_string += '"%s","legend_title","Walksheds"\n' % (point.wkt, )

    y = 111.5
    for name, label in school_colors:
        y -= 1.8
        xy = p2l(legend_x + 2, y)
        point = Point(*xy)
        circle = point.buffer(50)
        csv_string += '"%s","%s","%s"\n' % (circle.wkt, name, MODE_DICT[name])

    y = 110
    for name in (
            '0.5',
            '1.0',
            '1.5',
            '2.0',
    ):
        y -= 2.4
        ws = box(walksheds_x, y, walksheds_x + 2, y + 1.5)
        csv_string += '"%s","%s","%s  Mile"\n' % (ws.wkt, name, name)

    layer = mapnik.Layer('surveys', "+init=epsg:" + str(srid))
    ds = mapnik.Datasource(type="csv", inline=csv_string.encode('ascii'))
    layer.datasource = ds
    layer.styles.append('surveys')
    m.layers.append(layer)

    # Render to image
    if format == 'pdf':
        tmp_file = tempfile.NamedTemporaryFile()
        surface = cairo.PDFSurface(tmp_file.name, m.width, m.height)
        mapnik.render(m, surface)
        surface.finish()
        tmp_file.seek(0)
        im = tmp_file.read()
    else:
        im = mapnik.Image(m.width, m.height)
        mapnik.render(m, im)
        im = im.tostring(format)

    response = HttpResponse()
    response['Content-length'] = str(len(im))
    response['Content-Type'] = mimetypes.types_map['.' + format]
    response.write(im)

    return response
Пример #16
0
def xml_map_config(request, zoom, x, y, basqui_map, layersMapOptions):
    basqui_map.changed = False
    basqui_map.save()
    map = mapnik.Map(
        TILE_WIDTH, TILE_HEIGHT,
        "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +no_defs +over"
    )

    for layer in layersMapOptions.all():
        try:
            layerLabel = LayerLabel.objects.get(layerMapOptions=layer)
        except ObjectDoesNotExist:
            layerLabel = None
        for layerStyle in layer.styles.all():
            shapefile = layer.layer
            geometryField = utils.calcGeometryField(shapefile.geom_type)
            if layerLabel:
                query = '(select ' + geometryField + ', attribute_value->\'' + layerLabel.field.name + '\' as label, id_relat from "shapefile_feature" where' + ' shapefile_id in (' + str(
                    shapefile.id) + ')) as geom'
            else:
                query = '(select ' + geometryField + ', id_relat from "shapefile_feature" where' + ' shapefile_id in (' + str(
                    shapefile.id) + ')) as geom'

            datasource = mapnik.PostGIS(user=dbSettings['USER'],
                                        password=dbSettings['PASSWORD'],
                                        dbname=dbSettings['NAME'],
                                        port=5433,
                                        table=query,
                                        srid=3857,
                                        geometry_field=geometryField,
                                        geometry_table='"shapefile_feature"')

            featureLayer = mapnik.Layer(
                str(shapefile.filename) + str(layerStyle.id))
            featureLayer.srs = "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +no_defs +over"
            featureLayer.datasource = datasource
            featureLayer.styles.append(
                str(shapefile.filename) + '_Style' + str(layerStyle.id))

            #defining the feature layer styles
            style_rule = mapnik.Rule()
            if shapefile.geom_type in ["Point", "MultiPoint"]:
                s = mapnik.PointSymbolizer(
                    mapnik.PathExpression(str(layerStyle.iconName)))
                s.allow_overlap = True
                style_rule.symbols.append(s)
            elif shapefile.geom_type in ["LineString", "MultiLineString"]:
                style_rule.symbols.append(
                    mapnik.LineSymbolizer(
                        mapnik.Color(str(layerStyle.strokeColor)),
                        layerStyle.strokeWeight))
            elif shapefile.geom_type in ["Polygon", "MultiPolygon"]:
                p = mapnik.PolygonSymbolizer(
                    mapnik.Color(str((layerStyle.fillColor))))
                p.fill_opacity = layerStyle.fillOpacity
                style_rule.symbols.append(p)
                style_rule.symbols.append(
                    mapnik.LineSymbolizer(
                        mapnik.Color(str(layerStyle.strokeColor)),
                        layerStyle.strokeWeight))
            layer_style = mapnik.Style()
            layer_style.rules.append(style_rule)

            #defining label styles
            if layerLabel:
                label_rule = mapnik.Rule()
                label = mapnik.TextSymbolizer(
                    mapnik.Expression('[label]'), 'DejaVu Sans Book',
                    layerLabel.font_size,
                    mapnik.Color(str(layerLabel.font_color)))
                label.halo_fill = mapnik.Color(str(layerLabel.halo_color))
                label.halo_radius = int(layerLabel.halo_radius)
                #label.label_placement = mapnik.label_placement.INTERIOR_PLACEMENT
                label.allow_overlap = False
                label.avoid_edges = True
                label_rule.symbols.append(label)
                label_style = mapnik.Style()
                label_style.rules.append(label_rule)
                featureLayer.styles.append(
                    str(shapefile.filename) + '_label' + str(layerStyle.id))
                #add label to the map
                map.append_style(
                    str(shapefile.filename) + '_label' + str(layerStyle.id),
                    label_style)

            #add new feature to the map
            map.append_style(
                str(shapefile.filename) + '_Style' + str(layerStyle.id),
                layer_style)
            map.layers.append(featureLayer)

    #saving the map mapnik xml
    mapnik.save_map(
        map, "c:\\basqui\\tilestache\\%s\\%s.xml" %
        (str(request.user), str(basqui_map.map_name)))
Пример #17
0
def pattern(file):
    symbolizer = mapnik.PolygonPatternSymbolizer(mapnik.PathExpression(file))
    symbolizer.transform = 'scale(0.4, 0.4)'
    return symbolizer
Пример #18
0
from djmapnik.adapter import qs_to_map
import mapnik

# todo - remove <layername>, and remove 'foo' from url in static/treemap.js
tile_request_pat = r'/(?P<version>\d{1,2}\.\d{1,3}\.\d{1,3})/(?P<layername>[a-z]{1,64})/(?P<z>\d{1,10})/(?P<x>\d{1,10})/(?P<y>\d{1,10})\.(?P<extension>(?:png|jpg|gif))'

# hackish way to grab style obj and avoid parsing XML each request...
m = mapnik.Map(1, 1)
mapnik.load_map(m, settings.MAPNIK_STYLESHEET)
style = m.find_style('style')
del m

style2 = mapnik.Style()
r = mapnik.Rule()
icon = '/ebs/projects/oakland/OpenTreeMap/static/images/SanDiego/map_icons/v4/marker-sm.png'
sym = mapnik.PointSymbolizer(mapnik.PathExpression(icon))
sym.transform = 'scale(0.4)'
sym.allow_overlap = True
sym.opacity = .5
x = mapnik.MarkersSymbolizer()
x.width = mapnik.Expression("20")
x.stroke_width = mapnik.Expression("20")
x.allow_overlap = True
x.fill = '#ff0'
x.stroke = '#ccc'
r.symbols.append(sym)
style2.rules.append(r)

srv = None

if settings.CACHE_SEARCH_METHOD == 'mem':
Пример #19
0
# create label symbolizers
if mapnik.mapnik_version() >= 800:
    text = mapnik.TextSymbolizer(mapnik.Expression('[Name]'),
                                 'DejaVu Sans Bold', 12, mapnik.Color('black'))
else:
    text = mapnik.TextSymbolizer('Name', 'DejaVu Sans Bold', 12,
                                 mapnik.Color('black'))

text.allow_overlap = True
text.displacement(30, -40)
text.halo_radius = 2
text.halo_fill = mapnik.Color(255, 255, 255, 25)

# create point symbolizer for blue icons
if mapnik.mapnik_version() >= 800:
    point = mapnik.PointSymbolizer(mapnik.PathExpression('tests/y.png'))
else:
    point = mapnik.PointSymbolizer('tests/y.png', 'png', 50, 50)

point.allow_overlap = True

s = mapnik.Style()
r = mapnik.Rule()
r.symbols.append(point)
r.symbols.append(text)

s.rules.append(r)

lyr = mapnik.Layer('Memory Datasource')
lyr.datasource = pds
lyr.styles.append('Style')
Пример #20
0
    'opacity': 'text_opacity',
    'spacing': 'label_spacing',
    'max_char_angle_delta': 'maximum_angle_char_delta',
    'placement': 'label_placement'
}

total_fails = 0
before = 0
for sym in reference['symbolizers'].items():
    if sym[0] not in ['map', '*']:
        #if sym[0] in ['raster']:
        sym_name = ''.join([s.title() for s in sym[0].split('-')])
        sym_object = getattr(mapnik, sym_name + 'Symbolizer')
        instance_var = None
        if sym_name in ['PolygonPattern', 'LinePattern']:
            instance_var = sym_object(mapnik.PathExpression(''))
        elif sym_name == 'Shield':
            instance_var = sym_object(mapnik.Expression('True'),
                                      'DejaVu Sans Book', 10,
                                      mapnik.Color('black'),
                                      mapnik.PathExpression(''))
        else:
            instance_var = sym_object()
        fails = []
        for prop in sym[1]:
            key = prop.replace('-', '_')
            if key == 'file':
                key = 'filename'
            if sym_name == 'Line' and 'stroke' in key:
                stroke_instance = instance_var.stroke
                if key == 'stroke':
def generateMap(tableName,
                minX,
                minY,
                maxX,
                maxY,
                mapWidth,
                mapHeight,
                hiliteExpr=None,
                points=None):

    extent = "{},{},{},{}".format(minX, minY, maxX, maxY)

    layer = mapnik.Layer("Layer")
    layer.datasource = mapnik.PostGIS(dbname="distal",
                                      table=tableName,
                                      user="******",
                                      password="******",
                                      extent=extent,
                                      geometry_field="outline",
                                      srid=4326)

    map = mapnik.Map(mapWidth, mapHeight, '+proj=longlat +datum=WGS84')
    map.background = mapnik.Color("#8080a0")

    style = mapnik.Style()

    rule = mapnik.Rule()
    if hiliteExpr != None:
        rule.filter = mapnik.Filter(hiliteExpr)

    rule.symbols.append(mapnik.PolygonSymbolizer(mapnik.Color("#408000")))
    rule.symbols.append(
        mapnik.LineSymbolizer(mapnik.Stroke(mapnik.Color("#000000"), 0.1)))

    style.rules.append(rule)

    rule = mapnik.Rule()
    rule.set_else(True)

    rule.symbols.append(mapnik.PolygonSymbolizer(mapnik.Color("#a0a0a0")))
    rule.symbols.append(
        mapnik.LineSymbolizer(mapnik.Stroke(mapnik.Color("#404040"), 0.1)))

    style.rules.append(rule)

    map.append_style("Map Style", style)
    layer.styles.append("Map Style")
    map.layers.append(layer)

    if points != None:
        memoryDatasource = mapnik.MemoryDatasource()
        context = mapnik.Context()
        context.push("name")
        next_id = 1
        for long, lat, name in points:
            wkt = "POINT (%0.8f %0.8f)" % (long, lat)
            feature = mapnik.Feature(context, next_id)
            feature['name'] = name
            feature.add_geometries_from_wkt(wkt)
            next_id = next_id + 1
            memoryDatasource.add_feature(feature)

        layer = mapnik.Layer("Points")
        layer.datasource = memoryDatasource

        style = mapnik.Style()
        rule = mapnik.Rule()

        pointImgFile = os.path.join(os.path.dirname(__file__), "point.png")

        shield = mapnik.ShieldSymbolizer(mapnik.Expression('[name]'),
                                         "DejaVu Sans Bold", 10,
                                         mapnik.Color("#000000"),
                                         mapnik.PathExpression(pointImgFile))
        shield.displacement = (0, 7)
        shield.unlock_image = True
        rule.symbols.append(shield)

        style.rules.append(rule)

        map.append_style("Point Style", style)
        layer.styles.append("Point Style")

        map.layers.append(layer)

    map.zoom_to_box(mapnik.Envelope(minX, minY, maxX, maxY))

    scriptDir = os.path.dirname(__file__)
    cacheDir = os.path.join(scriptDir, "..", "mapCache")
    if not os.path.exists(cacheDir):
        os.mkdir(cacheDir)
    fd, filename = tempfile.mkstemp(".png", dir=cacheDir)
    os.close(fd)

    mapnik.render_to_file(map, filename, "png")

    return "../mapCache/" + os.path.basename(filename)
Пример #22
0
# File with symbol for point
file_symbol = os.path.join("figs", "mm_20_white.png")

# Create a map
map = mapnik.Map(800, 400)  #This is the image final image size

# Background for the map
map.background = mapnik.Color("steelblue")

# Create the rule and style obj
r = mapnik.Rule()
s = mapnik.Style()

# Set the land polygone
polyStyle = mapnik.PolygonSymbolizer(mapnik.Color("darkred"))
pointStyle = mapnik.PointSymbolizer(mapnik.PathExpression(file_symbol))
r.symbols.append(polyStyle)
r.symbols.append(pointStyle)

s.rules.append(r)
map.append_style("mapStyle", s)

# Adding point layer
layerPoint = mapnik.Layer("pointLayer")
layerPoint.datasource = mapnik.Shapefile(file=os.path.join("data", "map.shp"))

layerPoint.styles.append("mapStyle")

# Adding polygon
layerPoly = mapnik.Layer("polyLayer")
layerPoly.datasource = mapnik.Shapefile(