package pl.wat.ms4ds.terenfunkcje; import pl.wat.ms4ds.common.EGeoDirection; public class Kwadrat { public static final Kwadrat EMPTY_SQUARE = new Kwadrat(null, 0.0f, 0.0f, 0.0f, 0.0f, 200, 0, new boolean[8], new boolean[8], new boolean[8]); float stopienZabudowy; float stopienZalesienia; float stopienZawodnienia; float stopienZabagnienia; boolean jestDroga[]; boolean jestRow[]; boolean jestPrzeszkodaWodna[]; int roznicaWzniesien; int wysokoscSrednia; /** * The height above the level of the sea. */ short elevation; /** * 0 - BARE_GROUND * 1 - GRASS * 2 - SWAMP * 3 - WATER * 4 - SCRUB, BUSHES * 5 - BUILDINGS * 6 - FOREST */ short terrainType; /** * Rodzaj drogi na danym kierunku. * 0 - no road, 1 - small roads, 2 - minor roads, 3 - major roads */ byte[] roads; /** * Rodzaj przeszkody wodnej na danym kierunku. * 0 - no watercourse, 1 - drain, ditch, 2 - canal, stream, 3 - river */ byte[] waterWays; transient RightBigSquare bs; public float getStopienZabudowy() { return stopienZabudowy; } public float getStopienZalesienia() { return stopienZalesienia; } public float getStopienZawodnienia() { return stopienZawodnienia; } public float getStopienZabagnienia() { return stopienZabagnienia; } public int getRoznicaWzniesien() { return roznicaWzniesien; } public int getWysokoscSrednia() { return wysokoscSrednia; } public boolean[] getJestDroga() { return jestDroga; } public boolean jestOdcinekDrogi() { for (int i = 0; i < 8; i++) { if (jestDroga[i]) return true; } return false; } public boolean getJestDroga(EGeoDirection naKierunku) { if (naKierunku == EGeoDirection.UNDEFINED) { return false; } return jestDroga[naKierunku.id]; } public boolean[] getJestRow() { return jestRow; } public boolean[] getJestPrzeszkodaWodna() { return jestPrzeszkodaWodna; } public void setStopienZabudowy(float stopienZabudowy) { this.stopienZabudowy = stopienZabudowy; normalizujDanePokrycia(); // try { // if (null != bs) { // bs.updateFile(false); // } // } catch (IOException e) { // } } public void setStopienZalesienia(float stopienZalesienia) { this.stopienZalesienia = stopienZalesienia; normalizujDanePokrycia(); // try { // if (null != bs) { // bs.updateFile(false); // } // } catch (IOException e) { // } } public void setStopienZawodnienia(float stopienZawodnienia) { this.stopienZawodnienia = stopienZawodnienia; normalizujDanePokrycia(); // try { // if (null != bs) { // bs.updateFile(false); // } // } catch (IOException e) { // } } public void setStopienZabagnienia(float stopienZabagnienia) { this.stopienZabagnienia = stopienZabagnienia; normalizujDanePokrycia(); // try { // if (null != bs) { // bs.updateFile(false); // } // } catch (IOException e) { // } } public void normalizujDanePokrycia() { float suma = stopienZalesienia + stopienZawodnienia + stopienZabudowy + stopienZabagnienia; if (suma > 1.0f) { stopienZalesienia /= suma; stopienZawodnienia /= suma; stopienZabudowy /= suma; stopienZabagnienia = 1.0f - stopienZalesienia - stopienZawodnienia - stopienZabudowy; } } public void setRoznicaWzniesien(int roznicaWzniesien) { this.roznicaWzniesien = roznicaWzniesien; // try { // if (null != bs) { // bs.updateFile(false); // } // } catch (IOException e) { // } } public void setWysokoscSrednia(int wysokoscSrednia) { this.wysokoscSrednia = wysokoscSrednia; // try { // if (null != bs) { // bs.updateFile(false); // } // } catch (IOException e) { // } } public void setJestDroga(boolean[] czyJestDroga) { this.jestDroga = czyJestDroga; // try { // if (null != bs) { // bs.updateFile(false); // } // } catch (IOException e) { // } } public void setJestDroga(EGeoDirection naKierunku, boolean czyJest) { if (naKierunku == EGeoDirection.UNDEFINED) { return; } this.jestDroga[naKierunku.id] = czyJest; // try { // if (null != bs) { // bs.updateFile(false); // } // } catch (IOException e) { // } } public void setJestPrzeszkodaWodna(EGeoDirection naKierunku, boolean czyJest) { if (naKierunku == EGeoDirection.UNDEFINED) { return; } this.jestPrzeszkodaWodna[naKierunku.id] = czyJest; // try { // if (null != bs) { // bs.updateFile(false); // } // } catch (IOException e) { // } } public void setJestRow(EGeoDirection naKierunku, boolean czyJest) { if (naKierunku == EGeoDirection.UNDEFINED) { return; } this.jestRow[naKierunku.id] = czyJest; // try { // if (null != bs) { // bs.updateFile(false); // } // } catch (IOException e) { // } } public void setJestRow(boolean[] czyJestRow) { this.jestRow = czyJestRow; // try { // if (null != bs) { // bs.updateFile(false); // } // } catch (IOException e) { // } } public void setJestPrzeszkodaWodna(boolean[] czyJestPrzeszkodaWodna) { this.jestPrzeszkodaWodna = czyJestPrzeszkodaWodna; // try { // if (null != bs) { // bs.updateFile(false); // } // } catch (IOException e) { // } } public float getStopienPofaldowania() { // TODO: dodac do normatywow w klasie Teren (parametr kalibracyjny) float stopienPofaldowania = 0.0f; if (this.roznicaWzniesien >= 50) stopienPofaldowania = 1.0f; else if (this.roznicaWzniesien >= 10) stopienPofaldowania = 0.6f; else if (this.roznicaWzniesien >= 5) stopienPofaldowania = 0.4f; else if (this.roznicaWzniesien >= 3) stopienPofaldowania = 0.2f; return stopienPofaldowania; } public Kwadrat() { jestDroga = new boolean[8]; jestPrzeszkodaWodna = new boolean[8]; jestRow = new boolean[8]; } public Kwadrat(RightBigSquare _bs, float _stopienZabudowy, float _stopienZalesienia, float _stopienZabagnienia, float _stopienZawodnienia, int _wysokoscSrednia, int _roznicaWzniesien, boolean _czyJestDroga[], boolean _czyJestRow[], boolean _czyJestPrzeszkodaWodna[]){ bs = _bs; stopienZabudowy = _stopienZabudowy; stopienZalesienia = _stopienZalesienia; stopienZabagnienia = _stopienZabagnienia; stopienZawodnienia = _stopienZawodnienia; wysokoscSrednia = _wysokoscSrednia; roznicaWzniesien = _roznicaWzniesien; jestDroga = new boolean[8]; jestRow = new boolean[8]; jestPrzeszkodaWodna = new boolean[8]; for (int i = 0; i < _czyJestDroga.length; i++) { jestDroga[i]=_czyJestDroga[i]; } for (int i = 0; i < jestRow.length; i++) { jestRow[i]=_czyJestRow[i]; } for (int i = 0; i < _czyJestPrzeszkodaWodna.length; i++) { jestPrzeszkodaWodna[i]=_czyJestPrzeszkodaWodna[i]; } } public String toString() { float f = this.stopienZabudowy * 255.0f; int hex = (int)f; String s = String.format("%02X", hex); String linia = s; linia += " "; f = this.stopienZalesienia * 255.0f; hex = (int)f; s = String.format("%02X", hex); linia += s; linia += " "; f = this.stopienZabagnienia * 255.0f; hex = (int)f; s = String.format("%02X", hex); linia += s; linia += " "; f = this.stopienZawodnienia * 255.0f; hex = (int)f; s = String.format("%02X", hex); linia += s; linia += " "; s = String.format("%4d", this.wysokoscSrednia); linia += s; linia += " "; s = String.format("%4d", this.roznicaWzniesien); linia += s; linia += " "; int bity = 0; int bit_1 = 1; for (int i = 0; i < this.jestDroga.length; i++) { if (this.jestDroga[i]) // jest odcinek drogi na tym kierunku bity += bit_1; bit_1 = bit_1 << 1; } s = String.format("%02X", bity); linia += s; linia += " "; bity = 0; bit_1 = 1; for (int i = 0; i < this.jestPrzeszkodaWodna.length; i++) { if (this.jestPrzeszkodaWodna[i]) // jest przeszkod na tym kierunku bity += bit_1; bit_1 = bit_1 << 1; } s = String.format("%02X", bity); linia += s; linia += " "; bity = 0; bit_1 = 1; for (int i = 0; i < this.jestRow.length; i++) { if (this.jestRow[i]) // jest row na tym kierunku bity += bit_1; bit_1 = bit_1 << 1; } s = String.format("%02X", bity); linia += s; return linia; } }