首页 > 编程语言 >用 PHP 和 JavaScript 显示地球卫星照片

用 PHP 和 JavaScript 显示地球卫星照片

时间:2023-08-26 17:34:32浏览次数:42  
标签:2d 30 CDN JavaScript 照片 PHP 卫星 today

向日葵 8 号气象卫星是日本宇宙航空研究开发机构设计制造的向日葵系列卫星之一,重约 3500 公斤,设计寿命 15 年以上。该卫星于 2014 年 10 月 7 日由 H2A 火箭搭载发射成功,主要用于监测暴雨云团、台风动向以及持续喷发活动的火山等防灾领域。—— 百度百科

日本发射这颗卫星后,不仅用它防灾,还将它拍摄的地球照片发布在互联网上,供爱好者下载。照片发布的官方网站是 http://himawari8.nict.go.jp/,每到整 10 分钟更新(比如 9:30,9:40……),同时有 30 分钟延迟(你 10:00 看到的照片实际上是 9:30 拍的)。

接下来,我们就要研究一下如何获取这些卫星照片了。通过浏览器的访问监测功能,我们可以看到请求的地址:(点击看大图)

/usr/uploads/2016/06/1359531479.png

在本例中,请求地址是 http://himawari8-dl.nict.go.jp/himawari8/img/D531106/2d/550/2016/06/14/140000_0_1.png。地址中有以下几个重要的参数:

  • 2d
    • 代表图像清晰度,2d 就是将图像分成 2x2 的 550px x 550px 的图片,也就是总分辨率 1100px x 1100px。顺带一提该网站最高提供 20d 的清晰度,也就是 11000px x 11000px 的分辨率。当然,除非你的网络极好,否则不要轻易尝试。
  • 2016/06/14
    • 很好理解,就是日期。
  • 140000
    • 是图片对应的 UTC 时间,注意是 UTC!本例中的地址说明我下载的是北京时间晚上 22 点拍摄、22:30 发布的图像。
  • 0_1
    • 是图片对应的坐标,两个参数分别是从 0 开始计数的列数和行数。本例中,请求的是第一列第二行的图片。

明白了这些参数是做什么的,我们就可以开始写代码了。下面的 PHP 代码以表格形式输出 2d 的共 4 张图片:

<?php
function getHimawariUrl($d = 1,$x = 0, $y = 0){
    date_default_timezone_set('UTC');
    $pictime = time() - time() % 600 - 1800;
    $date = date('Y/m/d/Hi',$pictime);
    return "http://himawari8-dl.nict.go.jp/himawari8/img/D531106/".$d."d/550/".$date."00_".$x."_".$y.".png";
}
function writeHimawariTable($d=1){
    echo '<table style="margin:0;padding:0;cell-spacing:0">';
    for($i=0;$i<$d;$i++){
        echo '<tr>';
            for ($j=0;$j<$d;$j++){
                echo '<td><img src="'.getHimawariUrl($d,$j,$i).'" /></td>';
            }
        echo '</tr>';
    }
    echo '</table>';
}

writeHimawariTable(2);
?>

下面的 JavaScript(需要 jQuery 支持)输出 1d 的一张图片,预览可以在这个页面看到:

<script>
    $(document).ready(function(){
        var today = new Date();
        // get date for himawari picture
        t = today.getTime();
        t = t - t % 600000 - 1800000;
        today.setTime(t);
        year = today.getUTCFullYear();
        month = today.getUTCMonth() + 1;
        day = today.getUTCDate();
        hour = today.getUTCHours();
        minute = today.getUTCMinutes();
        if(month<10) month = '0' + month;
        if(day<10) day = '0' + day;
        if(hour<10) hour = '0' + hour;
        if(minute<10) minute = '0' + minute;
        $('#himawari-time').text(today.toLocaleString());
        $('#himawari-pic').attr('src','//himawari.xuyh0120.win/1d/550/'+year+'/'+month+'/'+day+'/'+hour+minute+'00_0_0.webp');
    })
</script>
<p id="himawari-time">加载速度稍慢,请稍候……</p>
<img id="himawari-pic" src="" />

大家在使用该项目图片时也要注意,这个照片发布项目是非盈利的,因此也不提供任何保障,哪天 API 更换,或者是使用这些卫星照片的人太多导致网站流量超标,造成网站无法访问,都是有可能的。另外几个基于该卫星照片的软件项目 EarthLiveSharp馒头地球都是作者自己架设了 CDN 以缓解对源站的压力。

