Güneş Doğuş ve Batış Saatlerini Hesaplama

Bazen yaptığımız projelerde spesifik işlerle karşılaşabiliyoruz. Şu anda üzerinde çalıştığım işte güneş doğuş ve batış saatlerini dünyanın herhangi bir yerinin koordinatlarını vererek bulmak gerekti. Bildiğiniz gibi koordinatlar latitude ve longitude değerleri olarak gelmekte. Bunun için daha önce yapılmış bir C# sınıfı buldum fakat bu sınıf sadece derece, dakika ve saniye cinsinden değerlerle çalışıyordu. bunun için latitude ve longitude değerlerinide derece, dakika ve saniye cinsine çevirmem gerekti. hemde North, West, East ve South değerleriyle vermemiz gerekiyor. North- South ve East-West ikilileri koordinatın - ile gelip gelmemesine göre değişmektedir.

Öncelikle Sunset ve Sunrise yani gün doğumu ve gün batımı değerlerini aldığım kodu açıklayacak ardından üstüne geliştirdiğim lat ve long değerlerini derece,dakika ve saniye cinsine yaptığım çevrimi ve ek özelliği paylaşacağım.

Bu işlemin önemi eğer bir lokasyondaki gün doğumu ve batımı saatlerine ihtiyacınız olursa bunun için çoğu kişi web servis kullanıyor. Bu hazır sunulan web servisler ya bazen down oluyor ya da doğru sonucu vermiyor. bu sınıf ve geliştirdiğim ek özellik sayesinde bir web servise ihtiyacınız olmadan lokal olarak bu özelliği kullanabileceksiniz. GMT'ye dikkat etmeyi unutmayın.

Sınıfdaki metotun kullanımı aşağıdaki şekildedir;

SunTimes.Instance.CalculateSunRiseSetTimes(new SunTimes.LatitudeCoords

                       (latDegreeValue, latMinuteValue, latSecondValue, SunTimes.LatitudeCoords.Direction.South),

                                    new SunTimes.LongitudeCoords

                       (longDegreeValue, longMinuteValue, longSecondValue, SunTimes.LongitudeCoords.Direction.East),

                                    date, ref sunrise, ref sunset,

 

                     ref isSunrise, ref isSunset);

 

