示例#1
0
    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())
示例#2
0
    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())
示例#3
0
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
示例#4
0
 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())
示例#5
0
def test_Location_Moon():
    c=Location()
    c.moon_phase()
示例#6
0
def test_Location_Moon():
    d = datetime.date(2017, 12, 1)
    c=Location()
    assert c.moon_phase(date=d) == 11
示例#7
0
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)
示例#8
0
    # 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: