用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("输出完成!");
   }
}
时间: 2024-11-05 05:19:51

用java解析在OpenStreetMap上下载的地图数据的相关文章

java web 从服务器上下载图片资料

package com.Action; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class HttpUtils {

java模拟从http上下载文件

1.依赖 Apache httpclient 包. 2.代码 HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://upload.eloancn.com/downLoadImg.action"); StringBody fileName = new StringBody(url);//图片路径 MultipartEntity reqEntity = new Mu

【Java】JavaWeb文件上传和下载

文件上传和下载在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件上传功能.common-fileupload组件是apache的一个开源项目之一,可以从http://jakarta.apache.org/commons/fileupload/下载.用该组件可实现一次上传一个或多个文件,并可限制文件大小. 开发环境 创建一个javaweb项目,加入common-f

Java中实现文件上传下载的三种解决方案

第一点:Java代码实现文件上传 FormFile file=manform.getFile(); String newfileName = null; String newpathname=null; String fileAddre="/numUp"; try { InputStream stream = file.getInputStream();// 把文件读入 String filePath = request.getRealPath(fileAddre);//取系统当前路径

NSURLSession(Get &amp; Post,JSON、XML数据解析,文件上传下载)

NSURLSession(Get & Post,JSON.XML数据解析,文件上传下载) 一.NSURLSession概述 NSURLSession是iOS7中新的网络接口,支持后台网络操作,除非用户强行关闭. NSURLSession使用步骤: 1. 新建NSURLSessionConfiguration,用于NSURLSession的配置 2. 新建NSURLSession 3. 新建NSURLSessionTask对象 4. 执行task 其中NSURLSessionConfigurati

java+web+大文件上传下载

文件上传是最古老的互联网操作之一,20多年来几乎没有怎么变化,还是操作麻烦.缺乏交互.用户体验差. 一.前端代码 英国程序员Remy Sharp总结了这些新的接口 ,本文在他的基础之上,讨论在前端采用HTML5的API,对文件上传进行渐进式增强:     * iframe上传  * ajax上传  * 进度条  * 文件预览  * 拖放上传 1.1 传统形式 文件上传的传统形式,是使用表单元素file,参考 http://www.ruanyifeng.com/blog/2012/08/file_

【原创】用JAVA实现大文件上传及显示进度信息

用JAVA实现大文件上传及显示进度信息 ---解析HTTP MultiPart协议 一. 大文件上传基础描述: 各种WEB框架中,对于浏览器上传文件的请求,都有自己的处理对象负责对Http MultiPart协议内容进行解析,并供开发人员调用请求的表单内容. 比如: Spring 框架中使用类似CommonsMultipartFile对象处理表二进制文件信息. 而.NET 中使用HtmlInputFile/ HttpPostedFile对象处理二进制文件信息. 优点:使用框架内置对象可以很方便的

Java解析XML之Dom4j

Java解析XML文件的方法有多种,个人感觉最常用的是使用Dom4j来解析XML文件.下面就简单介绍下Dom4j的基础使用. Dom4j需要jar包的支持,大家可以从网络上下载,如dom4j-1.6.1.jar: 下载好JAR包以后,只要导入我们的工程就可以使用了,Java WEB工程导入路径为:WebRoot/WEB-INF/lib目录下: 代码示例: 一.查看xml文档基础操作(以封装方法展示): public static void run() throws Exception { //获

集成websocket即时通讯 java聊天源码 代码下载 java后台框架源码 websocket源码

获取[下载地址]   QQ: 313596790   [免费支持更新]A 代码生成器(开发利器);全部是源码     增删改查的处理类,service层,mybatis的xml,SQL( mysql   和oracle)脚本,   jsp页面 都生成   就不用写搬砖的代码了,生成的放到项目里,可以直接运行B 阿里巴巴数据库连接池druid;  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都有明显的优势C 安全权限框架shiro ;  Shiro 是一个用