add hgt reader

This commit is contained in:
afischerdev 2023-05-06 17:48:54 +02:00
parent 2c707c977b
commit 580b7b2421
2 changed files with 316 additions and 4 deletions

View file

@ -32,12 +32,31 @@ public class PosUnifier extends MapCreatorBase {
private int lastSrtmLatIdx;
private SrtmRaster lastSrtmRaster;
private String srtmdir;
private HgtReader hgtReader;
private CompactLongSet borderNids;
public static void main(String[] args) throws Exception {
System.out.println("*** PosUnifier: Unify position values and enhance elevation");
if (args.length != 5) {
if (args.length == 3) {
PosUnifier posu = new PosUnifier();
posu.srtmdir = (args[0]);
posu.srtmmap = new HashMap<>();
double lon = Double.parseDouble(args[1]);
double lat = Double.parseDouble(args[2]);
NodeData n = new NodeData(1, lon, lat);
SrtmRaster srtm = posu.srtmForNode(n.ilon, n.ilat);
short selev = Short.MIN_VALUE;
if (srtm == null) {
selev = posu.hgtForNode(n.ilon, n.ilat);
} else {
selev = srtm.getElevation(n.ilon, n.ilat);
}
posu.resetSrtm();
System.out.println("-----> selv for " + lat + ", "+ lon + " = " + selev + " = " + (selev/4.));
return;
} else if (args.length != 5) {
System.out.println("usage: java PosUnifier <node-tiles-in> <node-tiles-out> <bordernids-in> <bordernodes-out> <srtm-data-dir>");
return;
}
@ -80,7 +99,12 @@ public class PosUnifier extends MapCreatorBase {
@Override
public void nextNode(NodeData n) throws Exception {
SrtmRaster srtm = srtmForNode(n.ilon, n.ilat);
n.selev = srtm == null ? Short.MIN_VALUE : srtm.getElevation(n.ilon, n.ilat);
n.selev = Short.MIN_VALUE;
if (srtm == null) {
n.selev = hgtForNode(n.ilon, n.ilat);
} else {
n.selev = srtm.getElevation(n.ilon, n.ilat);
}
findUniquePos(n);
@ -93,6 +117,7 @@ public class PosUnifier extends MapCreatorBase {
@Override
public void nodeFileEnd(File nodeFile) throws Exception {
nodesOutStream.close();
resetSrtm();
}
private boolean checkAdd(int lon, int lat) {
@ -157,7 +182,7 @@ public class PosUnifier extends MapCreatorBase {
lastSrtmRaster = srtmmap.get(filename);
if (lastSrtmRaster == null && !srtmmap.containsKey(filename)) {
File f = new File(new File(srtmdir), filename + ".bef");
System.out.println("checking: " + f + " ilon=" + ilon + " ilat=" + ilat);
//System.out.println("checking: " + f + " ilon=" + ilon + " ilat=" + ilat);
if (f.exists()) {
System.out.println("*** reading: " + f);
try {
@ -172,7 +197,7 @@ public class PosUnifier extends MapCreatorBase {
}
f = new File(new File(srtmdir), filename + ".zip");
System.out.println("reading: " + f + " ilon=" + ilon + " ilat=" + ilat);
// System.out.println("reading: " + f + " ilon=" + ilon + " ilat=" + ilat);
if (f.exists()) {
try {
lastSrtmRaster = new SrtmData(f).getRaster();
@ -185,11 +210,29 @@ public class PosUnifier extends MapCreatorBase {
return lastSrtmRaster;
}
private short hgtForNode(int ilon, int ilat) throws Exception {
double lon = (ilon - 180000000)/1000000.;
double lat = (ilat - 90000000)/1000000.;
try {
if (hgtReader == null) hgtReader = new HgtReader(srtmdir);
double res = hgtReader.getElevationFromHgt(lat, lon);
// System.out.println("**** reading " + res + " ****");
if (Double.isNaN(res)) return Short.MIN_VALUE;
return (short) (res*4);
} catch (Exception e) {
System.out.println("**** ERROR reading hgt " + lon + " " + lat + " ****");
}
return Short.MIN_VALUE;
}
private void resetSrtm() {
srtmmap = new HashMap<String, SrtmRaster>();
lastSrtmLonIdx = -1;
lastSrtmLatIdx = -1;
lastSrtmRaster = null;
if (hgtReader != null) hgtReader.clear();
}
}