added 1sec srtm use

This commit is contained in:
afischerdev 2023-10-27 16:21:58 +02:00
parent 109782d362
commit 254aff19b8

View file

@ -23,6 +23,9 @@ import btools.util.FrozenLongSet;
* @author ab * @author ab
*/ */
public class PosUnifier extends MapCreatorBase { public class PosUnifier extends MapCreatorBase {
public static final boolean UseLidarRd5FileName = false;
private DiffCoderDataOutputStream nodesOutStream; private DiffCoderDataOutputStream nodesOutStream;
private DiffCoderDataOutputStream borderNodesOut; private DiffCoderDataOutputStream borderNodesOut;
private File nodeTilesOut; private File nodeTilesOut;
@ -33,6 +36,7 @@ public class PosUnifier extends MapCreatorBase {
private int lastSrtmLatIdx; private int lastSrtmLatIdx;
private SrtmRaster lastSrtmRaster; private SrtmRaster lastSrtmRaster;
private String srtmdir; private String srtmdir;
private String srtmfallbackdir;
private CompactLongSet borderNids; private CompactLongSet borderNids;
@ -46,25 +50,40 @@ public class PosUnifier extends MapCreatorBase {
double lat = Double.parseDouble(args[2]); double lat = Double.parseDouble(args[2]);
NodeData n = new NodeData(1, lon, lat); NodeData n = new NodeData(1, lon, lat);
SrtmRaster srtm = posu.hgtForNode(n.ilon, n.ilat);
short selev = Short.MIN_VALUE; short selev = Short.MIN_VALUE;
SrtmRaster srtm = null;
/*
// check hgt direct
srtm = posu.hgtForNode(n.ilon, n.ilat);
if (srtm != null) {
selev = srtm.getElevation(n.ilon, n.ilat);
} else {
System.out.println("hgtForNode no data");
}
posu.resetSrtm();
System.out.println("-----> selv for hgt " + lat + ", " + lon + " = " + selev + " = " + (selev / 4.));
srtm = null;
selev = Short.MIN_VALUE;
*/
if (srtm == null) { if (srtm == null) {
srtm = posu.srtmForNode(n.ilon, n.ilat); srtm = posu.srtmForNode(n.ilon, n.ilat);
} }
if (srtm != null) selev = srtm.getElevation(n.ilon, n.ilat); if (srtm != null) selev = srtm.getElevation(n.ilon, n.ilat);
posu.resetSrtm(); posu.resetSrtm();
System.out.println("-----> selv for " + lat + ", " + lon + " = " + selev + " = " + (selev / 4.)); System.out.println("-----> selv for bef " + lat + ", " + lon + " = " + selev + " = " + (selev / 4.));
return; return;
} else if (args.length != 5) { } else if (args.length != 5 && args.length != 6) {
System.out.println("usage: java PosUnifier <node-tiles-in> <node-tiles-out> <bordernids-in> <bordernodes-out> <srtm-data-dir>"); System.out.println("usage: java PosUnifier <node-tiles-in> <node-tiles-out> <bordernids-in> <bordernodes-out> <srtm-data-dir> [srtm-fallback-data-dir]");
System.out.println("or java PosUnifier <srtm-data-dir> <lon> <lat>");
return; return;
} }
new PosUnifier().process(new File(args[0]), new File(args[1]), new File(args[2]), new File(args[3]), args[4]); new PosUnifier().process(new File(args[0]), new File(args[1]), new File(args[2]), new File(args[3]), args[4], (args.length == 6 ? args[5] : null));
} }
public void process(File nodeTilesIn, File nodeTilesOut, File bordernidsinfile, File bordernodesoutfile, String srtmdir) throws Exception { public void process(File nodeTilesIn, File nodeTilesOut, File bordernidsinfile, File bordernodesoutfile, String srtmdir, String srtmfallbackdir) throws Exception {
this.nodeTilesOut = nodeTilesOut; this.nodeTilesOut = nodeTilesOut;
this.srtmdir = srtmdir; this.srtmdir = srtmdir;
this.srtmfallbackdir = srtmfallbackdir;
// read border nids set // read border nids set
DataInputStream dis = createInStream(bordernidsinfile); DataInputStream dis = createInStream(bordernidsinfile);
@ -178,15 +197,17 @@ public class PosUnifier extends MapCreatorBase {
lastSrtmLonIdx = srtmLonIdx; lastSrtmLonIdx = srtmLonIdx;
lastSrtmLatIdx = srtmLatIdx; lastSrtmLatIdx = srtmLatIdx;
String slonidx = "0" + srtmLonIdx; String filename;
String slatidx = "0" + srtmLatIdx; if (UseLidarRd5FileName) {
String filename = "srtm_" + slonidx.substring(slonidx.length() - 2) + "_" + slatidx.substring(slatidx.length() - 2); filename = genFilenameRd5(ilon, ilat);
} else {
filename = genFilenameXY(srtmLonIdx, srtmLatIdx);
}
lastSrtmRaster = srtmmap.get(filename); lastSrtmRaster = srtmmap.get(filename);
if (lastSrtmRaster == null && !srtmmap.containsKey(filename)) { if (lastSrtmRaster == null && !srtmmap.containsKey(filename)) {
File f = new File(new File(srtmdir), filename + ".bef"); File f = new File(new File(srtmdir), filename + ".bef");
if (f.exists()) { if (f.exists()) {
System.out.println("*** reading: " + f);
try { try {
InputStream isc = new BufferedInputStream(new FileInputStream(f)); InputStream isc = new BufferedInputStream(new FileInputStream(f));
lastSrtmRaster = new RasterCoder().decodeRaster(isc); lastSrtmRaster = new RasterCoder().decodeRaster(isc);
@ -194,26 +215,49 @@ public class PosUnifier extends MapCreatorBase {
} catch (Exception e) { } catch (Exception e) {
System.out.println("**** ERROR reading " + f + " ****"); System.out.println("**** ERROR reading " + f + " ****");
} }
System.out.println("*** reading: " + f + " " + lastSrtmRaster.ncols);
srtmmap.put(filename, lastSrtmRaster); srtmmap.put(filename, lastSrtmRaster);
return lastSrtmRaster; return lastSrtmRaster;
} }
if (srtmfallbackdir != null) {
f = new File(new File(srtmdir), filename + ".zip"); f = new File(new File(srtmfallbackdir), filename + ".bef");
// System.out.println("reading: " + f + " ilon=" + ilon + " ilat=" + ilat);
if (f.exists()) { if (f.exists()) {
try { try {
lastSrtmRaster = new SrtmData(f).getRaster(); InputStream isc = new BufferedInputStream(new FileInputStream(f));
srtmmap.put(filename, lastSrtmRaster); //lastSrtmRaster = new StatRasterCoder().decodeRaster(isc);
return lastSrtmRaster; lastSrtmRaster = new RasterCoder().decodeRaster(isc);
isc.close();
} catch (Exception e) { } catch (Exception e) {
System.out.println("**** ERROR reading " + f + " ****"); System.out.println("**** ERROR reading " + f + " ****");
} }
System.out.println("*** reading: " + f + " " + lastSrtmRaster.cellsize);
srtmmap.put(filename, lastSrtmRaster);
return lastSrtmRaster;
}
} }
srtmmap.put(filename, lastSrtmRaster); srtmmap.put(filename, lastSrtmRaster);
} }
return lastSrtmRaster; return lastSrtmRaster;
} }
static String genFilenameXY(int srtmLonIdx, int srtmLatIdx) {
String slonidx = "0" + srtmLonIdx;
String slatidx = "0" + srtmLatIdx;
return "srtm_" + slonidx.substring(slonidx.length() - 2) + "_" + slatidx.substring(slatidx.length() - 2);
}
static String genFilenameRd5(int ilon, int ilat) {
int lonDegree = ilon / 1000000;
int latDegree = ilat / 1000000;
int lonMod5 = lonDegree % 5;
int latMod5 = latDegree % 5;
lonDegree = lonDegree - 180 - lonMod5;
latDegree = latDegree - 90 - latMod5;
return String.format("srtm_%s_%s", lonDegree < 0 ? "W" + (-lonDegree) : "E" + lonDegree,
latDegree < 0 ? "S" + (-latDegree) : "N" + latDegree);
}
private SrtmRaster hgtForNode(int ilon, int ilat) throws Exception { private SrtmRaster hgtForNode(int ilon, int ilat) throws Exception {
double lon = (ilon - 180000000) / 1000000.; double lon = (ilon - 180000000) / 1000000.;
double lat = (ilat - 90000000) / 1000000.; double lat = (ilat - 90000000) / 1000000.;
@ -222,13 +266,13 @@ public class PosUnifier extends MapCreatorBase {
// don't block lastSrtmRaster // don't block lastSrtmRaster
SrtmRaster srtm = srtmmap.get(filename); SrtmRaster srtm = srtmmap.get(filename);
if (srtm == null) { if (srtm == null) {
File f = new File(new File(srtmdir), filename + ".hgt"); File f = new File(new File(srtmdir), filename + ".zip");
if (f.exists()) { if (f.exists()) {
srtm = new ConvertLidarTile().getRaster(f, lon, lat); srtm = new ConvertLidarTile().getRaster(f, lon, lat);
srtmmap.put(filename, srtm); srtmmap.put(filename, srtm);
return srtm; return srtm;
} }
f = new File(new File(srtmdir), filename + ".zip"); f = new File(new File(srtmdir), filename + ".hgt");
if (f.exists()) { if (f.exists()) {
srtm = new ConvertLidarTile().getRaster(f, lon, lat); srtm = new ConvertLidarTile().getRaster(f, lon, lat);
srtmmap.put(filename, srtm); srtmmap.put(filename, srtm);