|
@@ -0,0 +1,56 @@
|
|
|
|
+# -*- coding: utf-8 -*-
|
|
|
|
+
|
|
|
|
+"""
|
|
|
|
+Create a panorama from the command line. This is useful when manipulating large image files.
|
|
|
|
+
|
|
|
|
+"""
|
|
|
|
+
|
|
|
|
+from __future__ import unicode_literals, division, print_function
|
|
|
|
+
|
|
|
|
+import sys
|
|
|
|
+import os
|
|
|
|
+
|
|
|
|
+from django.core.management.base import BaseCommand, CommandError
|
|
|
|
+from django.core.files import File
|
|
|
|
+from django.core.exceptions import ObjectDoesNotExist
|
|
|
|
+from django.conf import settings
|
|
|
|
+
|
|
|
|
+from altitude.providers import get_altitude
|
|
|
|
+from panorama.models import Panorama, ReferencePoint, Reference
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class Command(BaseCommand):
|
|
|
|
+ help = __doc__
|
|
|
|
+
|
|
|
|
+ def add_arguments(self, parser):
|
|
|
|
+ parser.add_argument('--name', '-n', required=True,
|
|
|
|
+ help='Name of the panorama')
|
|
|
|
+ parser.add_argument('--image', '-i', required=True,
|
|
|
|
+ help='Image of the panorama to create')
|
|
|
|
+ parser.add_argument('--latitude', '-l', type=float, required=True)
|
|
|
|
+ parser.add_argument('--longitude', '-L', type=float, required=True)
|
|
|
|
+ parser.add_argument('--height', '-H', type=float, required=True,
|
|
|
|
+ help='Height above ground, in meters')
|
|
|
|
+ parser.add_argument('--loop', action='store_true', help='Is the image a 360° panorama?')
|
|
|
|
+
|
|
|
|
+ def handle(self, *args, **options):
|
|
|
|
+ self.stdout.write("Getting ground altitude for these coordinates...")
|
|
|
|
+ alt = get_altitude([settings.ALTITUDE_PROVIDERS[0]],
|
|
|
|
+ timeout=10.,
|
|
|
|
+ latitude=options['latitude'],
|
|
|
|
+ longitude=options['longitude'])
|
|
|
|
+ self.stdout.write("Ground altitude is {}m".format(alt))
|
|
|
|
+ p = Panorama(name=options["name"], latitude=options["latitude"],
|
|
|
|
+ longitude=options["longitude"],
|
|
|
|
+ ground_altitude=alt,
|
|
|
|
+ height_above_ground=options["height"],
|
|
|
|
+ loop=options["loop"])
|
|
|
|
+ # http://www.revsys.com/blog/2014/dec/03/loading-django-files-from-code/
|
|
|
|
+ with open(options['image'], "rb") as f:
|
|
|
|
+ self.stdout.write("Reading image file...")
|
|
|
|
+ p.image.save(os.path.basename(options['image']), File(f), save=False)
|
|
|
|
+ self.stdout.write("Saving panorama to database...")
|
|
|
|
+ p.save()
|
|
|
|
+ self.stdout.write("Launching tile generation...")
|
|
|
|
+ p.generate_tiles()
|
|
|
|
+ self.stdout.write("Success!")
|