用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总结了这些新的接口 ,本文在他的基础之上,讨论在前端采用 ...
随机推荐
- Bechmarksql
使用方法 1.配置JDK环境 JDK最好是1.5以上的版本 JAVA_HOME=/usr/java/jdk1.6.0_22 PATH=$PATH:$JAVA_HOME/bin 2.准备工作 把要测试的 ...
- mysql (主从复制)(proxy , Amoeba)
原址如下: http://heylinux.com/archives/1004.html Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过.但在实际的生产环境中 ...
- C#语言-NPOI.dll导入Excel功能的实现
前言:刚工作那会,公司有一套完善的MVC框架体系,每当有导入EXCEL功能要实现的时候,都会借用框架里自带的导入方法,一般三下五除二就完成了,快是快,可总是稀里糊涂的,心里很没有底.前几天,在另一个原 ...
- Spring boot之SpringApplicationBuilder,@@Configuration注解,@Component注解
SpringApplicationBuilder: 该方法的作用是可以把项目打包成war包 需要配置启动类,pom.xml文件等,具体见:http://blog.csdn.net/linzhiqian ...
- Jvm内存区域和GC
运行时数据区域 线程私有 程序计数器 正在执行的字节码指令的地址(native方法时为undefined) Java虚拟机栈 存储栈帧(局部变量表,操作数栈,动态链接,方法出口)OOM,StackOv ...
- JAVAEE——SSH项目实战06:统计信息管理、Spring注解开发和EasyUI
作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7190925.html 一.统计信息管理 二.Spring注解开发 1.service ...
- [leetcode tree]95. Unique Binary Search Trees II
Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1 ...
- 1022 Digital Library (30)(30 point(s))
problem A Digital Library contains millions of books, stored according to their titles, authors, key ...
- hdu1312 Red and Black
I - Red and Black Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- BZOJ 4520 [Cqoi2016]K远点对(KD树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4520 [题目大意] 求K远点对距离 [题解] 修改估价函数为欧式上界估价,对每个点进行 ...