package pl.wat.ms4ds.terenfunkcje; import org.apache.log4j.Logger; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Properties; public final class MapConsts { private static final Logger LOGGER = Logger.getLogger(MapConsts.class); /** * Umowny uklad odniesienia dla lokalizacji geograficznej:
* Długość geograficzna (wsp. X) przyjmuje wartości: [0, 360) odpowiadające [-180, 180]
* Szerokość geograficzna (wsp. Y) przyjmuje wartości: [0, 180] odpowadające [-90, 90] */ public static final int X_REF; /** * Umowny uklad odniesienia dla lokalizacji geograficznej:
* Długość geograficzna (wsp. X) przyjmuje wartości: [0, 360) odpowiadające [-180, 180]
* Szerokość geograficzna (wsp. Y) przyjmuje wartości: [0, 180] odpowadające [-90, 90] */ public static final int Y_REF; public static final int DX_REF; public static final int DY_REF; public static final String KWADRATY_DIR; public static final String DROGI_DIR; /** * Nazwa pliku z konfiguracja mechanizmu odpowiedzialnego za transfer. Plik * musi znajdowac sie w katalogu glownym aplikacji, ewentualnie musi tu byc * podana sciezka bezwzgledna do niego. */ private static final String PLIK_Z_USTAWIENIAMI = "teren.properties"; /** * Dlugosc boku duzego kwadratu na osi OX w liczbie malych kwadratow. */ public static final int SS_PER_BS_X; /** * Dlugosc boku duzego kwadratu na osi OY w liczbie malych kwadratow. */ public static final int SS_PER_BS_Y; /** * Dlugosc boku malego kwadratu w metrach. */ public static final int DL_MK; /** * Powierzchnia malego kwadratu w metrach. */ public static final int POW_MK; /** * Szerokość małego kwadratu w stopniach. */ public static final double DELTA_X; /** * Wysokość małego kwadratu w stopniach. */ public static final double DELTA_Y; /** * Liczba duzych kwadratow na stopien geograficzny po osi OX (dlugosc geograficzna). */ public static final int BS_PER_DEG_X = 4; /** * Liczba duzych kwadratow na stopien geograficzny po osi OY (szerokosc geograficzna). */ public static final int BS_PER_DEG_Y = 6; /** * Szerokość duzych kwadratow w stopniach geograficznych po osi OX (dlugosc geograficzna). */ public static final double BS_DX; /** * Wysokość duzych kwadratow w stopniach geograficznych po osi OY (szerokosc geograficzna). */ public static final double BS_DY; static Properties ustawienia; /** * Odczytanie ustawien z pliku konfiguracyjnego. */ static { String propertiesFileName = System.getProperty("user.dir") + "\\" + PLIK_Z_USTAWIENIAMI; ustawienia = new Properties(); try { LOGGER.debug("Odczyt ustawien z pliku " + propertiesFileName + "."); ustawienia.load(new FileInputStream(propertiesFileName)); LOGGER.debug("Ustawienia wczytane."); } catch (FileNotFoundException e) { LOGGER.error(e.getLocalizedMessage()); } catch (IOException e) { LOGGER.error(e.getLocalizedMessage()); } // logger.debug("Ustawienia wczytane."); // przesuniecie o 180 stop. // poludnik zerowy ma wartosc 180, zatem wspolrzedne zachodnie (ujemne) zawierają sie w <0, 180) // wspolrzedne wschodnie (nieujemne) zawieraja sie w przedziale <180, 360) X_REF = Integer.parseInt(ustawienia.getProperty("x_ref")) + 180; // przesuniecie o 90 stop. // rownik ma wartosc 90, zatem wspolrzedne poludniowe (ujemne) zawierają sie w <0, 90) // wspolrzedne polnocne (nieujemne) zawieraja sie w przedziale <90, 180> Y_REF = Integer.parseInt(ustawienia.getProperty("y_ref")) + 90; DX_REF = Integer.parseInt(ustawienia.getProperty("dx_ref")); DY_REF = Integer.parseInt(ustawienia.getProperty("dy_ref")); String val = ustawienia.getProperty("dl_mk"); switch (val) { case "20": DL_MK = 20; break; case "25": DL_MK = 25; break; case "50": DL_MK = 50; break; case "100": DL_MK = 100; break; default: DL_MK = 200; break; } POW_MK = DL_MK * DL_MK; DROGI_DIR = ustawienia.getProperty("drogi_dir"); if (DL_MK == 20) { SS_PER_BS_X = 83 * 10; SS_PER_BS_Y = 93 * 10; DELTA_X = 1.0 / (double) (BS_PER_DEG_X * SS_PER_BS_X); DELTA_Y = 1.0 / (double) (BS_PER_DEG_Y * SS_PER_BS_Y); KWADRATY_DIR = ustawienia.getProperty("kwadraty_dir") + "20m/"; } else if (DL_MK == 25) { SS_PER_BS_X = 83 * 8; SS_PER_BS_Y = 93 * 8; DELTA_X = 1.0 / (double) (BS_PER_DEG_X * SS_PER_BS_X); DELTA_Y = 1.0 / (double) (BS_PER_DEG_Y * SS_PER_BS_Y); KWADRATY_DIR = ustawienia.getProperty("kwadraty_dir") + "25m/"; } else if (DL_MK == 50) { SS_PER_BS_X = 83 * 4; SS_PER_BS_Y = 93 * 4; DELTA_X = 1.0 / (double) (BS_PER_DEG_X * SS_PER_BS_X); DELTA_Y = 1.0 / (double) (BS_PER_DEG_Y * SS_PER_BS_Y); KWADRATY_DIR = ustawienia.getProperty("kwadraty_dir") + "50m/"; } else if (DL_MK == 100) { SS_PER_BS_X = 83 * 2; SS_PER_BS_Y = 93 * 2; DELTA_X = 1.0 / (double) (BS_PER_DEG_X * SS_PER_BS_X); DELTA_Y = 1.0 / (double) (BS_PER_DEG_Y * SS_PER_BS_Y); KWADRATY_DIR = ustawienia.getProperty("kwadraty_dir") + "100m/"; } else { // domyslnie dlugosc kwadratu 200m SS_PER_BS_X = 83; SS_PER_BS_Y = 93; DELTA_X = 1.0 / (double) (BS_PER_DEG_X * SS_PER_BS_X); DELTA_Y = 1.0 / (double) (BS_PER_DEG_Y * SS_PER_BS_Y); KWADRATY_DIR = ustawienia.getProperty("kwadraty_dir") + "200m/"; } BS_DX = 1.0 / (double) BS_PER_DEG_X; BS_DY = 1.0 / (double) BS_PER_DEG_Y; } /** * Liczba milisekund na stopien. */ public static final int DEG_MS = 3600000; /** * Liczba milisekund na 360 stopni. */ public static final long ANGLE_360_MS = 3600000 * 360; /** * Wielkosc cache'u pola walki (liczba duzych kwadratow trzymanych w RAM). */ public static final int MAX_BIG_SQUARES_IN_MEMORY = 500; /** * Wspolrzedna referencyjna X (dlugosc geograficzna) lewego dolnego rogu mapy w stopniach geograficznych. * @return */ public static int getX_REF() { return X_REF; } /** * Wspolrzedna referencyjna Y (szerokosc geograficzna) lewego dolnego rogu mapy w stopniach geograficznych. * @return */ public static int getY_REF() { return Y_REF; } /** * Szerokosc referencyjna prostokata pola walki w stopniach na osi OX (dlugosc geograficzna). * @return */ public static int getDX_REF() { return DX_REF; } /** * Wysokosc referencyjna prostokata pola walki w stopniach na osi OY (szerokosc geograficzna). * @return */ public static int getDY_REF() { return DY_REF; } public static String getKwadratyDir() { return KWADRATY_DIR; } public static String getDrogiDir() { return DROGI_DIR; } /** * Dlugosci bokow malego kwadratu w milisekundach geograficznych po osi OX (dlugosc geograficzna). */ public static final double SS_DX_MS = DELTA_X * DEG_MS; /** * Dlugosci bokow malego kwadratu w milisekundach geograficznych po osi OY (szerokosc geograficzna). */ public static final double SS_DY_MS = DELTA_Y * DEG_MS; // wspolrzedne dolnego lewego rogu mapy w ms // wspolrzedne geograficzne w milisekundach zawieraja sie w zakresie: // 0 <= x < 360 dlugosc geograficzna // 0 <= y <= 180 szerokosc geograficzna public static final int X_REF_MS = X_REF * DEG_MS; public static final int Y_REF_MS = Y_REF * DEG_MS; public static final int DX_REF_MS = DEG_MS * DX_REF; // szerokosc pola walki w stopniach public static final int DY_REF_MS = DEG_MS * DY_REF; // wysokosc polwa walki w stopniach public static final int BS_DX_MS = (int) (BS_DX * DEG_MS); public static final int BS_DY_MS = (int) (BS_DY * DEG_MS); /** * Liczba malych kwadratow przypadajaca na bok arkusza mapy drogowej. */ public static final int SS_PER_SHEET = 20; }