用java解析在OpenStreetMap上下载的地图数据
采用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上下载的地图数据的更多相关文章
- 用java解析在OpenStreetMap上下载的地图数据(SAX版,适合比较大的xml文件)
java程序如下: package gao.map.preprocess; import java.io.BufferedWriter; import java.io.File; import jav ...
- java模拟从http上下载文件
1.依赖 Apache httpclient 包. 2.代码 HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = ...
- 【Java】JavaWeb文件上传和下载
文件上传和下载在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件 ...
- 【Java】从Null开始,在Windows上下载和安装JDK
下载部分: 方式一: 从官方网站上下载:https://www.oracle.com/java/technologies/javase-downloads.html Oracle已经更新了软件政策,要 ...
- JAVA中使用FTPClient上传下载
Java中使用FTPClient上传下载 在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在c ...
- Java中实现文件上传下载的三种解决方案
第一点:Java代码实现文件上传 FormFile file=manform.getFile(); String newfileName = null; String newpathname=null ...
- java实现多线程断点续传,上传下载
采用apache 的 commons-net-ftp-ftpclient import java.io.File; import java.io.FileOutputStream; import ja ...
- java客户端文件的上传和下载
java客户端文件的上传和下载 //上传 public JTable upload(String id){ JTable table=new JTable(); System.out.println( ...
- java+web+大文件上传下载
文件上传是最古老的互联网操作之一,20多年来几乎没有怎么变化,还是操作麻烦.缺乏交互.用户体验差. 一.前端代码 英国程序员Remy Sharp总结了这些新的接口 ,本文在他的基础之上,讨论在前端采用 ...
随机推荐
- Django实战(6):对比RoR和Django的模板系统
scaffold的生成物虽然用处不大,但是给我们带来一些最佳实践.其中就有模板的继承和分区. 如果你深入使用过rails的模板体系,那么恭喜你:你有超强的忍耐力!而且更重要的是,你只需要3分钟就可以理 ...
- TypeScript的数据类型总结
全局下载:npm i typescript -g 编译.ts文件:tsc 1.ts自动生成对应js文件 基本类型: 1.布尔,数字,字符串 ts文件 //布尔类型 var a:boolean=tru ...
- Spring boot之SpringApplicationBuilder,@@Configuration注解,@Component注解
SpringApplicationBuilder: 该方法的作用是可以把项目打包成war包 需要配置启动类,pom.xml文件等,具体见:http://blog.csdn.net/linzhiqian ...
- 一次ygc越来越慢的问题排查过程
问题发现场景 某天突然收到线上应用的gc时间过长的告警,刚开始只有一台机器偶尔报一下,后续其他机器也纷纷告警,具体告警的阈值是应用10分钟内ygc的总时长达到了6.6s. 初步排除过程 按照gc问题常 ...
- 【SQL】177. Nth Highest Salary
Write a SQL query to get the nth highest salary from the Employee table. +----+--------+ | Id | Sala ...
- Qt中文本编辑器实现语法高亮功能(Qscitinlla)
Scintilla是一个免费.跨平台.支持语法高亮的编辑控件.它完整支持源代码的编辑和调试,包括语法高亮.错误指示.代码完成(code completion)和调用提示(call tips).能包含标 ...
- android studio 汉化 个性化 美化 快速操作项目 目录
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 汉化包 百度云盘 下载地址:https://pan.baidu.com/s/1pLjwy ...
- BZOJ 4213 贪吃蛇 上下界费用流 网络流
https://darkbzoj.cf/problem/4213 https://www.cnblogs.com/DaD3zZ-Beyonder/p/5733326.html 题目描述 dbzoj又崩 ...
- VC/MFC分割字符串(SplitString)返回CStringArray
引自:http://bbs.csdn.net/topics/60321228 原版: CStringArray* SplitString(CString string, char pattern) { ...
- Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) C. Bear and Colors 暴力
C. Bear and Colors 题目连接: http://www.codeforces.com/contest/673/problem/C Description Bear Limak has ...