add map image composing

This commit is contained in:
Laura Klünder 2016-12-17 16:47:13 +01:00
parent 4f847f4e49
commit ad58ddbbcb
4 changed files with 33 additions and 18 deletions

View file

@ -1,5 +1,5 @@
from c3nav.mapdata.models import Level from c3nav.mapdata.models import Level
from c3nav.mapdata.render.renderer import LevelRenderer, get_render_path # noqa from c3nav.mapdata.render.renderer import LevelRenderer # noqa
def render_all_levels(show_accessibles=False): def render_all_levels(show_accessibles=False):

View file

@ -0,0 +1,11 @@
from django.http import HttpResponse
from PIL import Image
from c3nav.mapdata.render.utils import get_render_path
def get_level_image(request, level):
im = Image.open(get_render_path('png', level.name, 'full', True))
response = HttpResponse(content_type="image/png")
im.save(response, 'PNG')
return response

View file

@ -1,25 +1,11 @@
import os
import subprocess import subprocess
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
from django.conf import settings from django.conf import settings
from django.db.models import Max, Min
from shapely.affinity import scale from shapely.affinity import scale
from shapely.geometry import JOIN_STYLE, box from shapely.geometry import JOIN_STYLE, box
from c3nav.mapdata.models import Package from c3nav.mapdata.render.utils import get_dimensions, get_render_path
def get_render_path(filename):
return os.path.join(settings.RENDER_ROOT, filename)
def get_dimensions():
aggregate = Package.objects.all().aggregate(Max('right'), Min('left'), Max('top'), Min('bottom'))
return (
float(aggregate['right__max'] - aggregate['left__min']),
float(aggregate['top__max'] - aggregate['bottom__min']),
)
class LevelRenderer(): class LevelRenderer():
@ -33,8 +19,7 @@ class LevelRenderer():
return level.public_geometries if self.only_public else level.geometries return level.public_geometries if self.only_public else level.geometries
def get_filename(self, mode, filetype, level=None): def get_filename(self, mode, filetype, level=None):
return get_render_path('%s%s-level-%s.%s' % (('public-' if self.only_public else ''), mode, return get_render_path(filetype, self.level.name if level is None else level, mode, self.only_public)
(self.level.name if level is None else level), filetype))
@staticmethod @staticmethod
def get_dimensions(): def get_dimensions():

View file

@ -0,0 +1,19 @@
import os
from django.conf import settings
from django.db.models import Max, Min
from c3nav.mapdata.models import Package
def get_dimensions():
aggregate = Package.objects.all().aggregate(Max('right'), Min('left'), Max('top'), Min('bottom'))
return (
float(aggregate['right__max'] - aggregate['left__min']),
float(aggregate['top__max'] - aggregate['bottom__min']),
)
def get_render_path(filetype, level, mode, public):
return os.path.join(settings.RENDER_ROOT,
'%s%s-level-%s.%s' % (('public-' if public else ''), mode, level, filetype))