eu-dem parsing robustness

This commit is contained in:
Arndt Brenschede 2014-03-05 20:07:30 +01:00
parent 47b8369b26
commit 5d38e23b33

View file

@ -14,6 +14,7 @@ import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream; import java.util.zip.ZipInputStream;
@ -25,7 +26,6 @@ public class SrtmData
public double xllcorner; public double xllcorner;
public double yllcorner; public double yllcorner;
public double cellsize; public double cellsize;
public int nodata_value;
public short[] eval_array; public short[] eval_array;
private double minlon; private double minlon;
@ -80,20 +80,6 @@ public class SrtmData
if ( ze.getName().endsWith( ".asc" ) ) if ( ze.getName().endsWith( ".asc" ) )
{ {
readFromStream( zis ); readFromStream( zis );
/* // test
int[] ca = new int[]{ 50477121, 8051915, // 181
50477742, 8047408, // 154
50477189, 8047308, // 159
};
for( int i=0; i<ca.length; i+=2 )
{
int lat=ca[i] + 90000000;
int lon=ca[i+1] + 180000000;
System.err.println( "lat=" + lat + " lon=" + lon + " elev=" + getElevation( lon, lat )/4. );
}
// end test
*/
return; return;
} }
} }
@ -104,6 +90,12 @@ public class SrtmData
} }
} }
private String secondToken( String s )
{
StringTokenizer tk = new StringTokenizer( s, " " );
tk.nextToken();
return tk.nextToken();
}
public void readFromStream( InputStream is ) throws Exception public void readFromStream( InputStream is ) throws Exception
{ {
@ -115,14 +107,14 @@ public class SrtmData
if ( linenr <= 6 ) if ( linenr <= 6 )
{ {
String line = br.readLine(); String line = br.readLine();
if ( linenr == 1 ) ncols = Integer.parseInt( line.substring(14) ); if ( linenr == 1 ) ncols = Integer.parseInt( secondToken( line ) );
else if ( linenr == 2 ) nrows = Integer.parseInt( line.substring(14) ); else if ( linenr == 2 ) nrows = Integer.parseInt( secondToken( line ) );
else if ( linenr == 3 ) xllcorner = Double.parseDouble( line.substring(14) ); else if ( linenr == 3 ) xllcorner = Double.parseDouble( secondToken( line ) );
else if ( linenr == 4 ) yllcorner = Double.parseDouble( line.substring(14) ); else if ( linenr == 4 ) yllcorner = Double.parseDouble( secondToken( line ) );
else if ( linenr == 5 ) cellsize = Double.parseDouble( line.substring(14) ); else if ( linenr == 5 ) cellsize = Double.parseDouble( secondToken( line ) );
else if ( linenr == 6 ) else if ( linenr == 6 )
{ {
nodata_value = Integer.parseInt( line.substring(14) ); // nodata_value ignored, assumed something << 0
eval_array = new short[ncols * nrows]; eval_array = new short[ncols * nrows];
} }
} }
@ -139,8 +131,7 @@ public class SrtmData
if ( c == ' ' ) if ( c == ' ' )
{ {
if ( negative ) n = -n; if ( negative ) n = -n;
short val = n == nodata_value ? Short.MIN_VALUE : (short)(n*4); short val = n < -250 ? Short.MIN_VALUE : (short)(n*4);
if ( val < -1000 ) val = Short.MIN_VALUE;
eval_array[ (nrows-1-row)*ncols + col ] = val; eval_array[ (nrows-1-row)*ncols + col ] = val;
if (++col == ncols ) if (++col == ncols )
@ -167,4 +158,23 @@ public class SrtmData
br.close(); br.close();
} }
private void test()
{
int[] ca = new int[]{ 50477121, 8051915, // 181
50477742, 8047408, // 154
50477189, 8047308, // 159
};
for( int i=0; i<ca.length; i+=2 )
{
int lat=ca[i] + 90000000;
int lon=ca[i+1] + 180000000;
System.err.println( "lat=" + lat + " lon=" + lon + " elev=" + getElevation( lon, lat )/4. );
}
}
public static void main( String[] args ) throws Exception
{
SrtmData data = new SrtmData( new File( args[0] ) );
data.test();
}
} }