zoukankan      html  css  js  c++  java
  • 用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()+"
    ");
                    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()+"      "+"
    ");
                            else if(attribute.getName().equals("k"))
                                sb.append(s + "         "+attribute.getValue()+"
    ");
                        }
                    }
                    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("输出完成!");
       }
    }
  • 相关阅读:
    Linux I/O调度
    集群心跳机制
    如何修改集群的公网信息(包括 VIP) (文档 ID 1674442.1)
    AVL树(平衡二叉树)
    二叉搜索树
    二叉树及树的遍历
    python实现基数排序
    python之迷宫BFS
    python之迷宫DFS
    python实现队列
  • 原文地址:https://www.cnblogs.com/gaopeng527/p/5127693.html
Copyright © 2011-2022 走看看