243 lines
7.8 KiB
Java
243 lines
7.8 KiB
Java
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: <p>
|
|
* Długość geograficzna (wsp. X) przyjmuje wartości: [0, 360) odpowiadające [-180, 180]<p>
|
|
* 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: <p>
|
|
* Długość geograficzna (wsp. X) przyjmuje wartości: [0, 360) odpowiadające [-180, 180]<p>
|
|
* 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;
|
|
|
|
|
|
}
|