1.3.2 preparations
This commit is contained in:
parent
14a18fd770
commit
3e50846135
17 changed files with 1929 additions and 1906 deletions
|
|
@ -9,146 +9,146 @@ import btools.util.Raster2Png;
|
|||
|
||||
public class TrafficData2Png
|
||||
{
|
||||
private static int minLon;
|
||||
private static int minLat;
|
||||
private static int maxLon;
|
||||
private static int maxLat;
|
||||
private static int ncols;
|
||||
private static int nrows;
|
||||
private static int[] pixels;
|
||||
private static int minLon;
|
||||
private static int minLat;
|
||||
private static int maxLon;
|
||||
private static int maxLat;
|
||||
private static int ncols;
|
||||
private static int nrows;
|
||||
private static int[] pixels;
|
||||
|
||||
public static void main( String[] args) throws Exception
|
||||
public static void main( String[] args ) throws Exception
|
||||
{
|
||||
if ( args.length == 8 )
|
||||
{
|
||||
if ( args.length == 8 )
|
||||
{
|
||||
doConvert( args[0], args[1],
|
||||
Double.parseDouble( args[2] ), Double.parseDouble( args[3] ), Double.parseDouble( args[4] ), Double.parseDouble( args[5] ),
|
||||
Integer.parseInt( args[6] ), Integer.parseInt( args[7] ) );
|
||||
}
|
||||
else if ( args.length == 4 )
|
||||
{
|
||||
int lon0 = Integer.parseInt( args[0] );
|
||||
int lat0 = Integer.parseInt( args[1] );
|
||||
String inputFile = "traffic/E" + lon0 + "_N" + lat0 + ".trf";
|
||||
for( int lon = lon0; lon < lon0+5; lon++ )
|
||||
for( int lat = lat0; lat < lat0+5; lat++ )
|
||||
{
|
||||
String imageFile = "traffic_pics/E" + lon + "_N" + lat + ".png";
|
||||
System.out.println( "file=" + inputFile + " image=" + imageFile );
|
||||
doConvert( inputFile, imageFile, lon, lat, lon+1, lat+1, Integer.parseInt( args[2] ), Integer.parseInt( args[3] ) );
|
||||
}
|
||||
}
|
||||
|
||||
doConvert( args[0], args[1], Double.parseDouble( args[2] ), Double.parseDouble( args[3] ), Double.parseDouble( args[4] ),
|
||||
Double.parseDouble( args[5] ), Integer.parseInt( args[6] ), Integer.parseInt( args[7] ) );
|
||||
}
|
||||
|
||||
public static void doConvert( String inputFile, String imageFile, double lon0, double lat0, double lon1, double lat1,
|
||||
int cols, int rows ) throws Exception
|
||||
{
|
||||
OsmTrafficMap trafficMap = new OsmTrafficMap();
|
||||
minLon = (int)(lon0 * 1000000 + 180000000);
|
||||
maxLon = (int)(lon1 * 1000000 + 180000000);
|
||||
minLat = (int)(lat0 * 1000000 + 90000000);
|
||||
maxLat = (int)(lat1 * 1000000 + 90000000);
|
||||
ncols = cols;
|
||||
nrows = rows;
|
||||
|
||||
long[] keys = trafficMap.load( new File( inputFile ), minLon, minLat, maxLon, maxLat, true );
|
||||
|
||||
pixels = new int[cols*rows];
|
||||
|
||||
int[] tclasses = new int[] { 1,2,3,4,5,6,7, -1 };
|
||||
for( int tclass : tclasses )
|
||||
{
|
||||
for(long key : keys )
|
||||
else if ( args.length == 4 )
|
||||
{
|
||||
int lon0 = Integer.parseInt( args[0] );
|
||||
int lat0 = Integer.parseInt( args[1] );
|
||||
String inputFile = "traffic/E" + lon0 + "_N" + lat0 + ".trf";
|
||||
for ( int lon = lon0; lon < lon0 + 5; lon++ )
|
||||
for ( int lat = lat0; lat < lat0 + 5; lat++ )
|
||||
{
|
||||
OsmTrafficMap.OsmTrafficElement e = trafficMap.getElement(key );
|
||||
while( e != null )
|
||||
{
|
||||
long key2 = e.node2;
|
||||
e = e.next;
|
||||
int trafficClass = trafficMap.getTrafficClass( key, key2 );
|
||||
if ( trafficClass != tclass ) continue;
|
||||
String imageFile = "traffic_pics/E" + lon + "_N" + lat + ".png";
|
||||
System.out.println( "file=" + inputFile + " image=" + imageFile );
|
||||
doConvert( inputFile, imageFile, lon, lat, lon + 1, lat + 1, Integer.parseInt( args[2] ), Integer.parseInt( args[3] ) );
|
||||
}
|
||||
}
|
||||
|
||||
int[] from = getImagePosition( key );
|
||||
int[] to = getImagePosition( key2 );
|
||||
|
||||
int rgb = 0;
|
||||
if ( trafficClass == -1 ) rgb = 0x0000ff; // blue
|
||||
else if ( trafficClass == 1 ) rgb = 0x404040; // dark grey
|
||||
else if ( trafficClass == 2 ) rgb = 0xa0a0a0; // light grey
|
||||
else if ( trafficClass == 3 ) rgb = 0x00ff00; // green
|
||||
else if ( trafficClass == 4 ) rgb = 0xf4e500; // yellow
|
||||
else if ( trafficClass == 5 ) rgb = 0xf18e1c; // orange
|
||||
else if ( trafficClass == 6 ) rgb = 0xe32322; // red
|
||||
else if ( trafficClass == 7 ) rgb = 0xc0327d; // pink
|
||||
if ( rgb != 0 )
|
||||
{
|
||||
drawLine( from, to, rgb );
|
||||
}
|
||||
}
|
||||
|
||||
public static void doConvert( String inputFile, String imageFile, double lon0, double lat0, double lon1, double lat1, int cols, int rows )
|
||||
throws Exception
|
||||
{
|
||||
OsmTrafficMap trafficMap = new OsmTrafficMap();
|
||||
minLon = (int) ( lon0 * 1000000 + 180000000 );
|
||||
maxLon = (int) ( lon1 * 1000000 + 180000000 );
|
||||
minLat = (int) ( lat0 * 1000000 + 90000000 );
|
||||
maxLat = (int) ( lat1 * 1000000 + 90000000 );
|
||||
ncols = cols;
|
||||
nrows = rows;
|
||||
|
||||
long[] keys = trafficMap.load( new File( inputFile ), minLon, minLat, maxLon, maxLat, true );
|
||||
|
||||
pixels = new int[cols * rows];
|
||||
|
||||
int[] tclasses = new int[]
|
||||
{ 1, 2, 3, 4, 5, 6, 7, -1 };
|
||||
for ( int tclass : tclasses )
|
||||
{
|
||||
for ( long key : keys )
|
||||
{
|
||||
OsmTrafficMap.OsmTrafficElement e = trafficMap.getElement( key );
|
||||
while (e != null)
|
||||
{
|
||||
long key2 = e.node2;
|
||||
e = e.next;
|
||||
int trafficClass = trafficMap.getTrafficClass( key, key2 );
|
||||
if ( trafficClass != tclass )
|
||||
continue;
|
||||
|
||||
int[] from = getImagePosition( key );
|
||||
int[] to = getImagePosition( key2 );
|
||||
|
||||
int rgb = 0;
|
||||
if ( trafficClass == -1 ) rgb = 0x0000ff; // blue
|
||||
else if ( trafficClass == 1 ) rgb = 0x404040; // dark grey
|
||||
else if ( trafficClass == 2 ) rgb = 0xa0a0a0; // light grey
|
||||
else if ( trafficClass == 3 ) rgb = 0x00ff00; // green
|
||||
else if ( trafficClass == 4 ) rgb = 0xf4e500; // yellow
|
||||
else if ( trafficClass == 5 ) rgb = 0xf18e1c; // orange
|
||||
else if ( trafficClass == 6 ) rgb = 0xe32322; // red
|
||||
else if ( trafficClass == 7 ) rgb = 0xc0327d; // pink
|
||||
if ( rgb != 0 )
|
||||
{
|
||||
drawLine( from, to, rgb );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Raster2Png r2p = new Raster2Png( Raster2Png.FILTER_NONE, 6, cols, rows, pixels );
|
||||
byte[] png = r2p.pngEncode( );
|
||||
|
||||
System.out.println( "got png of size: " + png.length );
|
||||
DataOutputStream dos = new DataOutputStream( new BufferedOutputStream( new FileOutputStream( imageFile ) ) );
|
||||
dos.write(png);
|
||||
dos.close();
|
||||
}
|
||||
|
||||
private static void drawLine( int[] from, int[] to, int rgb )
|
||||
{
|
||||
int ix = from[0];
|
||||
int iy = from[1];
|
||||
int ixx = to[0];
|
||||
int iyy = to[1];
|
||||
|
||||
int sx = ixx > ix ? 1 : -1;
|
||||
int sy = iyy > iy ? 1 : -1;
|
||||
|
||||
int dx = (ixx-ix)*sx;
|
||||
int dy = (iyy-iy)*sy;
|
||||
|
||||
int sum = 0;
|
||||
|
||||
for(;;)
|
||||
{
|
||||
drawPixel( ix, iy, rgb );
|
||||
if ( ix == ixx && iy == iyy ) break;
|
||||
|
||||
if ( Math.abs( sum+dx ) < Math.abs( sum-dy ) )
|
||||
{
|
||||
iy+= sy;
|
||||
sum += dx;
|
||||
}
|
||||
else
|
||||
{
|
||||
ix+= sx;
|
||||
sum -= dy;
|
||||
}
|
||||
byte[] png = new Raster2Png().pngEncode( cols, rows, pixels );
|
||||
|
||||
System.out.println( "got png of size: " + png.length );
|
||||
DataOutputStream dos = new DataOutputStream( new BufferedOutputStream( new FileOutputStream( imageFile ) ) );
|
||||
dos.write( png );
|
||||
dos.close();
|
||||
}
|
||||
|
||||
private static void drawLine( int[] from, int[] to, int rgb )
|
||||
{
|
||||
int ix = from[0];
|
||||
int iy = from[1];
|
||||
int ixx = to[0];
|
||||
int iyy = to[1];
|
||||
|
||||
int sx = ixx > ix ? 1 : -1;
|
||||
int sy = iyy > iy ? 1 : -1;
|
||||
|
||||
int dx = ( ixx - ix ) * sx;
|
||||
int dy = ( iyy - iy ) * sy;
|
||||
|
||||
int sum = 0;
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
drawPixel( ix, iy, rgb );
|
||||
if ( ix == ixx && iy == iyy )
|
||||
break;
|
||||
|
||||
if ( Math.abs( sum + dx ) < Math.abs( sum - dy ) )
|
||||
{
|
||||
iy += sy;
|
||||
sum += dx;
|
||||
}
|
||||
else
|
||||
{
|
||||
ix += sx;
|
||||
sum -= dy;
|
||||
}
|
||||
}
|
||||
|
||||
private static void drawPixel( int ix, int iy, int rgb )
|
||||
}
|
||||
|
||||
private static void drawPixel( int ix, int iy, int rgb )
|
||||
{
|
||||
if ( ix >= 0 && ix < ncols && iy >= 0 && iy < nrows )
|
||||
{
|
||||
if ( ix >= 0 && ix < ncols && iy >= 0 && iy < nrows )
|
||||
{
|
||||
pixels[ (nrows-1-iy)*ncols + ix ] = rgb;
|
||||
}
|
||||
}
|
||||
|
||||
private static int[] getImagePosition( long key )
|
||||
{
|
||||
int ilon = (int)(key >> 32);
|
||||
int ilat = (int)(key & 0xffffffff);
|
||||
double lonDelta = maxLon-minLon;
|
||||
double latDelta = maxLat-minLat;
|
||||
int[] res = new int[2];
|
||||
res[0] = (int)( ( (ilon-minLon)/lonDelta ) *ncols );
|
||||
res[1] = (int)( ( (ilat-minLat)/latDelta ) *nrows );
|
||||
return res;
|
||||
pixels[( nrows - 1 - iy ) * ncols + ix] = rgb;
|
||||
}
|
||||
}
|
||||
|
||||
private static int[] getImagePosition( long key )
|
||||
{
|
||||
int ilon = (int) ( key >> 32 );
|
||||
int ilat = (int) ( key & 0xffffffff );
|
||||
double lonDelta = maxLon - minLon;
|
||||
double latDelta = maxLat - minLat;
|
||||
int[] res = new int[2];
|
||||
res[0] = (int) ( ( ( ilon - minLon ) / lonDelta ) * ncols );
|
||||
res[1] = (int) ( ( ( ilat - minLat ) / latDelta ) * nrows );
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue