OsmAnd/OsmAnd-java/src/net/osmand/map/RegionCountry.java
2013-11-11 01:46:38 +01:00

149 lines
No EOL
3.3 KiB
Java

package net.osmand.map;
import gnu.trove.list.array.TIntArrayList;
import java.util.ArrayList;
import java.util.List;
public class RegionCountry {
public String continentName;
public int left, right, top, bottom;
public boolean subregionsVerified = true;
public String name;
public RegionCountry parent;
private TIntArrayList singleTiles = new TIntArrayList();
private TIntArrayList boxTiles = new TIntArrayList();
private TIntArrayList allTiles;
private List<RegionCountry> regions = new ArrayList<RegionCountry>();
public TIntArrayList getSingleTiles() {
return singleTiles;
}
public TIntArrayList getBoxTiles() {
return boxTiles;
}
public String serializeTilesArray(){
StringBuilder bld = new StringBuilder();
for(int j = 0; j<boxTiles.size(); j+=4) {
if (j > 0) {
bld.append(";");
}
bld.append(boxTiles.get(j)).append(" ").append(boxTiles.get(j + 1));
bld.append(" x ");
bld.append(boxTiles.get(j + 2)).append(" ").append(boxTiles.get(j + 3));
}
for (int i = 0; i < singleTiles.size(); i += 2) {
if (i > 0 || boxTiles.size() > 0) {
bld.append(";");
}
bld.append(singleTiles.get(i)).append(" ").append(singleTiles.get(i + 1));
}
return bld.toString();
}
public String serializeFlatTilesArray(){
TIntArrayList tiles = calcAllTiles();
StringBuilder bld = new StringBuilder();
for (int i = 0; i < tiles.size(); i += 2) {
if (i > 0) {
bld.append(";");
}
bld.append(tiles.get(i)).append(" ").append(tiles.get(i + 1));
}
return bld.toString();
}
public void removeSingle(int x, int y) {
for (int i = 0; i < singleTiles.size(); i += 2) {
if (singleTiles.get(i) == x && singleTiles.get(i + 1) == y) {
singleTiles.removeAt(i);
singleTiles.removeAt(i);
break;
}
}
}
public void add(int xdeg, int ydeg) {
if (isEmpty()) {
left = right = xdeg;
top = bottom = ydeg;
}
left = Math.min(xdeg, left);
right = Math.max(xdeg, right);
bottom = Math.min(ydeg, bottom);
top = Math.max(ydeg, top);
singleTiles.add(xdeg);
singleTiles.add(ydeg);
allTiles = null;
}
public void add(int xleft, int ytop, int xright, int ybottom) {
if (isEmpty()) {
left = xleft;
right = xright;
top = ytop;
bottom = ybottom;
}
left = Math.min(xleft, left);
right = Math.max(xright, right);
bottom = Math.min(ybottom, bottom);
top = Math.max(ytop, top);
boxTiles.add(xleft);
boxTiles.add(ytop);
boxTiles.add(xright);
boxTiles.add(ybottom);
allTiles = null;
}
public boolean isEmpty() {
return singleTiles.size() == 0 && boxTiles.isEmpty();
}
public int getTileSize() {
calcAllTiles();
return allTiles.size() / 2;
}
protected TIntArrayList calcAllTiles() {
if (allTiles == null) {
allTiles = new TIntArrayList(singleTiles);
for (int k = 0; k < boxTiles.size(); k += 4) {
for (int x = boxTiles.get(k); x <= boxTiles.get(k + 2); x++) {
for (int y = boxTiles.get(k + 1); y >= boxTiles.get(k + 3); y--) {
allTiles.add(x);
allTiles.add(y);
}
}
}
}
return allTiles;
}
public int getLon(int i) {
return calcAllTiles().get(i * 2);
}
public int getLat(int i) {
return calcAllTiles().get(i * 2 + 1);
}
public void addSubregion(RegionCountry c) {
c.parent = this;
regions.add(c);
}
public List<RegionCountry> getSubRegions() {
return regions;
}
}