package btools.mapcreator; import java.io.File; /** * NodeCutter does 1 step in map-processing: * * - cuts the 45*30 node tiles into 5*5 pieces * * @author ab */ public class NodeCutter extends MapCreatorBase { private int lonoffset; private int latoffset; public static void main(String[] args) throws Exception { System.out.println("*** NodeCutter: Cut big node-tiles into 5x5 tiles"); if (args.length != 2) { System.out.println("usage: java NodeCutter " ); return; } new NodeCutter().process( new File( args[0] ), new File( args[1] ) ); } public void process( File nodeTilesIn, File nodeTilesOut ) throws Exception { this.outTileDir = nodeTilesOut; new NodeIterator( this, true ).processDir( nodeTilesIn, ".tlf" ); } @Override public void nodeFileStart( File nodefile ) throws Exception { lonoffset = -1; latoffset = -1; } @Override public void nextNode( NodeData n ) throws Exception { n.writeTo( getOutStreamForTile( getTileIndex( n.ilon, n.ilat ) ) ); } @Override public void nodeFileEnd( File nodeFile ) throws Exception { closeTileOutStreams(); } private int getTileIndex( int ilon, int ilat ) { int lonoff = (ilon / 45000000 ) * 45; int latoff = (ilat / 30000000 ) * 30; if ( lonoffset == -1 ) lonoffset = lonoff; if ( latoffset == -1 ) latoffset = latoff; if ( lonoff != lonoffset || latoff != latoffset ) throw new IllegalArgumentException( "inconsistent node: " + ilon + " " + ilat ); int lon = (ilon / 5000000) % 9; int lat = (ilat / 5000000) % 6; if ( lon < 0 || lon > 8 || lat < 0 || lat > 5 ) throw new IllegalArgumentException( "illegal pos: " + ilon + "," + ilat ); return lon*6 + lat; } protected String getNameForTile( int tileIndex ) { int lon = (tileIndex / 6 ) * 5 + lonoffset - 180; int lat = (tileIndex % 6 ) * 5 + latoffset - 90; String slon = lon < 0 ? "W" + (-lon) : "E" + lon; String slat = lat < 0 ? "S" + (-lat) : "N" + lat; return slon + "_" + slat + ".n5d"; } }