从中央气象台获取卫星云图的例子,代码如下:
url:地址
package com.jointsky.jointframe.test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* 从中国气象台网站获取卫星云图的例子
* @author Administrator
*
*/
public class GetSatelliteCloudImageTest {
//格式化时间
private static SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
private static SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm:ss");
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private static SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy/MM/dd/");
private static SimpleDateFormat sdf4 = new SimpleDateFormat("yyyyMMdd");
private static SimpleDateFormat sdf5 = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
/**
* 主函数
* @param args
*/
public static void main(String[] args) {
//每日卫星云图第一张数据的时间是"03:59:59",但是接近整点的时候才会发布;最后一张图片是23:45的,放在00:00:00之后到00:10:00之间取数据
//不取数据的开始时间(时间在每天的00:10:00到03:59:59秒之间不取数据)
String beginTime = " 00:10:00";
//不去数据的结束时间
String endTime = " 03:59:59";
Date date = new Date();
//当前时间(无时分秒)
String currentTime1 = sdf1.format(date);
Date begin = new Date();
Date end = new Date();
Date current = new Date();
String b = currentTime1+beginTime;
String e = currentTime1+endTime;
try {
begin = sdf.parse(b);
end = sdf.parse(e);
current = date;
//current = sdf.parse(currentTime1+" "+currentTime2);
} catch (ParseException e1) {
e1.printStackTrace();
}
//before方法:begin时间在当前时间current返回true
if (begin.before(current)&¤t.before(end)) {
return;
}else {
try {
String url = getImageUrl(date);
String filename = getImageName(date,getTimeCode(date));
Map<String, Object> map = download(url, filename);
//图片名称
String imageName = (String) map.get("filename");
//预报时间
String forecastTime = (String) map.get("forecastTime");
//图片路径
String imagePath = (String) map.get("imagePath");
System.out.println("图片名称:"+imageName+";预报时间:"+forecastTime+";路径:"+imagePath);
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
/**
* 获取卫星云图的url地址
* @return
* @throws Exception
*/
public static String getImageUrl(Date date) throws Exception {
//"http://image.nmc.cn/product/2017/03/24/WXCL/medium/SEVP_NSMC_WXCL_ASC_E99_ACHN_LNO_PY_20170324071500000.JPG"
String url = "http://image.nmc.cn/product/";
//图片名称
String imageName = "SEVP_NSMC_WXCL_ASC_E99_ACHN_LNO_PY_";
//时间编码
String timeCode = getTimeCode(date);
Integer code = Integer.parseInt(timeCode);
//url前部出现的时间
String time = sdf3.format(date);
String name_time = "";
if (code>=1945) {
//前一天
Date timex = new Date(date.getTime() - 86400000);
name_time = sdf4.format(timex);
}else {
name_time = sdf4.format(date);
}
//图片格式
String imgLayout = "00000.JPG";
url = url + time + "WXCL/medium/" + imageName + name_time + timeCode + imgLayout;
return url;
}
/**
* 获取预报时间对应的时间代码
* @param date
* @return
* @throws Exception
*/
public static String getTimeCode(Date date) throws Exception {
//当前日期
String currentDate = sdf1.format(date);
if (sdf.parse(currentDate+" 03:59:00").before(date)&&(sdf.parse(currentDate+" 04:30:00")).after(date)||(sdf.parse(currentDate+" 04:30:00")).equals(date)) {
return "1945";
}else if (sdf.parse(currentDate+" 04:30:00").before(date)&&(sdf.parse(currentDate+" 04:59:59")).after(date)||(sdf.parse(currentDate+" 04:59:59")).equals(date)) {
return "2015";
}else if (sdf.parse(currentDate+" 04:59:59").before(date)&&(sdf.parse(currentDate+" 05:30:00")).after(date)||(sdf.parse(currentDate+" 05:30:00")).equals(date)) {
return "2045";
}else if (sdf.parse(currentDate+" 05:30:00").before(date)&&(sdf.parse(currentDate+" 05:59:59")).after(date)||(sdf.parse(currentDate+" 05:59:59")).equals(date)) {
return "2115";
}else if (sdf.parse(currentDate+" 05:59:59").before(date)&&(sdf.parse(currentDate+" 06:30:00")).after(date)||(sdf.parse(currentDate+" 06:30:00")).equals(date)) {
return "2145";
}else if (sdf.parse(currentDate+" 06:30:00").before(date)&&(sdf.parse(currentDate+" 06:59:59")).after(date)||(sdf.parse(currentDate+" 06:59:59")).equals(date)) {
return "2215";
}else if (sdf.parse(currentDate+" 06:59:59").before(date)&&(sdf.parse(currentDate+" 07:30:00")).after(date)||(sdf.parse(currentDate+" 07:30:00")).equals(date)) {
return "2245";
}else if (sdf.parse(currentDate+" 07:30:00").before(date)&&(sdf.parse(currentDate+" 07:59:59")).after(date)||(sdf.parse(currentDate+" 07:59:59")).equals(date)) {
return "2315";
}else if (sdf.parse(currentDate+" 07:59:59").before(date)&&(sdf.parse(currentDate+" 08:30:00")).after(date)||(sdf.parse(currentDate+" 08:30:00")).equals(date)) {
return "2345";
}else if (sdf.parse(currentDate+" 08:30:00").before(date)&&(sdf.parse(currentDate+" 08:30:00")).after(date)||(sdf.parse(currentDate+" 08:59:59")).equals(date)) {
return "0015";
}else if (sdf.parse(currentDate+" 08:59:59").before(date)&&(sdf.parse(currentDate+" 09:30:00")).after(date)||(sdf.parse(currentDate+" 09:30:00")).equals(date)) {
return "0045";
}else if (sdf.parse(currentDate+" 09:30:00").before(date)&&(sdf.parse(currentDate+" 09:59:59")).after(date)||(sdf.parse(currentDate+" 09:59:59")).equals(date)) {
return "0115";
}else if (sdf.parse(currentDate+" 09:59:59").before(date)&&(sdf.parse(currentDate+" 10:30:00")).after(date)||(sdf.parse(currentDate+" 10:30:00")).equals(date)) {
return "0145";
}else if (sdf.parse(currentDate+" 10:30:00").before(date)&&(sdf.parse(currentDate+" 10:59:59")).after(date)||(sdf.parse(currentDate+" 10:59:59")).equals(date)) {
return "0215";
}else if (sdf.parse(currentDate+" 10:59:59").before(date)&&(sdf.parse(currentDate+" 11:30:00")).after(date)||(sdf.parse(currentDate+" 11:30:00")).equals(date)) {
return "0245";
}else if (sdf.parse(currentDate+" 11:30:00").before(date)&&(sdf.parse(currentDate+" 11:59:59")).after(date)||(sdf.parse(currentDate+" 11:59:59")).equals(date)) {
return "0315";
}else if (sdf.parse(currentDate+" 11:59:59").before(date)&&(sdf.parse(currentDate+" 12:30:00")).after(date)||(sdf.parse(currentDate+" 12:30:00")).equals(date)) {
return "0345";
}else if (sdf.parse(currentDate+" 12:30:00").before(date)&&(sdf.parse(currentDate+" 12:59:59")).after(date)||(sdf.parse(currentDate+" 12:59:59")).equals(date)) {
return "0415";
}else if (sdf.parse(currentDate+" 12:59:59").before(date)&&(sdf.parse(currentDate+" 13:30:00")).after(date)||(sdf.parse(currentDate+" 13:30:00")).equals(date)) {
return "0445";
}else if (sdf.parse(currentDate+" 13:30:00").before(date)&&(sdf.parse(currentDate+" 13:59:59")).after(date)||(sdf.parse(currentDate+" 13:59:59")).equals(date)) {
return "0515";
}else if (sdf.parse(currentDate+" 13:59:59").before(date)&&(sdf.parse(currentDate+" 14:30:00")).after(date)||(sdf.parse(currentDate+" 14:30:00")).equals(date)) {
return "0545";
}else if (sdf.parse(currentDate+" 14:30:00").before(date)&&(sdf.parse(currentDate+" 14:59:59")).after(date)||(sdf.parse(currentDate+" 14:59:59")).equals(date)) {
return "0615";
}else if (sdf.parse(currentDate+" 14:59:59").before(date)&&(sdf.parse(currentDate+" 15:30:00")).after(date)||(sdf.parse(currentDate+" 15:30:00")).equals(date)) {
return "0645";
}else if (sdf.parse(currentDate+" 15:30:00").before(date)&&(sdf.parse(currentDate+" 15:59:59")).after(date)||(sdf.parse(currentDate+" 15:59:59")).equals(date)) {
return "0715";
}else if (sdf.parse(currentDate+" 15:59:59").before(date)&&(sdf.parse(currentDate+" 16:30:00")).after(date)||(sdf.parse(currentDate+" 16:30:00")).equals(date)) {
return "0745";
}else if (sdf.parse(currentDate+" 16:30:00").before(date)&&(sdf.parse(currentDate+" 16:59:59")).after(date)||(sdf.parse(currentDate+" 16:59:59")).equals(date)) {
return "0815";
}else if (sdf.parse(currentDate+" 16:59:59").before(date)&&(sdf.parse(currentDate+" 17:30:00")).after(date)||(sdf.parse(currentDate+" 17:30:00")).equals(date)) {
return "0845";
}else if (sdf.parse(currentDate+" 17:30:00").before(date)&&(sdf.parse(currentDate+" 17:59:59")).after(date)||(sdf.parse(currentDate+" 17:59:59")).equals(date)) {
return "0915";
}else if (sdf.parse(currentDate+" 17:59:59").before(date)&&(sdf.parse(currentDate+" 18:30:00")).after(date)||(sdf.parse(currentDate+" 18:30:00")).equals(date)) {
return "0945";
}else if (sdf.parse(currentDate+" 18:30:00").before(date)&&(sdf.parse(currentDate+" 18:59:59")).after(date)||(sdf.parse(currentDate+" 18:59:59")).equals(date)) {
return "1015";
}else if (sdf.parse(currentDate+" 18:59:59").before(date)&&(sdf.parse(currentDate+" 19:30:00")).after(date)||(sdf.parse(currentDate+" 19:30:00")).equals(date)) {
return "1045";
}else if (sdf.parse(currentDate+" 19:30:00").before(date)&&(sdf.parse(currentDate+" 19:59:59")).after(date)||(sdf.parse(currentDate+" 19:59:59")).equals(date)) {
return "1115";
}else if (sdf.parse(currentDate+" 19:59:59").before(date)&&(sdf.parse(currentDate+" 20:30:00")).after(date)||(sdf.parse(currentDate+" 20:30:00")).equals(date)) {
return "1145";
}else if (sdf.parse(currentDate+" 20:30:00").before(date)&&(sdf.parse(currentDate+" 20:59:59")).after(date)||(sdf.parse(currentDate+" 20:59:59")).equals(date)) {
return "1215";
}else if (sdf.parse(currentDate+" 20:59:59").before(date)&&(sdf.parse(currentDate+" 21:30:00")).after(date)||(sdf.parse(currentDate+" 21:30:00")).equals(date)) {
return "1245";
}else if (sdf.parse(currentDate+" 21:30:00").before(date)&&(sdf.parse(currentDate+" 21:59:59")).after(date)||(sdf.parse(currentDate+" 21:59:59")).equals(date)) {
return "1315";
}else if (sdf.parse(currentDate+" 21:59:59").before(date)&&(sdf.parse(currentDate+" 22:30:00")).after(date)||(sdf.parse(currentDate+" 22:30:00")).equals(date)) {
return "1345";
}else if (sdf.parse(currentDate+" 22:30:00").before(date)&&(sdf.parse(currentDate+" 22:59:59")).after(date)||(sdf.parse(currentDate+" 22:59:59")).equals(date)) {
return "1415";
}else if (sdf.parse(currentDate+" 22:59:59").before(date)&&(sdf.parse(currentDate+" 23:30:00")).after(date)||(sdf.parse(currentDate+" 23:30:00")).equals(date)) {
return "1445";
}else if (sdf.parse(currentDate+" 23:30:00").before(date)&&(sdf.parse(currentDate+" 22:59:59")).after(date)||(sdf.parse(currentDate+" 23:59:59")).equals(date)) {
return "1515";
}else if (sdf.parse(currentDate+" 23:59:59").before(date)&&(sdf.parse(currentDate+" 23:59:59")).after(date)||(sdf.parse(currentDate+" 23:59:59")).equals(date)) {
return "1545";
}else if ((sdf.parse(currentDate+" 00:00:00").before(date)||sdf.parse(currentDate+" 00:00:00").equals(date))&&(sdf.parse(currentDate+" 03:59:59").after(date))||sdf.parse(currentDate+" 03:59:59").equals(date)) {
return "1545";
}
return null;
}
/**
* 根据时间和时间代码获取到新命名的卫星云图文件名
* @param date
* @param timeCode
* @return
* @throws Exception
*/
public static String getImageName(Date date,String timeCode) throws Exception {
String time = sdf1.format(date);
if ("1945".equals(timeCode)) {
return time+"-03-45-00.JPG";
}else if ("2015".equals(timeCode)) {
return time+"-04-15-00.JPG";
}else if ("2045".equals(timeCode)) {
return time+"-04-45-00.JPG";
}else if ("2115".equals(timeCode)) {
return time+"-05-15-00.JPG";
}else if ("2145".equals(timeCode)) {
return time+"-05-45-00.JPG";
}else if ("2215".equals(timeCode)) {
return time+"-06-15-00.JPG";
}else if ("2245".equals(timeCode)) {
return time+"-06-45-00.JPG";
}else if ("2315".equals(timeCode)) {
return time+"-07-15-00.JPG";
}else if ("2345".equals(timeCode)) {
return time+"-07-45-00.JPG";
}else if ("0015".equals(timeCode)) {
return time+"-08-15-00.JPG";
}else if ("0045".equals(timeCode)) {
return time+"-08-45-00.JPG";
}else if ("0115".equals(timeCode)) {
return time+"-09-15-00.JPG";
}else if ("0145".equals(timeCode)) {
return time+"-09-45-00.JPG";
}else if ("0215".equals(timeCode)) {
return time+"-10-15-00.JPG";
}else if ("0245".equals(timeCode)) {
return time+"-10-45-00.JPG";
}else if ("0315".equals(timeCode)) {
return time+"-11-15-00.JPG";
}else if ("0345".equals(timeCode)) {
return time+"-11-45-00.JPG";
}else if ("0415".equals(timeCode)) {
return time+"-12-15-00.JPG";
}else if ("0445".equals(timeCode)) {
return time+"-12-45-00.JPG";
}else if ("0515".equals(timeCode)) {
return time+"-13-15-00.JPG";
}else if ("0545".equals(timeCode)) {
return time+"-13-45-00.JPG";
}else if ("0615".equals(timeCode)) {
return time+"-14-15-00.JPG";
}else if ("0645".equals(timeCode)) {
return time+"-14-45-00.JPG";
}else if ("0715".equals(timeCode)) {
return time+"-15-15-00.JPG";
}else if ("0745".equals(timeCode)) {
return time+"-15-45-00.JPG";
}else if ("0815".equals(timeCode)) {
return time+"-16-15-00.JPG";
}else if ("0845".equals(timeCode)) {
return time+"-16-45-00.JPG";
}else if ("0915".equals(timeCode)) {
return time+"-17-15-00.JPG";
}else if ("0945".equals(timeCode)) {
return time+"-17-45-00.JPG";
}else if ("1015".equals(timeCode)) {
return time+"-18-15-00.JPG";
}else if ("1045".equals(timeCode)) {
return time+"-18-45-00.JPG";
}else if ("1115".equals(timeCode)) {
return time+"-19-15-00.JPG";
}else if ("1145".equals(timeCode)) {
return time+"-19-45-00.JPG";
}else if ("1215".equals(timeCode)) {
return time+"-20-15-00.JPG";
}else if ("1245".equals(timeCode)) {
return time+"-20-45-00.JPG";
}else if ("1315".equals(timeCode)) {
return time+"-21-15-00.JPG";
}else if ("1345".equals(timeCode)) {
return time+"-21-45-00.JPG";
}else if ("1415".equals(timeCode)) {
return time+"-22-15-00.JPG";
}else if ("1445".equals(timeCode)) {
return time+"-22-45-00.JPG";
}else if ("1515".equals(timeCode)) {
return time+"-23-15-00.JPG";
}else if ("1545".equals(timeCode)) {
return time+"-23-45-00.JPG";
}
return null;
}
/**
* 下载文件到本地
* @param urlString 被下载的文件地址
* @param filename 本地文件名
* @throws Exception 各种异常
*/
public static Map<String, Object> download(String urlString, String filename) throws Exception {
Map<String, Object> map = new HashMap<String, Object>();
String path = "";
Date time = sdf5.parse(filename);
String forecastTime = sdf.format(time);
String imagePath = "D:/Jointsky/JointFrame/satelliteCloudImage/";
String[] filenames = filename.split("\\.");
String[] strs = filenames[0].split("-");
for (int i = 0; i < strs.length; i++) {
imagePath = imagePath + strs[i]+"/";
}
path = imagePath;
imagePath = imagePath + filename;
// 构造URL
URL url = new URL(urlString);
// 打开连接
URLConnection con = url.openConnection();
// 输入流
InputStream is = con.getInputStream();
// 1K的数据缓冲
byte[] bs = new byte[1024];
// 读取到的数据长度
int len;
//判断如果文件夹存在则保存,不存在则创建
File file = new File(path);
if (!file.exists()) {
if (!file.isDirectory()) {
file.mkdirs();
}
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
// 输出的文件流
OutputStream os = new FileOutputStream(imagePath);
// 开始读取
while ((len = is.read(bs)) != -1) {
os.write(bs, 0, len);
}
// 完毕,关闭所有链接
os.close();
is.close();
//预测时间
if (!forecastTime.equals("")&&forecastTime!=null) {
map.put("forecastTime", forecastTime);
}
//图片名称
if (!filename.equals("")&&filename!=null) {
map.put("filename", filename);
}
//图片存放路径
if (!path.equals("")&&path!=null) {
if (!filename.equals("")&&filename!=null) {
map.put("imagePath", path+filename);
}
}
return map;
}
public static SimpleDateFormat getSdf1() {
return sdf1;
}
public static void setSdf1(SimpleDateFormat sdf1) {
GetSatelliteCloudImageTest.sdf1 = sdf1;
}
public static SimpleDateFormat getSdf2() {
return sdf2;
}
public static void setSdf2(SimpleDateFormat sdf2) {
GetSatelliteCloudImageTest.sdf2 = sdf2;
}
public static SimpleDateFormat getSdf() {
return sdf;
}
public static void setSdf(SimpleDateFormat sdf) {
GetSatelliteCloudImageTest.sdf = sdf;
}
public static SimpleDateFormat getSdf3() {
return sdf3;
}
public static void setSdf3(SimpleDateFormat sdf3) {
GetSatelliteCloudImageTest.sdf3 = sdf3;
}
}
View Code