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
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
def __filter_datasets(bounds, datasets): filtered = [] for dataset in datasets: if bounds.intersects(GeoRect(*dataset['bounds'])): filtered.append(dataset) return filtered
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))