博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用java解析在OpenStreetMap上下载的地图数据
阅读量:7104 次
发布时间:2019-06-28

本文共 4671 字,大约阅读时间需要 15 分钟。

采用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
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
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
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
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
list = e.attributes(); //遍历属性节点 for(Attribute attribute : list){ if(attribute.getName().equals("id")) s += attribute.getValue()+" "; if(attribute.getName().equals("version")) s += attribute.getValue()+" "; } //遍历子节点 Iterator
iter = e.elementIterator(); while(iter.hasNext()){ Element element = iter.next(); //首先获取当前节点的所有属性节点 List
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("输出完成!"); }}

 

转载地址:http://dwchl.baihongyu.com/

你可能感兴趣的文章
飞康软件定义平台为Oracle提供全面保护与恢复
查看>>
Java常用算法1——冒泡排序
查看>>
如何在数据中心行业玩转互联网思维?
查看>>
9月6日云栖精选夜读:DMS前后端技术揭秘及最佳实践
查看>>
Oracle Resource Manager和调度任务
查看>>
OpenStack建设企业私有云要解决五大问题
查看>>
美国抢跑5G高频段规划,我国如何应对挑战?
查看>>
路由器桥接怎么设置 其实很简单
查看>>
新型变种病毒,专门攻击安卓机银行App
查看>>
机器学习零基础?手把手教你用TensorFlow搭建图像识别系统(三)| 干货
查看>>
就是这么火!各方大佬谈超融合
查看>>
算算2015年爆出的漏洞总共值多少钱?
查看>>
超融合是快节奏业务环境的必然选择?
查看>>
10个对开发者非常有用的设计原则
查看>>
我的软件测试之旅:(4)并行——自动化回归测试
查看>>
存储过程中用到的年,月,周的函数
查看>>
《设计模式解析(第2版•修订版)》—第1章复习题
查看>>
《iOS 6核心开发手册(第4版)》——1.14节秘诀:实时触摸反馈
查看>>
《Netty 权威指南》—— 传统的BIO编程
查看>>
《测试驱动数据库开发》——1.3 什么是障碍
查看>>