이제 로우데이터는 자동생성하게끔 로직을 만들었으니까.
기존의 행성의 가시성에 접근했을 때 DB 테이블 생성과 데이터를 삽입하는 로직은 지우고 데이터 조회만 하면 된다.
기존의 DB 테이블 생성, 삽입 로직은 지웠고, 데이터 조회만 남겼다.
확인만 해보면 됨.
금성에 대한 7일치 데이터
화성에 대한 7일치 데이터.
근데 좀 이상하다 11시면 해가 져있을 시간인데 visibility_judgment
에 대한 데이터가 좀 그렇네. 코드 수정이 필요해보인다.
코드 수정후!! 이제 고쳤구만
근데 좀 데이터가 지저분해서 몇개 지우고 더 관측에 필요한 데이터를 계산해서 보여주는 로직을 넣고 싶은 마음이 들어서,
고도와 방위각을 계산하는 로직을 넣겠다는 결심이 섰다.
# 행성의 고도와 방위각 계산
apparent = (planets['earth'] + location).at(t0).observe(planet).apparent()
alt, az, _ = apparent.altaz()
# 고도 값
altitude = alt.degrees
# 일출 및 일몰 시간 비교
sunrise_time = datetime.fromisoformat(sunrise_sunset_data['sunrise']).time()
sunset_time = datetime.fromisoformat(sunrise_sunset_data['sunset']).time()
# 관측 가능 여부 결정 로직
if best_time:
if best_time > sunset_time or best_time < sunrise_time:
# 일몰 이후 또는 일출 이전이라면
if altitude >= 45:
visibility_judgment = "Good visibility - The planet is high in the sky and it's dark enough for easy observation."
else:
visibility_judgment = "Difficult to observe - The planet is visible, but it is low in the sky, making it harder to see."
else:
# 일출 이후 일몰 이전
if altitude >= 45:
visibility_judgment = "Difficult to observe - The planet is high, but daylight might make it challenging to see."
else:
visibility_judgment = "Not recommended - The planet is low in the sky and daylight makes it very hard to observe."
else:
visibility_judgment = "No optimal observation time available."
이렇게 추가를 해줬다.
관측 가능 여부를 결정해주는 로직에서는 조금 더 세세한 이유를 표기했다.
해가 떠 있는 시간일 경우, 그리고 고도가 45도 미만일 경우..
여튼 이런 로직을 더 추가해서 사용자가 어떤 상황인지 정확히 인지하고 관측에 도움이 되게끔 했다.
아!
# 방위각을 동서남북 방향으로 변환
azimuth = az.degrees
if 0 <= azimuth < 22.5 or 337.5 <= azimuth <= 360:
direction = "North"
elif 22.5 <= azimuth < 67.5:
direction = "Northeast"
elif 67.5 <= azimuth < 112.5:
direction = "East"
elif 112.5 <= azimuth < 157.5:
direction = "Southeast"
elif 157.5 <= azimuth < 202.5:
direction = "South"
elif 202.5 <= azimuth < 247.5:
direction = "Southwest"
elif 247.5 <= azimuth < 292.5:
direction = "West"
elif 292.5 <= azimuth < 337.5:
direction = "Northwest"
else:
direction = "Unknown"
그리고 방위각은 동서남북으로 더 알아먹기 쉽게 변환하는 로직을 거쳐서 표기해준다!
그래서 이런 결과를 보여준다.
엄.. 이건 고도가 지평선 아래라서 보일 수 없는데 "visible": true
로 표시되어있다.
# 가시성 판단 추가 로직
visible = False
best_time = None
for t, visible_event in zip(times, is_visible):
if visible_event == 1: # 행성이 떠오르는 시간
visible = True
best_time = convert_utc_to_local_time(t.utc_datetime(), timezone_info['offset_sec']).time()
break
내가 여기 가시성 판단에서 고도를 안썼구나..? 코드 수정
# 가시성 판단 추가 로직 (고도를 고려)
visible = False
best_time = None
for t, visible_event in zip(times, is_visible):
if visible_event == 1: # 행성이 떠오르는 시간
# 고도 값 계산
apparent = (planets['earth'] + location).at(t).observe(planet).apparent()
alt, az, _ = apparent.altaz()
# 고도가 0 이상일 때만 visible로 설정
if alt.degrees >= 0:
visible = True
best_time = convert_utc_to_local_time(t.utc_datetime(), timezone_info['offset_sec']).time()
break
이제 다시 안보이는 경우의 결과를 보자.
오케이.. 혹시 모르니까 조금 더 요청해보자.
이젠 또 이게 false네..
로직에 문제가 있다.
best_time
도 보이지 않는 것을 보니까 조건문이 조금 오류가 있었던 것 같다.
여튼 고치고 왔고.
아주 맘에 드는군.
이러면 이제 진짜 가시성도 완성 더 건드릴 필요는 없을 것 같다.
결론
- 기존 DB 생성 로직 삭제.
- 고도와 일출/일몰 시간을 고려한 정확한 가시성 판단.
- 사용자가 이해하기 쉬운 동서남북 방향 정보 제공.
- 고도에 따라 최적의 관측 시간 및 가시성 안내를 세부적으로 추가.
이제는 혜성 데이터 추가와.. 별자리를 조금 더 좋은 데이터로 바꿔주면 아주 좋을 것 같은데. 일단은 여기까지.
'Coding History > Team Project' 카테고리의 다른 글
팀플) 혜성 이벤트 시작! (데이터 접근, 파싱, 추출) (2) | 2024.10.19 |
---|---|
팀플) 별자리 데이터 수정. (0) | 2024.10.19 |
팀플) 대행성 로직 간단화와 행성별로 나누기 (0) | 2024.10.18 |
팀플) 행성 대접근 로직 수정. (LIST 반환.. xxx 데이터 간략화 하기, 행성별로 나누자는 생각 도달.) (0) | 2024.10.18 |
팀플) 로우데이터 저장 전략. (0) | 2024.10.18 |