Geliştirdiğim özellik latitude ve longitude üzerinden çevrim aşağıdaki gibidir;

        static void Main(string[] args)

        {

            double lat = 40.266864;

            double lng = 29.063448;

 

            DateTime date = DateTime.Today;

            bool isSunrise = false;

            bool isSunset = false;

            DateTime sunrise = DateTime.Now;

            DateTime sunset = DateTime.Now;

 

            string strLatitude = lat.ToString();

            string strLongitude = lng.ToString();

            int latitudeRoute = 0;

            int longitudeRoute = 0;

 

            if (strLatitude[0] == '-')

            {

                latitudeRoute = 0;

            }

            else

            {

                latitudeRoute = 1;

            }

 

            if (strLongitude[0] == '-')

            {

                longitudeRoute = 0;

            }

            else

            {

                longitudeRoute = 1;

            }

 

            bool latDegreeFinish = false;

 

            int latMinuteCounter = 0;

            string latDegree = "";

            string latMinute = "";

            string latSecond = "";

            bool degreeFlag = false;

            

            for (int i = 0; i < strLatitude.Length - 1; ++i)

            {

                if (strLatitude[0] == '-')

                    continue;

 

                if ((strLatitude[i] != '.' && strLatitude[i] != ',') && latDegreeFinish==false)

                {

                    latDegree += strLatitude[i];

                }

                else if(degreeFlag==false)

                {

                    latDegreeFinish = true;

                    degreeFlag = true;

                    continue;

                }

 

                if (latDegreeFinish == true && latMinuteCounter < 2)

                {

                    latMinute += strLatitude[i];

                    latMinuteCounter++;

                }

 

                if (latMinuteCounter >= 2 && latMinuteCounter < 4)

                {

                    latSecond += strLatitude[i];

                    latMinuteCounter++;

                }

            }

 

            bool longDegreeFinish = false;

            string longDegree = "";

            string longMinute = "";

            string longSecond = "";

            int longMinuteCounter = 0;

            degreeFlag = false;

 

            for (int i = 0; i < strLongitude.Length - 1; ++i)

            {

                if (strLongitude[0] == '-')

                    continue;

 

                if ((strLongitude[i] != '.' && strLongitude[i] != ',') && longDegreeFinish == false)

                {

                    longDegree += strLongitude[i];

                }

                else if(degreeFlag==false)

                {

                    longDegreeFinish = true;

                    degreeFlag = true;

                    continue;

                }

 

                if (longDegreeFinish == true && longMinuteCounter < 2)

                {

                    longMinute += strLatitude[i];

                    longMinuteCounter++;

                }

 

                if (longMinuteCounter >= 2 && longMinuteCounter < 4)

                {

                    longSecond += strLongitude[i];

                    longMinuteCounter++;

                }

            }

 

            int latDegreeValue = Convert.ToInt32(latDegree);

            int latMinuteValue = Convert.ToInt32(latMinute);

            int latSecondValue = Convert.ToInt32(latSecond);

            int longDegreeValue = Convert.ToInt32(longDegree);

            int longMinuteValue = Convert.ToInt32(longMinute);

            int longSecondValue = Convert.ToInt32(longSecond);

 

            if (latitudeRoute == 0 && longitudeRoute == 0)

            {

                SunTimes.Instance.CalculateSunRiseSetTimes(new SunTimes.LatitudeCoords

                       (latDegreeValue, latMinuteValue, latSecondValue, SunTimes.LatitudeCoords.Direction.South),

                                    new SunTimes.LongitudeCoords

                       (longDegreeValue, longMinuteValue, longSecondValue, SunTimes.LongitudeCoords.Direction.West),

                                    date, ref sunrise, ref sunset,

                     ref isSunrise, ref isSunset);

            }

            else if (latitudeRoute == 0 && longitudeRoute == 1)

            {

                SunTimes.Instance.CalculateSunRiseSetTimes(new SunTimes.LatitudeCoords

                       (latDegreeValue, latMinuteValue, latSecondValue, SunTimes.LatitudeCoords.Direction.South),

                                    new SunTimes.LongitudeCoords

                       (longDegreeValue, longMinuteValue, longSecondValue, SunTimes.LongitudeCoords.Direction.East),

                                    date, ref sunrise, ref sunset,

                     ref isSunrise, ref isSunset);

            }

            else if (latitudeRoute == 1 && longitudeRoute == 0)

            {

                SunTimes.Instance.CalculateSunRiseSetTimes(new SunTimes.LatitudeCoords

                       (latDegreeValue, latMinuteValue, latSecondValue, SunTimes.LatitudeCoords.Direction.North),

                                    new SunTimes.LongitudeCoords

                       (longDegreeValue, longMinuteValue, longSecondValue, SunTimes.LongitudeCoords.Direction.West),

                                    date, ref sunrise, ref sunset,

                     ref isSunrise, ref isSunset);

            }

            else if (latitudeRoute == 1 && longitudeRoute == 1)

            {

               bool err= SunTimes.Instance.CalculateSunRiseSetTimes(new SunTimes.LatitudeCoords

                       (latDegreeValue, latMinuteValue, latSecondValue, SunTimes.LatitudeCoords.Direction.North),

                                    new SunTimes.LongitudeCoords

                       (longDegreeValue, longMinuteValue, longSecondValue, SunTimes.LongitudeCoords.Direction.East),

                                    date, ref sunrise, ref sunset,

                     ref isSunrise, ref isSunset);

                Console.WriteLine(err);

            }

            else

            {

                ;

            }

 

            Console.WriteLine(sunset.ToString());

            Console.WriteLine(sunrise.ToString());

            

 

            Console.ReadLine();

 

        }

 

Uygulamanın bir gün için verdiği güneş batım ve doğum saatleri;

 

 

Uygulamanın C#kodları:

sunrisesunset.zip (52,96 kb)

 

Uygulamanın Sunrise ve Sunset Calculator sınıfı için baz aldığım referans: http://www.codeproject.com/Articles/29306/C-Class-for-Calculating-Sunrise-and-Sunset-Times

 

Yorum ekle