read osm format longitude and latitude bounds, separate ways and buildings
- read longitude and lattude boundaries - separate ways ( open ways ) from buildings ( closed ) - save as .imc and .drawing ( raw format ) [ since .imc seems buggy ) - read uncompressed drawing format
This commit is contained in:
@@ -18,10 +18,38 @@ public class OsmReader {
|
||||
private HashMap<NodeRef,Node> refs;
|
||||
private List<Way> ways;
|
||||
|
||||
public List<Way> getBuildings() {
|
||||
return buildings;
|
||||
}
|
||||
|
||||
private List<Way> buildings;
|
||||
|
||||
public double getMinlat() {
|
||||
return minlat;
|
||||
}
|
||||
|
||||
public double getMinlon() {
|
||||
return minlon;
|
||||
}
|
||||
|
||||
public double getMaxlat() {
|
||||
return maxlat;
|
||||
}
|
||||
|
||||
public double getMaxlon() {
|
||||
return maxlon;
|
||||
}
|
||||
|
||||
double minlat = 0;
|
||||
double minlon = 0;
|
||||
double maxlat = 180;
|
||||
double maxlon = 180;
|
||||
|
||||
public OsmReader(String sample) {
|
||||
this.sample = sample;
|
||||
refs = new HashMap<>();
|
||||
ways = new ArrayList<>();
|
||||
buildings = new ArrayList<>();
|
||||
}
|
||||
|
||||
public List<Way> getWays() {
|
||||
@@ -38,6 +66,25 @@ public class OsmReader {
|
||||
Document doc = builder.parse(new FileInputStream(sample));
|
||||
Element root = doc.getDocumentElement();
|
||||
System.out.println(root);
|
||||
// <bounds minlat="43.6399000" minlon="7.0058300" maxlat="43.6435000" maxlon="7.0111700"/>
|
||||
NodeList boundList = doc.getElementsByTagName("bounds");
|
||||
for (int temp = 0; temp < boundList.getLength(); temp++) {
|
||||
org.w3c.dom.Node nNode = boundList.item(temp);
|
||||
if (nNode.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) {
|
||||
Element e = (Element) nNode;
|
||||
minlat = Double.valueOf(e.getAttribute("minlat"));
|
||||
minlon = Double.valueOf(e.getAttribute("minlon"));
|
||||
maxlat = Double.valueOf(e.getAttribute("maxlat"));
|
||||
maxlon = Double.valueOf(e.getAttribute("maxlon"));
|
||||
}
|
||||
}
|
||||
|
||||
int boundserror = 0;
|
||||
System.out.println("minlat " + minlat);
|
||||
System.out.println("maxlat " + maxlat);
|
||||
System.out.println("minlon " + minlon);
|
||||
System.out.println("maxlon " + maxlon);
|
||||
|
||||
NodeList nList = doc.getElementsByTagName("node");
|
||||
for (int temp = 0; temp < nList.getLength(); temp++) {
|
||||
org.w3c.dom.Node nNode = nList.item(temp);
|
||||
@@ -46,6 +93,26 @@ public class OsmReader {
|
||||
long id = Long.valueOf(e.getAttribute("id"));
|
||||
double lat = Double.valueOf(e.getAttribute("lat"));
|
||||
double lon = Double.valueOf(e.getAttribute("lon"));
|
||||
if (lat < minlat)
|
||||
{
|
||||
boundserror ++;
|
||||
System.err.println("lat < minlat " + lat );
|
||||
}
|
||||
else if (lat > maxlat)
|
||||
{
|
||||
boundserror ++;
|
||||
System.err.println("lat > minlat " + lat);
|
||||
}
|
||||
if (lon < minlon)
|
||||
{
|
||||
boundserror ++;
|
||||
System.err.println("lon < minlon " + lon);
|
||||
}
|
||||
else if (lon > maxlon)
|
||||
{
|
||||
boundserror ++;
|
||||
System.err.println("lon > minlon " + lon);
|
||||
}
|
||||
Node node = new Node(new NodeRef(id), lat, lon);
|
||||
refs.put(node.getRef(),node);
|
||||
}
|
||||
@@ -75,8 +142,19 @@ public class OsmReader {
|
||||
}
|
||||
}
|
||||
}
|
||||
Way way = new Way(id, nodeRefList);
|
||||
ways.add(way);
|
||||
if ( nodeRefList.size() > 0 )
|
||||
{
|
||||
Way way = new Way(id, nodeRefList);
|
||||
// closed way ?
|
||||
if (nodeRefList.get(0).equals(nodeRefList.get(nodeRefList.size() -1)))
|
||||
{
|
||||
buildings.add(way);
|
||||
}
|
||||
else
|
||||
{
|
||||
ways.add(way);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception bad)
|
||||
{
|
||||
@@ -98,12 +176,5 @@ public class OsmReader {
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user