xmltoDBsax方法

package com.sc;


import java.util.ArrayList;
import java.util.List;


public class Article {
private List<String> authors;
private String title;
private String pages;
private Integer year;
private Integer volume;
private String journal;
private String number;
private String ee;
private String url;

public Article() {
authors = new ArrayList<>();
}


public Article(List<String> authors, String title, String pages, Integer year, Integer volume, String journal,
String number, String ee, String url) {
this.authors = authors;
this.title = title;
this.pages = pages;
this.year = year;
this.volume = volume;
this.journal = journal;
this.number = number;
this.ee = ee;
this.url = url;
}


public List<String> getAuthors() {
return authors;
}


public void setAuthors(List<String> authors) {
this.authors = authors;
}

public String getTitle() {
return title;
}


public void setTitle(String title) {
this.title = title;
}


public String getPages() {
return pages;
}


public void setPages(String pages) {
this.pages = pages;
}


public Integer getYear() {
return year;
}


public void setYear(Integer year) {
this.year = year;
}


public Integer getVolume() {
return volume;
}


public void setVolume(Integer volume) {
this.volume = volume;
}


public String getJournal() {
return journal;
}


public void setJournal(String journal) {
this.journal = journal;
}


public String getNumber() {
return number;
}


public void setNumber(String number) {
this.number = number;
}


public String getEe() {
return ee;
}


public void setEe(String ee) {
this.ee = ee;
}


public String getUrl() {
return url;
}


public void setUrl(String url) {
this.url = url;
}

}

 

 

package com.sc;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;


/**
 * 数据库辅助工具类
 * @author Administrator
 *
 */
public class DbHelper {
private static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static final String URL = "jdbc:sqlserver://127.0.0.1:1433;Database=information";
private static final String USER = "sc";
private static final String PASSWORD = "sc";

private static DbHelper dbHelper = null; 

private Connection connection = null;

static {
try {
Class.forName(DRIVER);
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 获取DbHelper实例
* @return
* @throws Exception
*/
public static DbHelper getDbHelper() throws Exception {
if (dbHelper == null) {
dbHelper = new DbHelper();
}
return dbHelper;
}

/**
* 私有构造方法
* @throws Exception
*/
private DbHelper() throws Exception {
connection = DriverManager.getConnection(URL, USER, PASSWORD);
}

/**
* 执行查询
* @param sql
* @return
* @throws Exception
*/
public ResultSet executeQuery(String sql) throws Exception {
Statement stmt = connection.createStatement();
return stmt.executeQuery(sql);
}

/**
* 执行更新
* @param sql
* @return
* @throws Exception
*/
public int executeUpdate(String sql) throws Exception {
Statement stmt = connection.createStatement();
return stmt.executeUpdate(sql);
}

/**
* 执行条件查询
* @param sql
* @param objects 参数
* @return
* @throws Exception
*/
public ResultSet executeQuery(String sql, Object...objects) throws Exception {
PreparedStatement stmt = connection.prepareStatement(sql);
if (objects != null) {
for (int i = 0; i < objects.length; i++) {
Object param = objects[i];
stmt.setObject(i+1, param);
}
}
ResultSet result = stmt.executeQuery();
return result;
}

/**
* 根据参数执行跟新操作
* @param sql SQL语句
* @param objects 参数值
* @return
* @throws Exception
*/
public int executeUpdate(String sql, Object...objects) throws Exception {
PreparedStatement stmt = connection.prepareStatement(sql);
if (objects != null) {
for (int i = 0; i < objects.length; i++) {
Object param = objects[i];
stmt.setObject(i+1, param);
}
}
int result = stmt.executeUpdate();
return result;
}

/**
* 关闭操作
*/
public void close() {
try {
if (connection != null && !connection.isClosed()) {
connection.close();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
connection = null;
dbHelper = null;
}
}
}

 

 

package com.sc;


import java.util.ArrayList;
import java.util.List;


import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;


public class MyHandler extends DefaultHandler {
private List<Article> articles = new ArrayList<>();
private Article article = null;
private int propertyOrder = 0;
List<String> author = null;

@Override
public void startDocument() throws SAXException {
System.out.println("文档开始");
}

@Override
public void endDocument() throws SAXException {
System.out.println("文档结束");
}

@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if (qName.equals("article")) { 
article = new Article();
return;
}
switch (qName) {
case "author":
propertyOrder = 1;
break;
case "title":
propertyOrder = 2;
break;
case "pages":
propertyOrder = 3;
break;
case "year":
propertyOrder = 4;
break;
case "volume":
propertyOrder = 5;
break;
case "journal":
propertyOrder = 6;
break;
case "number":
propertyOrder = 7;
break;
case "ee":
propertyOrder = 8;
break;
case "url":
propertyOrder = 9;
break;
}
}

@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if (qName.equals("article")) {
articles.add(article);
article = null;
}
}

@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String content = new String(ch, start, length);
switch (propertyOrder) {
case 1:
if (author == null) {
author = new ArrayList<>();
}
author.add(content);
break;
case 2:
if (author == null) {
author = new ArrayList<>();
author.add(0, "");
}
article.setAuthors(author);
//System.out.println(author == null);
article.setTitle(content);
author = null;
break;
case 3:
article.setPages(content);
break;
case 4:
article.setYear(Integer.parseInt(content));
break;
case 5:
article.setVolume(Integer.parseInt(content));
break;
case 6:
article.setJournal(content);
break;
case 7:
article.setNumber(content);
break;
case 8:
article.setEe(content);
break;
case 9:
article.setUrl(content);
break;
}
}

List<Article> getArticles() {
return articles;
}

}

 

 

 

