12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- # -*- coding: utf-8 -*-
- """Fix the ground altitude of all reference points, by splitting it
- between the actual ground altitude and the height above ground.
- This makes call to an external API to get accurate ground altitude, and
- simply substract the remaining altitude as "height above aground".
- """
- from __future__ import unicode_literals, division, print_function
- from django.core.management.base import BaseCommand, CommandError
- from django.conf import settings
- from altitude.providers import get_altitude
- from panorama.models import ReferencePoint
- class Command(BaseCommand):
- help = __doc__
- def add_arguments(self, parser):
- parser.add_argument('--dry-run', action='store_true',
- help="Don't actually save the new altitudes")
- def handle(self, *args, **options):
- if options['dry_run']:
- self.stdout.write(self.style.SUCCESS("Running in dry run mode, not saving anything"))
- for p in ReferencePoint.objects.all():
- alt = get_altitude([settings.ALTITUDE_PROVIDERS[0]],
- timeout=5.,
- latitude=p.latitude,
- longitude=p.longitude)
- if alt == None:
- self.stderr.write("Error while fetching ground altitude for {}".format(p.name))
- continue
- self.stdout.write("{} before: {:.2f} m + {:.2f} m".format(p.name, p.ground_altitude, p.height_above_ground))
- p.height_above_ground = p.altitude - alt
- p.ground_altitude = alt
- self.stdout.write("{} after : {:.2f} m + {:.2f} m".format(p.name, p.ground_altitude, p.height_above_ground))
- if not options['dry_run']:
- p.save()
|