def __init__(self, year, month, day, hour, minute, longitude, latitude, az_offset=0, dec_offset=0, cache=None): self.utc = datetime(year, month, day, hour, minute) self.reference_lonlat = LonLat(longitude, latitude) self.azalt_offsets = AzAlt(az_offset, dec_offset) self.projector = AzAltProjector(self.utc, self.reference_lonlat, self.azalt_offsets) self.cache = cache
def load_from_file(self): stars, lines = _CsvSource.load_from_file(self) utc = datetime(self.year, self.month, self.day, self.hour, self.minute) projector = AzAltProjector(utc, LonLat(self.longitude, self.latitude)) projected_stars = [] for star in stars: azalt = projector.project(star.radec) projected_stars.append(Star(star.id, star.name, azalt, star.mag)) projected_lines = [] for line in lines: point1 = projector.project(line.point1) point2 = projector.project(line.point2) projected_lines.append(Line(point1, point2)) return projected_stars, projected_lines
class IndexedSource(object): def __init__(self, year, month, day, hour, minute, longitude, latitude, az_offset=0, dec_offset=0, cache=None): self.utc = datetime(year, month, day, hour, minute) self.reference_lonlat = LonLat(longitude, latitude) self.azalt_offsets = AzAlt(az_offset, dec_offset) self.projector = AzAltProjector(self.utc, self.reference_lonlat, self.azalt_offsets) self.cache = cache def get_coords(self, zoom, x, y): bounds = calculate_bounds(zoom, x, y) az1, dec1, az2, dec2 = bounds mid_az = (az2 - az1) / 2.0 + az1 mid_dec = (dec1 - dec2) / 2.0 + dec2 assert get_tile_coords((mid_az, mid_dec), zoom) == (x, y), get_tile_coords((mid_az, mid_dec), zoom) radec = self.projector.unproject(AzAlt(mid_az, mid_dec)) #assert self.projector.project(radec) == AzAlt(mid_az, mid_dec), (self.projector.project(radec), AzAlt(mid_az, mid_dec)) cx, cy = get_tile_coords(radec, zoom) return cx, cy, az1, az2, bounds, radec def get_sky_objects(self, zoom, x, y): cx, cy, az1, az2, bounds, radec = self.get_coords(zoom, x, y) objects = load_tile(zoom, cx, cy, cache=self.cache) #objects.append(("#center", radec[0], radec[1], 1)) projected = perform_star_projections(objects, self.projector, (az1, az2)) return bounds, projected def get_constellation_lines(self, zoom, x, y): cx, cy, az1, az2, bounds, radec = self.get_coords(zoom, x, y) objects = load_line_tile(zoom, cx, cy, self.cache) projected = perform_line_projections(objects, self.projector, (az1, az2)) return bounds, projected def get_labels(self, zoom, x, y): cx, cy, az1, az2, bounds, radec = self.get_coords(zoom, x, y) objects = load_label_tile(zoom, cx, cy, cache=self.cache) projected = perform_label_projections(objects, self.projector, (az1, az2)) return bounds, projected def get_star(self, az, alt): radec = self.projector.unproject(AzAlt(az, alt)) zoom = 6 cx, cy = get_tile_coords(radec, zoom) objects = load_tile(zoom, cx, cy, cache=self.cache) nearest = None nearest_d = None for id, ra, dec, mag in objects: object_azalt = self.projector.project(RaDec(ra, dec)) distance = threed_distance(AzAlt(az, alt), object_azalt) if (not nearest) or (nearest_d > distance): nearest = (id, object_azalt) nearest_d = distance return nearest