使用mapnik渲染道路

时间:2018-12-18 13:29:45

标签: python rendering gis mapnik

我写了一个Python脚本脚本,给定GPS位置和半径,并借助mapnik绘制图像,包围盒中的所有道路均以给定半径的GPS位置为中心。现在,所有街道都具有相同的笔划宽度,这意味着无需关心道路类型即可进行渲染。我需要以更实际的方式渲染道路,同时要尊重实际尺寸(一条住宅道路不同于高速公路!)。您是否有任何建议可以自动执行此操作(无需为每种道路类型定义笔划宽度)?谢谢大家!

以下是处理mapnik的代码:

map_output = 'mymap.png'    
m = mapnik.Map(picResolution, picResolution, "+init=epsg:3857")

m.background = mapnik.Color("#000000")
highway = mapnik.LineSymbolizer()
highway.stroke = mapnik.Color("#ffffff")
#stroke_rate = 0.013
highway.stroke_width = stroke_rate*picResolution

f = mapnik.Expression("[highway]")

rules = mapnik.Rule()
rules.symbols.append(highway)

style = mapnik.Style()
style.rules.append(rules)
m.append_style("highways", style)

layer = mapnik.Layer("highways", "+init=epsg:4326")
ds = mapnik.Shapefile(file=shapein)
layer.datasource = ds
layer.styles.append("highways")

m.layers.append(layer)

#left bottom right top
bbox=bbox_helper.boundingBox(gps[0], gps[1], radius * 1e-3)
bbox=(mapnik.Box2d(bbox[1],bbox[0],bbox[3],bbox[2]))

# Calculate projected boundaries
prj = mapnik.Projection("+init=epsg:3857")
wgs84 = mapnik.Projection('+init=epsg:4326')
tr = mapnik.ProjTransform(wgs84, prj)
bbox = tr.forward(bbox)

print "bbox transformed: ", bbox.__str__()

m.zoom_to_box(bbox)

#print "Scale = ", m.scale(), " Scale denominator = ", m.scale_denominator()
mapnik.render_to_file(m, map_output)

0 个答案:

没有答案