用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总结了这些新的接口 ,本文在他的基础之上,讨论在前端采用 ...
随机推荐
- 极简操作无需root隐藏S8导航栏和状态栏
距离三星Galaxy S8国行发布快一个礼拜了,相信论坛不少小同伴已经拿到手,许多人和我一样被那块全视曲面屏给诱惑剁手的,当拿到手把玩一段时间后却發现这么美的一块屏幕居然大部分应用上下都有一行碍眼的状 ...
- Django 学习总结(更新中)
1.常用命令 新建一个项目:django-admin.py startproject project-name 新建一个app:python manage.py startapp app-name 同 ...
- HDU 6103 Kirinriki (思维 双指针)
Kirinriki Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- 维护直线的线段树:Bzoj1568,Bzoj3938(Uoj88)
有这样一类线段树,可以维护一些直线方程并对每个点求出最大值. 首先先看BZOJ1568,输入给你条直线的方程,你需要对于指定的位置求出最大的函数值. 看到数据范围nlog^2n可做,考虑用线段树去维护 ...
- 【20181031T1】一串数字【分解质因数+贪心】
题面 [错解] 立方就是所有质因子次数都是3的倍数嘛 发现1e5的三次根很小,可以枚举所有和这个数乘起来是完全立方数的(flag*1) 然后--连条边跑最大独立集? 不对啊是NP问题(实际上是个二分图 ...
- bzoj 4242 水壶 (多源最短路+最小生成树+启发式合并)
4242: 水壶 Time Limit: 50 Sec Memory Limit: 512 MBSubmit: 1028 Solved: 261[Submit][Status][Discuss] ...
- Linux重新学习
一.由来 unix到minix到linux 1991正式发行 1.内核版本:linux核心版本 linux内核官网www.kernel.org 2.发行版本:比如redhat.centOS.suse. ...
- UVALive 6257 Chemist's vows
#include<iostream> #include<string.h> #include<stdio.h> #include<ctype.h> #i ...
- codevs 1001 舒适的线路 kruskal/gcd
舒适的线路 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.codevs.cn/problem/1001/ Description Z小 ...
- 离线下载Xcode的文档
https://developer.apple.com/library/downloads/docset-index.dvtdownloadableindex 找到里面的文档下载地址 例如iOS 8. ...