Vẽ ngày và đêm trên bản đồ Google


12

Tôi đang tìm cách vẽ ngày / đêm trên bản đồ Google, trong một thời điểm tùy ý. Tôi quen với việc tạo các ô bản đồ; Tôi chỉ tìm kiếm một thuật toán để cho tôi biết liệu một điểm cụ thể trên toàn cầu hiện đang ở trong ánh sáng ban ngày hay bóng tối, hay nói cách khác là vẽ đường cong của giao diện ngày / đêm trên bản đồ.

Tôi đã thực hiện một số tìm kiếm, nhưng có thể tôi thậm chí không biết đủ về miền vấn đề ở đây để biết những thuật ngữ cần tìm!

Có ý kiến ​​gì không? Không nhất thiết phải hoàn hảo - về cơ bản, tôi đang so sánh dữ liệu định vị địa lý của Flickr về ảnh mặt trời mọc và mặt trời lặn (và dấu thời gian "ngày chụp" của chúng) với thực tế và điều này là để giúp tôi hình dung ra nó.


Các giải pháp cũng xuất hiện trong một câu hỏi liên quan rất chặt chẽ tại gis.stackexchange.com/questions/17184/ Ấn .
whuber

Câu trả lời:


6

Đây trang cho phương trình tốt để 1 độ. Có vẻ như này cũng tính toán nhưng tôi không thực sự kiểm tra.


Tuyệt vời, chỉ là những gì tôi đang tìm kiếm. Và vâng, có vẻ như hàm projillum () trong vplanet.c trong mã đó phù hợp khá tốt với thuật toán đó, vì vậy điều đó chắc chắn sẽ khiến tôi đi đúng hướng, cảm ơn.
Matt Gibson

2

Cũng là một ví dụ http://blog.char95.com/demos/daylight-on-google-maps/

    Sunrise/Sunset Algorithm

Source:
    Almanac for Computers, 1990
    published by Nautical Almanac Office
    United States Naval Observatory
    Washington, DC 20392

Inputs:
    day, month, year:      date of sunrise/sunset
    latitude, longitude:   location for sunrise/sunset
    zenith:                Sun's zenith for sunrise/sunset
      offical      = 90 degrees 50'
      civil        = 96 degrees
      nautical     = 102 degrees
      astronomical = 108 degrees

    NOTE: longitude is positive for East and negative for West
        NOTE: the algorithm assumes the use of a calculator with the
        trig functions in "degree" (rather than "radian") mode. Most
        programming languages assume radian arguments, requiring back
        and forth convertions. The factor is 180/pi. So, for instance,
        the equation RA = atan(0.91764 * tan(L)) would be coded as RA
        = (180/pi)*atan(0.91764 * tan((pi/180)*L)) to give a degree
        answer with a degree input for L.


1. first calculate the day of the year

    N1 = floor(275 * month / 9)
    N2 = floor((month + 9) / 12)
    N3 = (1 + floor((year - 4 * floor(year / 4) + 2) / 3))
    N = N1 - (N2 * N3) + day - 30

2. convert the longitude to hour value and calculate an approximate time

    lngHour = longitude / 15

    if rising time is desired:
      t = N + ((6 - lngHour) / 24)
    if setting time is desired:
      t = N + ((18 - lngHour) / 24)

3. calculate the Sun's mean anomaly

    M = (0.9856 * t) - 3.289

4. calculate the Sun's true longitude

    L = M + (1.916 * sin(M)) + (0.020 * sin(2 * M)) + 282.634
    NOTE: L potentially needs to be adjusted into the range [0,360) by adding/subtracting 360

5a. calculate the Sun's right ascension

    RA = atan(0.91764 * tan(L))
    NOTE: RA potentially needs to be adjusted into the range [0,360) by adding/subtracting 360

5b. right ascension value needs to be in the same quadrant as L

    Lquadrant  = (floor( L/90)) * 90
    RAquadrant = (floor(RA/90)) * 90
    RA = RA + (Lquadrant - RAquadrant)

5c. right ascension value needs to be converted into hours

    RA = RA / 15

6. calculate the Sun's declination

    sinDec = 0.39782 * sin(L)
    cosDec = cos(asin(sinDec))

7a. calculate the Sun's local hour angle

    cosH = (cos(zenith) - (sinDec * sin(latitude))) / (cosDec * cos(latitude))

    if (cosH >  1) 
      the sun never rises on this location (on the specified date)
    if (cosH < -1)
      the sun never sets on this location (on the specified date)

7b. finish calculating H and convert into hours

    if if rising time is desired:
      H = 360 - acos(cosH)
    if setting time is desired:
      H = acos(cosH)

    H = H / 15

8. calculate local mean time of rising/setting

    T = H + RA - (0.06571 * t) - 6.622

9. adjust back to UTC

    UT = T - lngHour
    NOTE: UT potentially needs to be adjusted into the range [0,24) by adding/subtracting 24

10. convert UT value to local time zone of latitude/longitude

    localT = UT + localOffset

sử dụng thuật toán http://williams.best.vwh.net/sunawn_sunset_alerskym.htm

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.