Рендеринг дорог с картником - PullRequest
0 голосов
/ 18 декабря 2018

Я написал небольшой скрипт скрипта 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)
...