set new raster calls

This commit is contained in:
afischerdev 2023-11-06 12:50:50 +01:00
parent 5198559c77
commit 36d692da84

View file

@ -7,7 +7,6 @@ import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.InputStream; import java.io.InputStream;
import java.util.HashMap; import java.util.HashMap;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import btools.util.CompactLongSet; import btools.util.CompactLongSet;
@ -24,17 +23,17 @@ import btools.util.FrozenLongSet;
*/ */
public class PosUnifier extends MapCreatorBase { public class PosUnifier extends MapCreatorBase {
public static final boolean UseLidarRd5FileName = false; public static final boolean UseRasterRd5FileName = false;
private DiffCoderDataOutputStream nodesOutStream; private DiffCoderDataOutputStream nodesOutStream;
private DiffCoderDataOutputStream borderNodesOut; private DiffCoderDataOutputStream borderNodesOut;
private File nodeTilesOut; private File nodeTilesOut;
private CompactLongSet[] positionSets; private CompactLongSet[] positionSets;
private Map<String, SrtmRaster> srtmmap; private Map<String, ElevationRaster> srtmmap;
private int lastSrtmLonIdx; private int lastSrtmLonIdx;
private int lastSrtmLatIdx; private int lastSrtmLatIdx;
private SrtmRaster lastSrtmRaster; private ElevationRaster lastSrtmRaster;
private String srtmdir; private String srtmdir;
private String srtmfallbackdir; private String srtmfallbackdir;
@ -51,7 +50,7 @@ public class PosUnifier extends MapCreatorBase {
NodeData n = new NodeData(1, lon, lat); NodeData n = new NodeData(1, lon, lat);
short selev = Short.MIN_VALUE; short selev = Short.MIN_VALUE;
SrtmRaster srtm = null; ElevationRaster srtm = null;
/* /*
// check hgt direct // check hgt direct
srtm = posu.hgtForNode(n.ilon, n.ilat); srtm = posu.hgtForNode(n.ilon, n.ilat);
@ -60,7 +59,7 @@ public class PosUnifier extends MapCreatorBase {
} else { } else {
System.out.println("hgtForNode no data"); System.out.println("hgtForNode no data");
} }
posu.resetSrtm(); posu.resetElevationRaster();
System.out.println("-----> selv for hgt " + lat + ", " + lon + " = " + selev + " = " + (selev / 4.)); System.out.println("-----> selv for hgt " + lat + ", " + lon + " = " + selev + " = " + (selev / 4.));
srtm = null; srtm = null;
selev = Short.MIN_VALUE; selev = Short.MIN_VALUE;
@ -69,7 +68,7 @@ public class PosUnifier extends MapCreatorBase {
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.resetElevationRaster();
System.out.println("-----> selv for bef " + lat + ", " + lon + " = " + selev + " = " + (selev / 4.)); System.out.println("-----> selv for bef " + lat + ", " + lon + " = " + selev + " = " + (selev / 4.));
return; return;
} else if (args.length != 5 && args.length != 6) { } else if (args.length != 5 && args.length != 6) {
@ -107,7 +106,7 @@ public class PosUnifier extends MapCreatorBase {
@Override @Override
public void nodeFileStart(File nodefile) throws Exception { public void nodeFileStart(File nodefile) throws Exception {
resetSrtm(); resetElevationRaster();
nodesOutStream = createOutStream(fileFromTemplate(nodefile, nodeTilesOut, "u5d")); nodesOutStream = createOutStream(fileFromTemplate(nodefile, nodeTilesOut, "u5d"));
@ -125,7 +124,7 @@ public class PosUnifier extends MapCreatorBase {
srtm = srtmForNode(n.ilon, n.ilat); srtm = srtmForNode(n.ilon, n.ilat);
} */ } */
SrtmRaster srtm = srtmForNode(n.ilon, n.ilat); ElevationRaster srtm = srtmForNode(n.ilon, n.ilat);
if (srtm != null) n.selev = srtm.getElevation(n.ilon, n.ilat); if (srtm != null) n.selev = srtm.getElevation(n.ilon, n.ilat);
findUniquePos(n); findUniquePos(n);
@ -139,7 +138,7 @@ public class PosUnifier extends MapCreatorBase {
@Override @Override
public void nodeFileEnd(File nodeFile) throws Exception { public void nodeFileEnd(File nodeFile) throws Exception {
nodesOutStream.close(); nodesOutStream.close();
resetSrtm(); resetElevationRaster();
} }
private boolean checkAdd(int lon, int lat) { private boolean checkAdd(int lon, int lat) {
@ -187,7 +186,7 @@ public class PosUnifier extends MapCreatorBase {
* get the srtm data set for a position srtm coords are * get the srtm data set for a position srtm coords are
* srtm_<srtmLon>_<srtmLat> where srtmLon = 180 + lon, srtmLat = 60 - lat * srtm_<srtmLon>_<srtmLat> where srtmLon = 180 + lon, srtmLat = 60 - lat
*/ */
private SrtmRaster srtmForNode(int ilon, int ilat) throws Exception { private ElevationRaster srtmForNode(int ilon, int ilat) throws Exception {
int srtmLonIdx = (ilon + 5000000) / 5000000; int srtmLonIdx = (ilon + 5000000) / 5000000;
int srtmLatIdx = (654999999 - ilat) / 5000000 - 100; // ugly negative rounding... int srtmLatIdx = (654999999 - ilat) / 5000000 - 100; // ugly negative rounding...
@ -198,7 +197,7 @@ public class PosUnifier extends MapCreatorBase {
lastSrtmLatIdx = srtmLatIdx; lastSrtmLatIdx = srtmLatIdx;
String filename; String filename;
if (UseLidarRd5FileName) { if (UseRasterRd5FileName) {
filename = genFilenameRd5(ilon, ilat); filename = genFilenameRd5(ilon, ilat);
} else { } else {
filename = genFilenameXY(srtmLonIdx, srtmLatIdx); filename = genFilenameXY(srtmLonIdx, srtmLatIdx);
@ -210,7 +209,7 @@ public class PosUnifier extends MapCreatorBase {
if (f.exists()) { if (f.exists()) {
try { try {
InputStream isc = new BufferedInputStream(new FileInputStream(f)); InputStream isc = new BufferedInputStream(new FileInputStream(f));
lastSrtmRaster = new RasterCoder().decodeRaster(isc); lastSrtmRaster = new ElevationRasterCoder().decodeRaster(isc);
isc.close(); isc.close();
} catch (Exception e) { } catch (Exception e) {
System.out.println("**** ERROR reading " + f + " ****"); System.out.println("**** ERROR reading " + f + " ****");
@ -225,7 +224,7 @@ public class PosUnifier extends MapCreatorBase {
try { try {
InputStream isc = new BufferedInputStream(new FileInputStream(f)); InputStream isc = new BufferedInputStream(new FileInputStream(f));
//lastSrtmRaster = new StatRasterCoder().decodeRaster(isc); //lastSrtmRaster = new StatRasterCoder().decodeRaster(isc);
lastSrtmRaster = new RasterCoder().decodeRaster(isc); lastSrtmRaster = new ElevationRasterCoder().decodeRaster(isc);
isc.close(); isc.close();
} catch (Exception e) { } catch (Exception e) {
System.out.println("**** ERROR reading " + f + " ****"); System.out.println("**** ERROR reading " + f + " ****");
@ -258,23 +257,23 @@ public class PosUnifier extends MapCreatorBase {
} }
private SrtmRaster hgtForNode(int ilon, int ilat) throws Exception { private ElevationRaster 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.;
String filename = buildHgtFilename(lat, lon); String filename = buildHgtFilename(lat, lon);
// don't block lastSrtmRaster // don't block lastSrtmRaster
SrtmRaster srtm = srtmmap.get(filename); ElevationRaster srtm = srtmmap.get(filename);
if (srtm == null) { if (srtm == null) {
File f = new File(new File(srtmdir), filename + ".zip"); File f = new File(new File(srtmdir), filename + ".zip");
if (f.exists()) { if (f.exists()) {
srtm = new ConvertLidarTile().getRaster(f, lon, lat); srtm = new ElevationRasterTileConverter().getRaster(f, lon, lat);
srtmmap.put(filename, srtm); srtmmap.put(filename, srtm);
return srtm; return srtm;
} }
f = new File(new File(srtmdir), filename + ".hgt"); f = new File(new File(srtmdir), filename + ".hgt");
if (f.exists()) { if (f.exists()) {
srtm = new ConvertLidarTile().getRaster(f, lon, lat); srtm = new ElevationRasterTileConverter().getRaster(f, lon, lat);
srtmmap.put(filename, srtm); srtmmap.put(filename, srtm);
return srtm; return srtm;
} }
@ -282,6 +281,7 @@ public class PosUnifier extends MapCreatorBase {
return srtm; return srtm;
} }
private String buildHgtFilename(double llat, double llon) { private String buildHgtFilename(double llat, double llon) {
int lat = (int) llat; int lat = (int) llat;
int lon = (int) llon; int lon = (int) llon;
@ -297,10 +297,10 @@ public class PosUnifier extends MapCreatorBase {
lon = -lon + 1; lon = -lon + 1;
} }
return String.format(Locale.US, "%s%02d%s%03d", latPref, lat, lonPref, lon); return String.format("%s%02d%s%03d", latPref, lat, lonPref, lon);
} }
private void resetSrtm() { private void resetElevationRaster() {
srtmmap = new HashMap<>(); srtmmap = new HashMap<>();
lastSrtmLonIdx = -1; lastSrtmLonIdx = -1;
lastSrtmLatIdx = -1; lastSrtmLatIdx = -1;