- import osm convert it to Drawing and use it as resolved path. - Not ready , first test over lab/valbonne_oct_2020.osm
110 lines
4.0 KiB
Java
110 lines
4.0 KiB
Java
package org.artisanlogiciel.osm;
|
|
|
|
import org.w3c.dom.Document;
|
|
import org.w3c.dom.Element;
|
|
import org.w3c.dom.NodeList;
|
|
|
|
import javax.xml.parsers.DocumentBuilder;
|
|
import javax.xml.parsers.DocumentBuilderFactory;
|
|
import java.io.FileInputStream;
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
|
|
public class OsmReader {
|
|
|
|
private String sample;
|
|
|
|
private HashMap<NodeRef,Node> refs;
|
|
private List<Way> ways;
|
|
|
|
public OsmReader(String sample) {
|
|
this.sample = sample;
|
|
refs = new HashMap<>();
|
|
ways = new ArrayList<>();
|
|
}
|
|
|
|
public List<Way> getWays() {
|
|
return ways;
|
|
}
|
|
|
|
public void read()
|
|
{
|
|
/* TODO get minlat and minlon **/
|
|
DocumentBuilderFactory factory =
|
|
DocumentBuilderFactory.newInstance();
|
|
try {
|
|
DocumentBuilder builder = factory.newDocumentBuilder();
|
|
Document doc = builder.parse(new FileInputStream(sample));
|
|
Element root = doc.getDocumentElement();
|
|
System.out.println(root);
|
|
NodeList nList = doc.getElementsByTagName("node");
|
|
for (int temp = 0; temp < nList.getLength(); temp++) {
|
|
org.w3c.dom.Node nNode = nList.item(temp);
|
|
if (nNode.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) {
|
|
Element e = (Element) nNode;
|
|
long id = Long.valueOf(e.getAttribute("id"));
|
|
double lat = Double.valueOf(e.getAttribute("lat"));
|
|
double lon = Double.valueOf(e.getAttribute("lon"));
|
|
Node node = new Node(new NodeRef(id), lat, lon);
|
|
refs.put(node.getRef(),node);
|
|
}
|
|
}
|
|
NodeList wList = doc.getElementsByTagName("way");
|
|
for (int temp = 0; temp < wList.getLength(); temp++) {
|
|
org.w3c.dom.Node wNode = wList.item(temp);
|
|
if (wNode.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) {
|
|
Element e = (Element) wNode;
|
|
try {
|
|
long id = Long.valueOf(e.getAttribute("id"));
|
|
List<NodeRef> nodeRefList = new ArrayList<>();
|
|
NodeList nrList = e.getElementsByTagName("nd");
|
|
for (int temp2 = 0; temp2 < nrList.getLength(); temp2++) {
|
|
org.w3c.dom.Node nrNode = nrList.item(temp2);
|
|
if (nrNode.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) {
|
|
Element nd = (Element) nrNode;
|
|
long ref = Long.valueOf(nd.getAttribute("ref"));
|
|
NodeRef nodeRef = new NodeRef(ref);
|
|
Node node = refs.get(nodeRef);
|
|
if ( node == null )
|
|
{
|
|
System.out.println("unknown node id " + nodeRef);
|
|
}
|
|
else {
|
|
nodeRefList.add(node.getRef());
|
|
}
|
|
}
|
|
}
|
|
Way way = new Way(id, nodeRefList);
|
|
ways.add(way);
|
|
}
|
|
catch (Exception bad)
|
|
{
|
|
System.err.println("Too bad way");
|
|
bad.printStackTrace(System.err);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch(Exception any)
|
|
{
|
|
System.err.println("Too bad");
|
|
any.printStackTrace(System.err);
|
|
}
|
|
}
|
|
|
|
public void dump()
|
|
{
|
|
System.out.println(refs);
|
|
System.out.println(ways);
|
|
}
|
|
public static void main(String pArgs[])
|
|
{
|
|
String sample = "/home/plhardy/valbonne3D/valbonne_oct_2020.osm";
|
|
|
|
OsmReader osmreader = new OsmReader(sample);
|
|
osmreader.read();
|
|
osmreader.dump();
|
|
}
|
|
}
|