package com.sc;


import java.io.IOException;
import java.util.List;


import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;


import org.xml.sax.SAXException;



public class SAXParserDemo {


public static void main(String[] args) {
SAXParserFactory factory = SAXParserFactory.newInstance();
try {
SAXParser parser = factory.newSAXParser();
MyHandler handler = new MyHandler(); // 使用自定义Handler
parser.parse("dblp/dblp.xml", handler);
System.out.println("Done.");

List<Article> articles = handler.getArticles();
DbHelper dbHelper = DbHelper.getDbHelper();
int len = articles.size();
for (int i = 0;i < len;++i) {
Article article = articles.get(i);
StringBuffer authorsName = new StringBuffer();

for (int j = 0;j < article.getAuthors().size();++j) {
if (j > 0) {
authorsName.append(",");
}
authorsName.append(article.getAuthors().get(j));
}

String authorName = authorsName.toString();

dbHelper.executeUpdate("insert into data(authors, title, pages, year, volume, journal, number, ee, url) values(?, ?, ?, ?, ?, ?, ?, ?, ?)", 
authorName, article.getTitle(), article.getPages(), article.getYear(), article.getVolume(), article.getJournal(), article.getNumber(), article.getEe(), article.getUrl());
}
dbHelper.close();

} catch (ParserConfigurationException | SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}


}

本研究利用Sen+MK方法分析了特定区域内的ET(蒸散发)趋势,重点评估了使用遥感数据的ET空间变化。该方法结合了Sen斜率估算器和Mann-Kendall(MK)检验,为评估长期趋势提供了稳健的框架,同时考虑了时间变化和统计显著性。 主要过程与结果: 1.ET趋势可视化:研究利用ET数据,通过ET-MK和ET趋势图展示了蒸散发在不同区域的空间和时间变化。这些图通过颜色渐变表示不同的ET水平及其趋势。 2.Mann-Kendall检验:应用MK检验来评估ET趋势的统计显著性。检验结果以二元分类图呈现,标明ET变化的显著性,帮助识别出有显著变化的区域。 3.重分类结果:通过重分类处理,将区域根据ET变化的显著性进行分类,从而聚焦于具有显著变化的区域。这一过程确保分析集中在具有实际意义的发现上。 4.最终输出:最终结果以栅格图和png图的形式呈现,支持各种应用,包括政策规划、水资源管理和土地利用变化分析,这些都是基于详细的时空分析。 ------------------------------------------------------------------- 文件夹构造: data文件夹:原始数据,支持分析的基础数据(MOD16A2H ET数据 宁夏部分)。 results文件夹:分析结果与可视化,展示研究成果。 Sen+MK_optimized.py:主分析脚本,适合批量数据处理和自动化分析。 Sen+MK.ipynb:Jupyter Notebook,复现可视化地图。
【云南省DEM(30米分辨率)】是一款地理信息数据产品,主要涵盖了云南省的地形高程信息。这款数据基于2019年8月5日发布的ASTER GDEM V3(Advanced Spaceborne Thermal Emission and Reflection Radiometer Global Digital Elevation Model Version 3)版本,是一个全球数字高程模型,提供的是30米的高分辨率。ASTER GDEM V3是通过日本航空航天探索局(JAXA)和美国国家航空航天局(NASA)合作的ASTER卫星获取的数据,它提供了全球范围内的高精度地表地形信息。 1. ASTER GDEM V3:ASTER GDEM V3是目前广泛使用的公开全球高程数据之一,其数据源自ASTER卫星的多光谱遥感图像。该数据集通过分析不同波段的反射和热发射来构建地表的三维模型,从而得出高程信息。V3版本是对之前版本的更新和改进,具有更高的数据质量和更少的错误。 2. GeoTIFF格式:这份数据采用GeoTIFF(Georeferenced Tagged Image File Format)格式,这是一种特殊的TIFF图像文件,包含了地理坐标系统信息。这意味着每张图像的每个像素都与地球表面的特定位置对应,方便在GIS软件中进行空间分析和地图制作。 3. WGS84坐标系:WGS84(World Geodetic System 1984)是全球最常用的地心地固坐标系统,广泛应用于GPS定位和其他全球导航系统。在云南省DEM数据中,使用WGS84坐标系可以确保与其他全球地理数据的一致性和兼容性。 4. DEM(Digital Elevation Model):DEM是一种表示地面高程信息的数字模型,由等间距的高程点构成,用于描述地表地形特征。它在地理信息系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值