Esempio n. 1
0
 def get_bounds(self):
     rc = GeoRect(180, -180, -90, 90)
     for wp in self.__list:
         rc.left = min(rc.left, wp.lon)
         rc.right = max(rc.right, wp.lon)
         rc.top = max(rc.top, wp.lat)
         rc.bottom = min(rc.bottom, wp.lat)
     return rc
Esempio n. 2
0
 def get_bounds(self, offset_distance = 15.):
     rc = GeoRect(180, -180, -90, 90)
     for wp in self.__list:
         rc.left = min(rc.left, wp.lon)
         rc.right = max(rc.right, wp.lon)
         rc.top = max(rc.top, wp.lat)
         rc.bottom = min(rc.bottom, wp.lat)
     
     rc.expand(offset_distance)
     return rc
Esempio n. 3
0
 def get_bounds(self):
     rc = GeoRect(180, -180, -90, 90)
     for wp in self.__list:
         rc.left = min(rc.left, wp.lon)
         rc.right = max(rc.right, wp.lon)
         rc.top = max(rc.top, wp.lat)
         rc.bottom = min(rc.bottom, wp.lat)
     return rc
Esempio n. 4
0
def __filter_datasets(bounds, datasets):
     filtered = []
     for dataset in datasets:
         if bounds.intersects(GeoRect(*dataset['bounds'])):
             filtered.append(dataset)
     return filtered
Esempio n. 5
0
    def index(self, **params):
        if cherrypy.request.method != 'POST':
            return view.render()

        name = params['name'].strip()
        if name == "":
            return view.render(error='No map name given!') | HTMLFormFiller(
                data=params)

        desc = JobDescription()
        desc.name = name
        desc.mail = params['mail']
        desc.resolution = 3.0 if params.has_key('highres') else 9.0
        desc.compressed = True if params.has_key('compressed') else False
        desc.welt2000 = True if params.has_key('welt2000') else False
        desc.level_of_detail = int(params['level_of_detail'])

        selection = params['selection']
        waypoint_file = params['waypoint_file']
        if selection == 'waypoint' or selection == 'waypoint_bounds':
            if not waypoint_file.file or not waypoint_file.filename:
                return view.render(
                    error='No waypoint file uploaded.') | HTMLFormFiller(
                        data=params)

            try:
                filename = waypoint_file.filename.lower()
                if filename.endswith('.dat') or filename.endswith('.cup'):
                    desc.bounds = parse_waypoint_file(
                        waypoint_file.filename,
                        waypoint_file.file).get_bounds()
                    desc.waypoint_file = 'waypoints.cup' if filename.endswith(
                        '.cup') else 'waypoints.dat'
                else:
                    raise RuntimeError(
                        'Waypoint file {} has an unsupported format.'.format(
                            waypoint_file.filename))
            except:
                return view.render(error='Unsupported waypoint file ' +
                                   waypoint_file.filename) | HTMLFormFiller(
                                       data=params)

        if selection == 'bounds' or selection == 'waypoint_bounds':
            try:
                desc.bounds = GeoRect(float(params['left']),
                                      float(params['right']),
                                      float(params['top']),
                                      float(params['bottom']))
            except:
                return view.render(
                    error='Map bounds not set.') | HTMLFormFiller(data=params)

        if desc.bounds.height() <= 0 or desc.bounds.width() <= 0:
            return view.render(error='Bounds are invalid.') | HTMLFormFiller(
                data=params)

        if desc.bounds.height() * desc.bounds.width() > 1000:
            return view.render(
                error='Selected area is too large.') | HTMLFormFiller(
                    data=params)

        if self.too_many_requests():
            return view.render(
                error='You can generate only three maps per hour.'
            ) | HTMLFormFiller(data=params)

        job = Job(self.__dir_jobs, desc)

        if desc.waypoint_file:
            waypoint_file.file.seek(0)
            f = open(job.file_path(desc.waypoint_file), 'w')
            try:
                shutil.copyfileobj(fsrc=waypoint_file.file,
                                   fdst=f,
                                   length=1024 * 64)
            finally:
                f.close()

        desc.download_url = cherrypy.url('/download?uuid=' + job.uuid)
        job.enqueue()
        raise cherrypy.HTTPRedirect(cherrypy.url('/status?uuid=' + job.uuid))