kopia lustrzana https://github.com/hholzgra/ocitysmap
make poi_markers fully work with uploads via API, and fix scaling
when using non-standard DPI for bitmap files (mostly)dev-multipage-gpx
rodzic
0485e296cb
commit
1c7f1f16c9
|
@ -4,3 +4,6 @@
|
|||
[submodule "templates/umap/maki"]
|
||||
path = templates/umap/maki
|
||||
url = https://github.com/mapbox/maki.git
|
||||
[submodule "templates/poi_markers/Font-Awesome-SVG-PNG"]
|
||||
path = templates/poi_markers/Font-Awesome-SVG-PNG
|
||||
url = https://github.com/encharm/Font-Awesome-SVG-PNG
|
||||
|
|
|
@ -123,49 +123,53 @@ class PoiIndexRenderer:
|
|||
return area
|
||||
|
||||
def _render_header(self, ctx, area, dpi, color, label, logo = None):
|
||||
f = dpi / UTILS.PT_PER_INCH;
|
||||
|
||||
ctx.save()
|
||||
ctx.translate(10, 10)
|
||||
ctx.translate(10*f, 10*f)
|
||||
|
||||
c = Color(color);
|
||||
ctx.set_source_rgb(c.red, c.green, c.blue)
|
||||
ctx.rectangle( 0, 0, area.w - 20, dpi * 0.8)
|
||||
ctx.rectangle( 0, 0, (area.w - 20)*f, dpi * 0.8)
|
||||
ctx.fill()
|
||||
|
||||
x = 5
|
||||
x = 5*f
|
||||
|
||||
if logo != None:
|
||||
logo_path = os.path.abspath(os.path.join(
|
||||
os.path.dirname(__file__), '..', '..', '..', 'Font-Awesome-SVG-PNG', 'white', 'svg', logo + '.svg'))
|
||||
os.path.dirname(__file__), '..', '..', 'templates', 'poi_markers', 'Font-Awesome-SVG-PNG', 'white', 'svg', logo + '.svg'))
|
||||
|
||||
if os.path.isfile(logo_path):
|
||||
rsvg = Rsvg.Handle()
|
||||
svg = rsvg.new_from_file(logo_path)
|
||||
|
||||
scale = dpi * 0.6 / svg.props.height;
|
||||
x += svg.props.width * scale + 10
|
||||
x += svg.props.width * scale + 10*f
|
||||
|
||||
ctx.save()
|
||||
ctx.translate(5, 5)
|
||||
ctx.translate(5*f, 5*f)
|
||||
ctx.scale(scale, scale)
|
||||
svg.render_cairo(ctx)
|
||||
ctx.restore()
|
||||
else:
|
||||
LOG.debug("icon not found %s" % logo_path)
|
||||
LOG.warning("icon not found %s" % logo_path)
|
||||
|
||||
ctx.set_source_rgb(1, 1, 1)
|
||||
ctx.select_font_face("Droid Sans Bold",
|
||||
cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_BOLD)
|
||||
|
||||
ctx.set_font_size(dpi - 30)
|
||||
ctx.set_font_size(dpi*0.6)
|
||||
x_bearing, y_bearing, width, height = ctx.text_extents(label)[:4]
|
||||
ctx.move_to(x, 10 - y_bearing)
|
||||
ctx.move_to(x, 10*f - y_bearing)
|
||||
ctx.show_text(label)
|
||||
ctx.restore()
|
||||
|
||||
return dpi * 0.8
|
||||
|
||||
def _render_item(self, ctx, area, dpi, color, number, label, gridlabel, logo = None):
|
||||
x = 5
|
||||
f = dpi / UTILS.PT_PER_INCH;
|
||||
|
||||
x = 5*f
|
||||
|
||||
marker_path = os.path.abspath(os.path.join(
|
||||
os.path.dirname(__file__), '..', '..', 'images', 'marker.svg'))
|
||||
|
@ -183,8 +187,8 @@ class PoiIndexRenderer:
|
|||
rsvg = Rsvg.Handle()
|
||||
svg = rsvg.new_from_data(data.encode())
|
||||
|
||||
scale = 50.0 / svg.props.height;
|
||||
x += 35
|
||||
scale = 50.0 * f/ svg.props.height;
|
||||
x += 35*f
|
||||
|
||||
ctx.save()
|
||||
|
||||
|
@ -199,38 +203,39 @@ class PoiIndexRenderer:
|
|||
cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_BOLD)
|
||||
|
||||
x_bearing, y_bearing, width, height = ctx.text_extents(number)[:4]
|
||||
ctx.set_font_size((dpi - 30)/(len(number)+1))
|
||||
ctx.move_to(20 - width/2, 25)
|
||||
ctx.set_font_size((dpi*0.6)/(len(number)+1))
|
||||
ctx.move_to(20*f - f*width/2, 25*f)
|
||||
ctx.show_text(number)
|
||||
ctx.restore()
|
||||
|
||||
if logo != None:
|
||||
logo_path = os.path.abspath(os.path.join(
|
||||
os.path.dirname(__file__), '..', '..', '..', 'Font-Awesome-SVG-PNG', 'black', 'svg', logo + '.svg'))
|
||||
os.path.dirname(__file__), '..', '..', 'templates', 'poi_markers', 'Font-Awesome-SVG-PNG', 'black', 'svg', logo + '.svg'))
|
||||
|
||||
if os.path.isfile(logo_path):
|
||||
svg = rsvg.Handle(logo_path)
|
||||
rsvg = Rsvg.Handle()
|
||||
svg = rsvg.new_from_file(logo_path)
|
||||
|
||||
scale = min(dpi * 0.6 / svg.props.height, dpi * 0.6 / svg.props.width);
|
||||
|
||||
ctx.save()
|
||||
ctx.translate(x + 5, 5)
|
||||
ctx.translate(x + 5, 5*f)
|
||||
ctx.scale(scale, scale)
|
||||
svg.render_cairo(ctx)
|
||||
ctx.restore()
|
||||
|
||||
x += svg.props.width * scale + 10
|
||||
x += svg.props.width * scale + 10*f
|
||||
else:
|
||||
LOG.debug("icon not found %s" % logo_path)
|
||||
LOG.warning("icon not found %s" % logo_path)
|
||||
|
||||
ctx.save()
|
||||
ctx.set_source_rgb(0, 0, 0)
|
||||
ctx.select_font_face("Droid Sans",
|
||||
cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL)
|
||||
|
||||
ctx.set_font_size(dpi - 30)
|
||||
ctx.set_font_size(dpi*0.6)
|
||||
x_bearing, y_bearing, width, height = ctx.text_extents(label)[:4]
|
||||
ctx.move_to(x, 10 - y_bearing)
|
||||
ctx.move_to(x, 10*f - y_bearing)
|
||||
ctx.show_text(label)
|
||||
|
||||
ctx.select_font_face("Droid Sans Mono",
|
||||
|
@ -240,7 +245,7 @@ class PoiIndexRenderer:
|
|||
gridlabel = gridParts.group(1) + '-' + gridParts.group(2)
|
||||
|
||||
x_bearing, y_bearing, width, height = ctx.text_extents(gridlabel)[:4]
|
||||
ctx.move_to(area.w - width - 15, 10 + height)
|
||||
ctx.move_to((area.w - 15)*f - width, 10*f + height)
|
||||
ctx.show_text(gridlabel)
|
||||
|
||||
ctx.restore()
|
||||
|
@ -248,10 +253,12 @@ class PoiIndexRenderer:
|
|||
return dpi * 0.7
|
||||
|
||||
def render(self, ctx, area, dpi = UTILS.PT_PER_INCH):
|
||||
f = dpi / UTILS.PT_PER_INCH;
|
||||
|
||||
ctx.save()
|
||||
ctx.translate(area.x, area.y)
|
||||
ctx.translate(area.x*f, area.y*f)
|
||||
ctx.set_source_rgb(1, 1, 1)
|
||||
ctx.rectangle(0, 0, area.w, area.h)
|
||||
ctx.rectangle(0, 0, area.w*f, area.h*f)
|
||||
ctx.fill()
|
||||
|
||||
n = 0
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import cairo
|
||||
import os
|
||||
import sys
|
||||
import math
|
||||
import qrcode
|
||||
import qrcode.image.svg
|
||||
import gi
|
||||
|
@ -20,19 +21,19 @@ def render(renderer, ctx):
|
|||
##
|
||||
## Draw the creator notice
|
||||
##
|
||||
ctx.save()
|
||||
|
||||
#ctx.save()
|
||||
#
|
||||
# Move to the right position
|
||||
ctx.translate(safe_margin_dots + usable_area_width_dots/2.3,
|
||||
( safe_margin_dots + title_margin_dots
|
||||
+ usable_area_height_dots
|
||||
+ copyright_margin_dots/4. ) )
|
||||
#ctx.translate(safe_margin_dots + usable_area_width_dots/2.3,
|
||||
# ( safe_margin_dots + title_margin_dots
|
||||
# + usable_area_height_dots
|
||||
# + copyright_margin_dots/4. ) )
|
||||
|
||||
# Draw the copyright notice
|
||||
self._draw_creator_notice(ctx, usable_area_width_dots,
|
||||
copyright_margin_dots,
|
||||
osm_date=osm_date)
|
||||
ctx.restore()
|
||||
#self._draw_creator_notice(ctx, usable_area_width_dots,
|
||||
# copyright_margin_dots,
|
||||
# osm_date=osm_date)
|
||||
#ctx.restore()
|
||||
|
||||
# place POI markers on map canvas
|
||||
n = 0
|
||||
|
@ -40,11 +41,11 @@ def render(renderer, ctx):
|
|||
for poi in category.items:
|
||||
n = n + 1
|
||||
lat, lon = poi.endpoint1.get_latlong()
|
||||
renderer._marker(category.color, str(n), lat, lon, ctx, dpi)
|
||||
renderer._marker(category.color, str(n), lat, lon, ctx, renderer.dpi)
|
||||
|
||||
# place "you are here" circle if coordinates are given
|
||||
if renderer.street_index.lat != False:
|
||||
x,y = renderer._latlon2xy(renderer.street_index.lat, renderer.street_index.lon, dpi)
|
||||
x,y = renderer._latlon2xy(renderer.street_index.lat, renderer.street_index.lon, renderer.dpi)
|
||||
ctx.save()
|
||||
ctx.translate(x, y)
|
||||
ctx.set_source_rgba(1, 0, 0, 0.8)
|
||||
|
|
|
@ -83,10 +83,10 @@ class SinglePageRenderer(Renderer):
|
|||
index_position (str): None or 'side' (index on side),
|
||||
'bottom' (index at bottom).
|
||||
"""
|
||||
|
||||
Renderer.__init__(self, db, rc, tmpdir, dpi)
|
||||
|
||||
# Prepare the index
|
||||
|
||||
if rc.poi_file:
|
||||
self.street_index = PoiIndex(rc.poi_file)
|
||||
else:
|
||||
|
@ -194,6 +194,9 @@ class SinglePageRenderer(Renderer):
|
|||
float(self._map_coords[3]), # H
|
||||
dpi))
|
||||
|
||||
if self.rc.poi_file:
|
||||
self._overlay_effects.append('poi_markers')
|
||||
|
||||
# Prepare the grid
|
||||
if index_position:
|
||||
self.grid = self._create_grid(self._map_canvas, dpi)
|
||||
|
|
Ładowanie…
Reference in New Issue