2011-02-08 12 views
9

주어진 시간대 일출 위치에 대해 일출과 -set을 계산하는 방법을 검색합니다. Zend_Date과 비슷한 것을 원합니다.자바로 일출과 일몰 계산하기

아이디어는 위치를 선택할 수있는 응용 프로그램을 가지고 있으며 실제 시간과 일출 시간을 기반으로 설정합니다.

건배 및 감사,
-lony

+1

문제는 여기에 무엇입니까? –

+0

'Swing에서'하는 방법은 명령 줄 응용 프로그램, 서블릿, 개미 작업 또는 단위 테스트에서 수행하는 것과 완전히 똑같습니다. Java를 사용하십시오. '스윙'태그 제거. –

+0

질문은 일몰과 일출을 계산하는 방법입니다. Nothing은 이미 스윙과 관련된 것은 아무것도 아니었지만 이미 태그를 삭제했습니다. – lony

답변

10

은 GPS 좌표와 날짜에서 일출/일몰 시간을 계산 sunrisesunsetlib-java를 살펴 보자.

+0

감사합니다. 그 솔기가 내가 원하는 것입니다. – lony

+2

이 라이브러리는 일출과 일몰 예측에 매우 간단한 모델을 사용하며 부정확 한 결과를 제공합니다. 많은 응용 프로그램에서는 문제가 없지만 다른 게시 된 출처에는 동의하지 않습니다. 정확한 해결책을 찾고 있다면 다른 곳을 찾아 보길 권합니다. –

4

일출과 일몰을 계산하는 것은 실제로 해결하기가 매우 어려운 문제이며 실제 결과를 산출하지 않는 지나치게 간단한 태양계 모델을 사용한다고 주장하는 대부분의 도서관은 해결해야합니다.

지구의 태양과 달에 관한 지구의 궤도는 불규칙하며, 지구의 회전축은 두 가지 다른 방법 (세차 운동과 조정)으로 흔들리고 천문학 자에 의해 사용 된 시간 규모는 협정 세계시 (UTC). 그 위에, 대기 굴절은 천체의 지각 된 위치를 왜곡 (특히 지평선 근처). 태양과 달의 상승과 세팅은 일반적으로 디스크의 중심을 지나가는 것이 아니라 수평선 위의 디스크의 첫 번째 모습에 의해 정의됩니다. 디스크의 감지 된 크기는 관찰자로부터의 거리에 따라 시간에 따라 변한다.

필자가 작업하고있는 프로젝트에 대해 정확한 계산이 필요했고 최첨단 모델을 모두 포함하는 라이브러리를 작성했습니다.

우리는이에 대한 웹 API를 제공하고 웹 API와 자바 라이브러리 모두에서 찾을 수 있습니다

:

http://askgeo.com/

해당 사이트는 위도와 경도에 따라 다른 정보를 많이 제공 . 현재 도서관의 세부 사항에 대해 읽을 수 있습니다 :

http://askgeo.com/database/Astronomy

라이브러리 및 웹 API 상업하지만 우리는 비영리 단체, 연구자, 그리고 오픈 소스 프로젝트를 자격하는 웹 API를 무료로 액세스 할 수 있습니다.

http://askgeo.com/#pricing

(무엇보다도) 일출과 일몰을 제공하는 라이브러리 "천문학"목록의 하나입니다 : 상업 사용자의 경우, 가격 정보에 있습니다.

+3

정말 유망 해 보이지만 오픈 소스 여야합니다. 그것이 완벽해야한다는 것은 그렇게 중요하지 않습니다. 5-10 분 이탈이 괜찮 으면 태양 상승과 일몰을 계산하는 것이 어렵습니까? – lony

+0

내가 본 대부분의 방법은 약 10 분 정도이므로 정확하면 라이브러리에 대해 까다로울 필요가 없습니다. 더 나은 모델이 필요한 분 수준 정확도로 내려 가고자하는 경우입니다. 로컬 토폴로지 (예 : 로컬 언덕/산)가 일출과 일몰에 큰 영향을 미치고 내가 본 모든 모델에 포함되지 않았으므로 정확도가별로 중요하지 않다고 가정하는 것은 쉽습니다. 그러나 결과가 사용자를 대면하는 경우, 사용자가 확립 된 권한에 동의하지 않으면 인식 품질에 대한 문제입니다. –

+0

좋은 지적. 감사. – lony

0

당신은 그것은 아주 사용하기 쉽습니다 sunsrise and sunset times

를 얻을이 무료 웹 서비스를 사용할 수 있습니다. 그것은 GMT로 시간을 응답하므로 필요하다면 위도/경도 - 시간대 변환을 수행해야합니다.

2

방금 ​​을 지원하는 Time4J-v4.29을 출시했습니다.예 :

SolarTime hamburg = SolarTime.ofLocation(53.55, 10.0); 
Optional<Moment> result = PlainDate.nowInSystemTime().get(hamburg.sunrise()); 
System.out.println(result.get().toZonalTimestamp(() -> "Europe/Berlin")); 

자바 8 호환성 : (유형 Moment 또는 PlainTimestamp의) 클래스 SolarTime

결과는 쉽게 일반적으로, Instant 또는 LocalDateTime 같은 자바 8 종류로 변환 할 수 있습니다 메소드 toTemporalAccessor()을 호출합니다. 알고리즘 정보

:

주요 알고리즘 (델타 T-계산도 Time4J 의해 고려되는 주요 차이) NOAA 의해 사용 된 것과 동일하다. NOAA 알고리즘 (Jean Meeus가 개발 한 알고리즘과 동일)은 @dogbane의 답변에서 언급 한 sunrisesunsetlib 라이브러리에서 사용되는 Williams 알고리즘보다 훨씬 정확합니다. 특히 북극 지역 근처 또는 극 지역에 있습니다. 그러나 Time4J는 계산기 이름을 지정하여 Williams 알고리즘을 지원합니다. 이 간단한 알고리즘은 정상적인 지리적 위치에서 여전히 사용 가능하며 1-2 분 정밀도를 산출합니다.

기타 기능 :

일부 블루 시간 같은 속임수, 다양한 황혼의 정의, 햇빛 또는 극성 밤/한밤의 태양이나 관찰자 고도의 영향을 결정하는 길이 또한 API를 참조 지원됩니다. 정밀에 대한

참고 :

그래서 지금, 우리는 항상 산 또는 특별 기상 조건과 같은 위상 적 (topologic) 사실 일출/일몰의 실제 시간에 강력한 영향을 미칠하고 모델링 할 수 없음을 명심해야합니까 일출/일몰 계산을 지원하는 라이브러리.

1

당신은 ⩾7 자바 commons-suncalc, 종속성이없는 라이브러리를 사용 할 수 있습니다 :

Date date = // date of calculation 
double lat, lng = // geolocation 
SunTimes times = SunTimes.compute() 
      .on(date)  // set a date 
      .at(lat, lng) // set a location 
      .execute();  // get the results 
System.out.println("Sunrise: " + times.getRise()); 
System.out.println("Sunset: " + times.getSet());