add hgt reader
This commit is contained in:
parent
2c707c977b
commit
580b7b2421
2 changed files with 316 additions and 4 deletions
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue