def compute(self): location = Location(('name', 'reg', self.lat, self.lon, 'Europe/Moscow', self.alt)) # 15' sun bottom + 35' refraction alt = location.solar_elevation() daytime = 'day' daytime_ext = 'day' if -6 <= alt < -5. / 6: daytime = 'twilight' daytime_ext = 'civil_twilight' elif -12 <= alt < -6: daytime = 'night' daytime_ext = 'nautical_twilight' elif -18 <= alt < -12: daytime = 'night' daytime_ext = 'astro_twilight' elif alt < -18: daytime = 'night' daytime_ext = 'night' self.context.set_item_value('daytime', daytime) self.context.set_item_value('daytime_ext', daytime_ext) self.context.set_item_value('sun_alt', alt) self.context.set_item_value('sun_az', location.solar_azimuth()) sun = location.sun() self.context.set_item_value('sunrise', sun['sunrise']) self.context.set_item_value('sunset', sun['sunset']) self.context.set_item_value('noon', sun['noon']) self.context.set_item_value('moon_phase', location.moon_phase())
def compute(self): location = Location( ('name', 'reg', self.lat, self.lon, 'Europe/Moscow', self.alt)) # 15' sun bottom + 35' refraction alt = location.solar_elevation() daytime = 'day' daytime_ext = 'day' if -6 <= alt < -5. / 6: daytime = 'twilight' daytime_ext = 'civil_twilight' elif -12 <= alt < -6: daytime = 'night' daytime_ext = 'nautical_twilight' elif -18 <= alt < -12: daytime = 'night' daytime_ext = 'astro_twilight' elif alt < -18: daytime = 'night' daytime_ext = 'night' self.context.set_item_value('daytime', daytime) self.context.set_item_value('daytime_ext', daytime_ext) self.context.set_item_value('sun_alt', alt) self.context.set_item_value('sun_az', location.solar_azimuth()) sun = location.sun() self.context.set_item_value('sunrise', sun['sunrise']) self.context.set_item_value('sunset', sun['sunset']) self.context.set_item_value('noon', sun['noon']) self.context.set_item_value('moon_phase', location.moon_phase())
def draw_astronomical(city_name, geo_data): datetime_day_start = datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) a = Astral() a.solar_depression = 'civil' city = Location() city.latitude = geo_data["latitude"] city.longitude = geo_data["longitude"] city.timezone = geo_data["timezone"] answer = "" moon_line = "" for time_interval in range(72): current_date = (datetime_day_start + datetime.timedelta(hours=1 * time_interval)).replace( tzinfo=pytz.timezone(geo_data["timezone"])) sun = city.sun(date=current_date, local=False) dawn = sun['dawn'] # .replace(tzinfo=None) dusk = sun['dusk'] # .replace(tzinfo=None) sunrise = sun['sunrise'] # .replace(tzinfo=None) sunset = sun['sunset'] # .replace(tzinfo=None) if current_date < dawn: char = " " elif current_date > dusk: char = " " elif dawn < current_date and current_date < sunrise: char = u"─" elif sunset < current_date and current_date < dusk: char = u"─" elif sunrise < current_date and current_date < sunset: char = u"━" answer += char # moon if time_interval % 3 == 0: moon_phase = city.moon_phase( date=datetime_day_start + datetime.timedelta(hours=time_interval)) moon_phase_emoji = constants.MOON_PHASES[ int(math.floor(moon_phase * 1.0 / 28.0 * 8 + 0.5)) % len(constants.MOON_PHASES)] if time_interval in [0, 24, 48, 69]: moon_line += moon_phase_emoji + " " else: moon_line += " " answer = moon_line + "\n" + answer + "\n" answer += "\n" return answer
def doAction(self,r,sr,words,sensorList): if self.tz == None: os.system("espeak -s 120 'loading solar data'") self.tz = tzwhere.tzwhere() fix = sensorList["location"].getLastData() if fix["lastFix"] == None: return "I don't know where you are" l = Location() l.name = 'gpsFix' l.region = 'gpsFix' l.latitude = float(fix["lastFix"]["lat"]) l.longitude = float(fix["lastFix"]["lon"]) l.timezone = self.tz.tzNameAt(float(fix["lastFix"]["lat"]),float(fix["lastFix"]["lon"])) l.elevation = float(fix["lastFix"]["alt"]) if "sunset" in words: return str(l.sunset().strftime("%-I:%M%P")) if "sunrise" in words: return str(l.sunrise().strftime("%-I:%M%P")) if "phase of the moon" in words: return str(l.moon_phase())
def test_Location_Moon(): c=Location() c.moon_phase()
def test_Location_Moon(): d = datetime.date(2017, 12, 1) c=Location() assert c.moon_phase(date=d) == 11
class SunMoonWindow(QMainWindow): def __init__(self): super().__init__() self.ui = Ui_MainWindow() self.ui.setupUi(self) self.setupGraphicsScene() self.configuration = tombo.configfile.ConfigFile('sunmoon.conf') self.getConfiguration() self.minimum_interval = self.miscellaneous['minimum_interval'] self.setLocation() self.timer = QTimer() self.setupMethods() self.setCurrentDate() self.setConfigurationText() self.displayedDate = QDateTime(self.ui.deDate.date()) self.show() def setLocation(self): self.location = Location((self.astral['name'], self.astral['region'], float(self.astral['latitude']), float(self.astral['longitude']), self.astral['timezone'], self.astral['elevation'])) def getConfiguration(self): self.astral = self.configuration.getItems('ASTRAL') self.miscellaneous = self.configuration.getItems('MISCELLANEOUS') def setConfigurationText(self): config_label_text_color = "#" + self.miscellaneous['config_text_color'] self.ui.leLatitude.setText(self.astral['latitude']) self.ui.lblLatitude.setText("<font color='" + config_label_text_color + "'>" + self.astral['latitude'] + "</font>") self.ui.leLongitude.setText(self.astral['longitude']) self.ui.lblLongitude.setText("<font color='" + config_label_text_color + "'>" + self.astral['longitude'] + "</font>") self.ui.leElevation.setText(self.astral['elevation']) self.ui.lblElevation.setText("<font color='" + config_label_text_color + "'>" + self.astral['elevation'] + "</font>") self.ui.leLocation.setText(self.astral['name']) self.ui.lblLocation.setText("<font color='" + config_label_text_color + "'>" + self.astral['name'] + "</font>") self.ui.leCountry.setText(self.astral['region']) self.ui.lblRegion.setText("<font color='" + config_label_text_color + "'>" + self.astral['region'] + "</font>") self.ui.leTimeZone.setText(self.astral['timezone']) self.ui.lblTimeZone.setText("<font color='" + config_label_text_color + "'>" + self.astral['timezone'] + "</font>") self.ui.leMinimumInterval.setText(self.miscellaneous['minimum_interval']) self.ui.leTextColor.setText(self.miscellaneous['config_text_color']) def setCurrentDate(self): self.ui.deDate.setDate(QDate.currentDate()) self.displayedDate = QDateTime(self.ui.deDate.date()) def setupGraphicsScene(self): self.scene = QGraphicsScene() self.scene.setBackgroundBrush(Qt.black) self.scene.setSceneRect(0, 0, 209, 169) self.ui.gvMoon.setScene(self.scene) self.brushWhite = QBrush(QColor(Qt.white)) self.brushBlack = QBrush(QColor(Qt.black)) self.pen = QPen(Qt.NoPen) self.ellipseWhite = self.scene.addEllipse(50, 30, 100, 100, self.pen, self.brushWhite) self.ellipseBlack = self.scene.addEllipse(50, 30, 100, 100, self.pen, self.brushBlack) def setupMethods(self): self.ui.deDate.dateChanged.connect(self.setTimes) self.ui.pbStart.clicked.connect(lambda: self.autoStartStop("start")) self.ui.pbStop.clicked.connect(lambda: self.autoStartStop("stop")) self.ui.pbSave.clicked.connect(lambda: self.configActions("save")) self.ui.pbDiscard.clicked.connect(lambda: self.configActions("discard")) self.ui.pbClear.clicked.connect(lambda: self.configActions("clear")) self.timer.timeout.connect(self.advanceDate) self.ui.pbSetCurrentDate.clicked.connect(self.setCurrentDate) #---------------------------------------------------------------------- def configActions(self, action): """Some pushbutton actions route here.""" #print(action) if action == 'clear': self.clearConfigFields() elif action == 'discard': self.clearConfigFields() self.setConfigurationText() elif action == 'save': self.saveConfiguration() #---------------------------------------------------------------------- def saveConfiguration(self): """Save info from config fields.""" self.configuration.setValue('MISCELLANEOUS', 'minimum_interval', self.ui.leMinimumInterval.text()) self.configuration.setValue('MISCELLANEOUS', 'config_text_color', self.ui.leTextColor.text()) self.configuration.setValue('ASTRAL', 'latitude', self.ui.leLatitude.text()) self.configuration.setValue('ASTRAL', 'longitude', self.ui.leLongitude.text()) self.configuration.setValue('ASTRAL', 'elevation', self.ui.leElevation.text()) self.configuration.setValue('ASTRAL', 'timezone', self.ui.leTimeZone.text()) self.configuration.setValue('ASTRAL', 'name', self.ui.leLocation.text()) self.configuration.setValue('ASTRAL', 'region', self.ui.leCountry.text()) self.getConfiguration() self.setConfigurationText() #---------------------------------------------------------------------- def clearConfigFields(self): """Clear text from all config tab fields.""" self.ui.leLatitude.setText('') self.ui.leLongitude.setText('') self.ui.leElevation.setText('') self.ui.leLocation.setText('') self.ui.leCountry.setText('') self.ui.leTimeZone.setText('') self.ui.leMinimumInterval.setText('') self.ui.leTextColor.setText('') #---------------------------------------------------------------------- def discardConfigFields(self): """Clear all config fields and repopulate with original text.""" self.clearConfigFields() self.setConfigurationText() def autoStartStop(self, action): if action == 'start': if self.ui.sbInterval.value() == 0: self.timer.setInterval(int(self.miscellaneous['minimum_interval'])) else: self.timer.setInterval(self.ui.sbInterval.value() * 1000) self.timer.start() elif action == 'stop': self.timer.stop() def advanceDate(self): self.displayedDate = self.displayedDate.addDays(1) self.ui.deDate.setDate(self.displayedDate.date()) def setTimes(self): date_displayed = self.ui.deDate.date().toPyDate() astral_info = self.location.sun(date_displayed) self.ui.leSunrise.setText(astral_info['sunrise'].strftime('%I:%M %p')) self.ui.leSunset.setText(astral_info['sunset'].strftime('%I:%M %p')) self.ui.leDaylight.setText(self.calcDaylight(astral_info['sunset'] - astral_info['sunrise'])) self.ui.leMoonPhase.setText('Day ' + str(self.location.moon_phase(date_displayed, type(float)))) self.setMoonPhase(self.location.moon_phase(date_displayed, type(float))) #print(self.location.moon_phase(date=None, rtype=type(float))) def calcDaylight(self, timedelta): return '{} hours, {} minutes'.format(timedelta.seconds // 3600, (timedelta.seconds // 60) % 60) def setMoonPhase(self, moon_phase): #print(moon_phase) increment = 100 / 14 self.scene.removeItem(self.ellipseBlack) if moon_phase < 15: self.ellipseBlack = self.scene.addEllipse((moon_phase * -increment) + 50, 30, 100, 100, self.pen, self.brushBlack) else: self.ellipseBlack = self.scene.addEllipse(((moon_phase - 28) * -increment) + 50, 30, 100, 100, self.pen, self.brushBlack)
# field list f_names = [ 'ptt', 'fromlocation', 'tolocation', 'diel', 'moon', 'startdate', 'enddate' ] with arcpy.da.InsertCursor(eventTable, f_names) as iCur: rows = [] # define diel events for first day loc = Location(('loc', '', locs[0][1][1], locs[0][1][0], 'US/Pacific', 0)) # pass in as a tuple loc.solar_depression = 'civil' loc_day = startDate # as datetime sun = loc.sun(loc_day) moon = loc.moon_phase(loc_day) events = { 1: sun['dawn'].replace(tzinfo=None), 2: sun['sunrise'].replace(tzinfo=None), 3: sun['sunset'].replace(tzinfo=None), 4: sun['dusk'].replace(tzinfo=None) } diel_name = {1: 'Night', 2: 'Dawn', 3: 'Day', 4: 'Dusk'} per = 3 # first timevalue (deploy) will always be sometime before sunset, RIGHT? seg = 0 cur_hour = startDate.hour # integer endDate = datetime.datetime.combine(startDate.date(), datetime.time(cur_hour + 1)) while loc_day < stopDate: while True: