采用dom4j解析下载的xml文件,java程序如下:

package gao.map.preprocess;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader; /**
* 处理从OpenStreetMap下载的原始数据,将抽取的数据输出为txt文件
* @author Administrator
*
*/
public class OpenStreetMap {
//遍历当前节点下的所有节点
@SuppressWarnings("unchecked")
public static void listNodes(Element node){
System.out.println("当前节点的名称:" + node.getName());
//首先获取当前节点的所有属性节点
List<Attribute> list = node.attributes();
//遍历属性节点
for(Attribute attribute : list){
System.out.println("属性"+attribute.getName() +":" + attribute.getValue());
}
//如果当前节点内容不为空,则输出
if(!(node.getTextTrim().equals(""))){
System.out.println( node.getName() + ":" + node.getText());
}
//同时迭代当前节点下面的所有子节点
//使用递归
Iterator<Element> iterator = node.elementIterator();
while(iterator.hasNext()){
Element e = iterator.next();
listNodes(e);
}
} @SuppressWarnings("unchecked")
public static void main(String[] args) throws IOException,
DocumentException {
// 点信息
File pointFile = new File("D:\\BaiduYunDownload\\纽约出租数据\\15年1-6黄车-绿车数据\\yellow_tripdata_2015-06.csv\\Point.txt");
// 弧信息
File arcFile = new File("D:\\BaiduYunDownload\\纽约出租数据\\15年1-6黄车-绿车数据\\yellow_tripdata_2015-06.csv\\Arc.txt");
FileOutputStream fosPoint = new FileOutputStream(pointFile);
FileOutputStream fosArc = new FileOutputStream(arcFile);
OutputStreamWriter oswPoint = new OutputStreamWriter(fosPoint);
OutputStreamWriter oswArc = new OutputStreamWriter(fosArc);
BufferedWriter bwPoint = new BufferedWriter(oswPoint);
BufferedWriter bwArc = new BufferedWriter(oswArc);
SAXReader reader = new SAXReader(); // 要读取的原始地图数据
String path = "D:\\BaiduYunDownload\\纽约出租数据\\15年1-6黄车-绿车数据\\yellow_tripdata_2015-06.csv\\map";
Document document = reader.read(new File(path)); // 获取根节点元素对象 osm
Element root = document.getRootElement();
// 遍历osm下的所有子节点
Iterator<Element> iterator = root.elementIterator();
while(iterator.hasNext()){
Element e = iterator.next();
// if(e.getName().equals("node")||e.getName().equals("way"))
// listNodes(e);
//输出点信息
if(e.getName().equals("node")){
StringBuilder sb = new StringBuilder();
//首先获取当前节点的所有属性节点
List<Attribute> list = e.attributes();
//遍历属性节点
for(Attribute attribute : list){
if(attribute.getName().equals("id"))
sb.append(attribute.getValue()+" ");
if(attribute.getName().equals("lat"))
sb.append(attribute.getValue()+" ");
if(attribute.getName().equals("lon"))
sb.append(attribute.getValue());
}
bwPoint.write(sb.toString()+"\r\n");
bwPoint.flush();
System.out.println(sb.toString());
}else if(e.getName().equals("way")){ //输出弧信息
StringBuilder sb = new StringBuilder();
String s = "";
//首先获取当前节点的所有属性节点
List<Attribute> list = e.attributes();
//遍历属性节点
for(Attribute attribute : list){
if(attribute.getName().equals("id"))
s += attribute.getValue()+" ";
if(attribute.getName().equals("version"))
s += attribute.getValue()+" ";
}
//遍历子节点
Iterator<Element> iter = e.elementIterator();
while(iter.hasNext()){
Element element = iter.next();
//首先获取当前节点的所有属性节点
List<Attribute> list1 = element.attributes();
//遍历属性节点
for(Attribute attribute : list1){
if(attribute.getName().equals("ref"))
sb.append(s + attribute.getValue()+" "+"\r\n");
else if(attribute.getName().equals("k"))
sb.append(s + " "+attribute.getValue()+"\r\n");
}
}
bwArc.write(sb.toString());
bwArc.flush();
System.out.print(sb.toString());
}
}
bwPoint.close();
oswPoint.close();
fosPoint.close();
bwArc.close();
oswArc.close();
fosArc.close();
System.out.println("输出完成!");
}
}

用java解析在OpenStreetMap上下载的地图数据的更多相关文章

  1. 用java解析在OpenStreetMap上下载的地图数据(SAX版,适合比较大的xml文件)

    java程序如下: package gao.map.preprocess; import java.io.BufferedWriter; import java.io.File; import jav ...

  2. java模拟从http上下载文件

    1.依赖 Apache httpclient 包. 2.代码 HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = ...

  3. 【Java】JavaWeb文件上传和下载

    文件上传和下载在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件 ...

  4. 【Java】从Null开始,在Windows上下载和安装JDK

    下载部分: 方式一: 从官方网站上下载:https://www.oracle.com/java/technologies/javase-downloads.html Oracle已经更新了软件政策,要 ...

  5. JAVA中使用FTPClient上传下载

    Java中使用FTPClient上传下载 在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在c ...

  6. Java中实现文件上传下载的三种解决方案

    第一点:Java代码实现文件上传 FormFile file=manform.getFile(); String newfileName = null; String newpathname=null ...

  7. java实现多线程断点续传,上传下载

    采用apache 的 commons-net-ftp-ftpclient import java.io.File; import java.io.FileOutputStream; import ja ...

  8. java客户端文件的上传和下载

    java客户端文件的上传和下载 //上传 public JTable upload(String id){ JTable table=new JTable(); System.out.println( ...

  9. java+web+大文件上传下载

    文件上传是最古老的互联网操作之一,20多年来几乎没有怎么变化,还是操作麻烦.缺乏交互.用户体验差. 一.前端代码 英国程序员Remy Sharp总结了这些新的接口 ,本文在他的基础之上,讨论在前端采用 ...

随机推荐

  1. Python 学习之list和Tuple类型

    1.创建list L = ['Adam', 95.5, 'Lisa', 85, 'Bart', 59] print(L) print(L[1],L[3],L[5])#索引 不能越界 正向访问 #95. ...

  2. thinkphp3.2局部不缓存的静态缓存

    在thinkphp中,对于访问量大的网站可以用静态缓存来越过数据库瓶颈来提高访问速度,但有时候并不是整个页面都要缓存的,如登录的用户名部分,那么如何实现局部不缓存呢? 其实有多种方法,但对于Think ...

  3. SQL注入备忘录

    备忘录(一) 拿起小本本记下常考知识点. 常用连接词 and && %23%23 且 or || %7c%7c 或 xor 非 Access 数据库: 只能爆破表名.列名获取数据.无法 ...

  4. c语言程序与设计第三版-苏小红--第一轮学习笔记、难点整理

    ---恢复内容开始--- 1> 编程:需求分析.设计.编写程序(编码.编辑.链接.运行).调试程序 2> 指数形式:e的左边是数值部分(有效数字),不能省略,但可以表示成 .e-4:等等: ...

  5. 配置k8s dns

    DNS (domain name system),提供域名解析服务,解决了难于记忆的IP地址问题,以更人性可读可记忆可标识的方式映射对应IP地址. Cluster DNS扩展插件用于支持k8s集群系统 ...

  6. 关于Python Profilers性能分析器

    1. 介绍性能分析器 作者:btchenguang profiler是一个程序,用来描述运行时的程序性能,并且从不同方面提供统计数据加以表述.Python中含有3个模块提供这样的功能,分别是cProf ...

  7. Qt Quick快速入门之信号、槽

    信号和槽主要用于组件之间的通信,类似于.net和java中的委托. 使用QObject::connect方法将信号与槽关联起来,然后信号的发起者发出信号,接受者中的槽函数就会执行. 比如connect ...

  8. POJ1222 EXTENDED LIGHTS OUT 高斯消元 XOR方程组

    http://poj.org/problem?id=1222 在学校oj用搜索写了一次,这次写高斯消元,haoi现场裸xor方程消元没写出来,真实zz. #include<iostream> ...

  9. 【数论】Codeforces Round #483 (Div. 2) [Thanks, Botan Investments and Victor Shaburov!] C. Finite or not?

    题意:给你一个分数,问你在b进制下能否化成有限小数. 条件:p/q假如已是既约分数,那么如果q的质因数分解集合是b的子集,就可以化成有限小数,否则不能. 参见代码:反复从q中除去b和q的公因子部分,并 ...

  10. Express中间件

    一.编写中间件 中间件函数能够访问请求对象(req),响应对象(res),应用程序的请求/响应循环中的下一个中间件函数.下一个中间件函数通常由名为next的变量来表示. 中间件函数可以执行以下任务: ...