Package navi.osm

Source Code of navi.osm.OSMHandler

package navi.osm;

import java.awt.geom.Point2D;
import java.util.ArrayList;

import navi.Kanten;
import navi.Knoten;
import navi.osm.Coordinates.UTMPoint;
import navi.osm.Coordinates.WGS84Point;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class OSMHandler extends DefaultHandler {

    long zstVorher;
    long zstNachher;

    private Knoten nd_obj;
    private Kanten way_obj;
    private boolean bNode = false;
    private boolean bWays = false;
    private UTMPoint Bounds;
    private ArrayList<Knoten> refList;
    /* KNOTEN & KANTEN* */
    private ArrayList<Kanten> edges = new ArrayList<Kanten>();
    private ArrayList<Knoten> vertices = new ArrayList<Knoten>();

    public ArrayList<Kanten> getWayList() {
        return edges;
    }

    public ArrayList<Knoten> getNodeList() {
        return vertices;
    }

    @Override
    public void startDocument() throws SAXException {
        zstVorher = System.currentTimeMillis();
    }

    @Override
    public void endDocument() throws SAXException {
        System.out.println("Die Datei wurde in: " + ((System.currentTimeMillis() - zstVorher) / 1000) + "  Sekunden geparst");
    }

    @Override
    public void startElement(String namespaceURI, String localname, String tagname, Attributes attributes) throws SAXException {

        if (Bounds == null)
            Bounds = new UTMPoint(0, 0, 0);

        if (tagname.equals("node")) {

            bNode = true;

            int id = Integer.parseInt(attributes.getValue("id"));
            UTMPoint GPSPoint = convert(Double.parseDouble(attributes.getValue("lat")), Double.parseDouble(attributes.getValue("lon")));
            nd_obj = new Knoten(id, new Point2D.Double(GPSPoint.getX() - Bounds.getX(), -1 * (GPSPoint.getY() - Bounds.getY())));
            vertices.add(nd_obj);

        } else if (tagname.equals("tag")) {

            if (bNode) {
                String key = attributes.getValue(0);
                String value = attributes.getValue(1);

                if (key.equals("addr:street")) {
                    vertices.get(vertices.size() - 1).setType("address");
                }

                vertices.get(vertices.size() - 1).addTags(key, value);

            } else if (bWays) {
                String key = attributes.getValue(0);
                String value = attributes.getValue(1);

                edges.get(edges.size() - 1).addTags(key, value);
            }
        }

        else if (tagname.equals("way")) {

            bWays = true;
            refList = new ArrayList<Knoten>();
            way_obj = new Kanten(refList);
            edges.add(way_obj);

        }

        else if (tagname.equals("nd")) {

            int ref = Integer.parseInt(attributes.getValue(0));

            for (int i = 0; i < vertices.size(); i++) {
                if (vertices.get(i).getId() == ref) {
                    edges.get(edges.size() - 1).addNd(vertices.get(i));
                    break;
                }
            }

        } else if (tagname.equals("bounds")) {
            Bounds = convert(Double.parseDouble(attributes.getValue("minlat")), Double.parseDouble(attributes.getValue("minlon")));
        }
    }

    private UTMPoint convert(double latitude, double longitude) {
        WGS84Point wgs = new WGS84Point();
        wgs.SetDegrees(latitude, longitude);
        UTMPoint GPSPoint = new UTMPoint();
        Coordinates.convertWGS84toUTM(wgs, GPSPoint);

        return GPSPoint;
    }

    @Override
    public void endElement(String namespaceURI, String localname, String tagname) {
        if (tagname.equals("node")) {
            bNode = false;
        }

        if (tagname.equals("way")) {
            bWays = false;
        }
    }
}
TOP

Related Classes of navi.osm.OSMHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.