用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总结了这些新的接口 ,本文在他的基础之上,讨论在前端采用 ...
随机推荐
- bzoj 1232 [Usaco2008Nov]安慰奶牛cheer
思路:看出跟dfs的顺序有关就很好写了, 对于一棵树来说确定了起点那么访问点的顺序就是dfs序,每个点经过 其度数遍,每条边经过2边, 那么我们将边的权值×2加上两端点的权值跑最小生成树,最后加上一个 ...
- 黑马程序员_java基础笔记(12)...内省(IntroSpector)
—————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流!—————————— 1,了解JavaBean.2,BeanUtils工具包. 1,了解JavaBean. ...
- shell如何向python传递参数,shell如何接受python的返回值
1.shell如何向python传递参数 shell脚本 python $sendmailCommandPath $optDate python脚本 lastDateFormat = sys.argv ...
- xshell连接不上linux问题
1.首先确定linux系统有网络. 使用ipconfig查看是否有ip地址,没有的话需要先配置. 2.打开sshd服务:service sshd start 3.关闭防火墙服务:service ipt ...
- linux 下安装jdk环境安装
一.创建jdk安装目录mkdir /usr/local/java 二.将jdk解压到安装目录中,直接到java目录中,如果不是处理下不要有子目录 tar -zxvf jdk-8u91-linux-x6 ...
- 安装部署VMware vSphere 5.5文档 (6-4) 安装配置DB数据库
部署VMware vSphere 5.5 实施文档 ########################################################################## ...
- windows svn 客户端连不上linux svn server
采坑记录:linux服务器上svn://127.0.0.1可以正常使用,windows客户端远程连接不上,说明是端口号的问题. linux正常配置了iptables开启了3690端口,连接不上. 干脆 ...
- 安卓 开机 动画 酷派大神F1开机动画 美化 自定义 修改
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 酷派大神F1开机动画.rar
- 洛谷 P4884 多少个1?
题面在这里 好久没做题了2333,竟然还一次A了,神奇 大概就是等比数列然后把分母乘过去,然后直接BSGS就行了,就是要写快速乘恩... #include<bits/stdc++.h> # ...
- bzoj 3282
回顾一下LCT,容易写错的地方: 1.每次断掉Splay中的边,必须update一下父亲节点,再根据具体情况是否splay父亲节点. 2.养成没有用的值(比如当pre[u]不为0时的pnt[u])不去 ...