因此,我自己建了 CDN,缓存图像并把它们转换成 WebP 格式。要让 WebP 在 IE 和 Firefox 上得到支持,可以看让 IE 与 Firefox 支持 WebP 图像格式这篇文章。

网站的数据源网址 himawari8-dl.nict.go.jp 是可以直接 CNAME 到你自己的域名上,并加上 CDN 的。因此,也希望大家在使用时注意请求频率,也尽量架设自己的 CDN。

 

标签:2d,30,CDN,JavaScript,照片,PHP,卫星,today
From: https://www.cnblogs.com/HGNET/p/17659156.html

相关文章

  • 基于PHP开发的拍卖直播系统源码分享
    东莞梦幻网络科技最新推出的拍卖直播系统源码,安卓端使用Java语言开发,苹果端则采用Objective-C开发,前端H5则采用了Vue.js开发,后台管理系统基于PHP的ThinkPHP框架开发。基础功能:创造竞价氛围直播拍卖:通过主播的话术,为拍品详细讲解产品特点,创造竞价氛围,不仅拉近了拍品与消费者之间的距......
  • JavaScript-算术运算符
    概述JavaScript共提供10个算术运算符,用来完成基本的算术运算。加法运算符:x+y减法运算符: x-y乘法运算符: x*y除法运算符:x/y指数运算符:x**y余数运算符:x%y自增运算符:++x 或者 x++自减运算符:--x 或者 x--数值运算符: +x负数值运算符:-x减法、乘法、除法运算法比较单纯......
  • php实战手册(6)
    目录函数全局变量函数全局变量下面这段代码是错误的#!/usr/bin/php<?php $x=range(1,10);$result=0;foreach($xas$v){ addSum($v);}functionaddSum($v){ $result+=$v; }echo$result;?>下面也是错误的#!/usr/bin/php<?php ......
  • php网校系统源码,兔知云课堂:点亮知识的星途,成就未来的每一刻
    在这个充满活力的时代,教育正以前所未有的速度和方式进入我们的生活。而今天,我将向您介绍一款颇具魅力的小程序,它即是——兔知云课堂。 兔知云课堂的魅力犹如点滴的水滴,渗透入我们的知识海洋,让我们的未来充满了无限可能。在这个小程序中,您将会发现一个精心构建的学习世界,一个鲜......
  • 知识付费系统源码基于PHP开源的网站内容付费源码,打开行业新机遇
    为什么说无论哪个行业,都值得考虑运用知识付费?让我重新为你解释这个逻辑,一旦你理解了它,你就将拥有极大地放大你现有生意机会的能力。 我们通常将知识付费课程视为一种产品,但它实际上还有另一种本质,那就是广告。或许你并未意识到,在创建知识付费课程时,你也在打造一种媒介,一种可以......
  • VSCode使用JavaScript刷LeetCode配置教程(亲试可以!)
    账号秘密都对,但是缺登录不成功的问题诀窍可能是:在属性设置中把LeetCode版本改成cn。点击LeetCode配置,修改Endpoint配置项,改成leetcode-cn,再次尝试登陆即可。  大家可移步原博文:https://blog.csdn.net/qq_37263248/article/details/124304402......
  • 宝塔机为php打扩展后失效的解决方案
    cd/www/server/php/74/etc宝塔有两个配置文件,php.ini,php-cli.ini,如果我们是手动安装的扩展,两边都要同步 systemctlrestartphp-fpm重启php服务生效......
  • php基于Redis实现播放量增加功能
    开发思路就是用redis得有序组合功能1.先自增到reids中$redisGetKey='ciku_promoter_click_number';$jyId=2;//文章id$redis=RedisService::build()->getInstance();$videoPlayNumber=$redis->zScore($redisGetKey,$jyId);//如果该文章id存在,则新增,否则自增1if......
  • JavaScript 去重-对象数组中的重复对象
    先showCodeArray.from(newSet(myArray.map(JSON.stringify)),JSON.parse)myArray是一个对象数组,它是源数据。map(JSON.stringify) 的作用是将每个对象转换为JSON字符串。JSON.stringify 方法将JavaScript对象转换为JSON字符串表示。newSet(...) 创建一个新的S......
  • php读取excel数据 使用phpspreadsheet
    首先是用composer安装phpoffice/phpspreadsheet具体代码//读取数据privatefunctionreadYewuExcel(){$reader=IOFactory::createReader("Xlsx");$reader->setReadDataOnly(TRUE);$spreadsheet=$reader->load('yewu.xlsx');......