exclude some areas from collection
This commit is contained in:
parent
2ee44b7b85
commit
a3c3b1e17b
@ -26,16 +26,17 @@ public class AreaReader {
|
|||||||
int used = 0;
|
int used = 0;
|
||||||
for (int idxLat = -scale; idxLat <= scale; idxLat++) {
|
for (int idxLat = -scale; idxLat <= scale; idxLat++) {
|
||||||
for (int idxLon = -scale; idxLon <= scale; idxLon++) {
|
for (int idxLon = -scale; idxLon <= scale; idxLon++) {
|
||||||
|
if (ignoreCenter(maxscale, idxLon, idxLat)) continue;
|
||||||
int tmplon = wp.ilon + cellsize * idxLon;
|
int tmplon = wp.ilon + cellsize * idxLon;
|
||||||
int tmplat = wp.ilat + cellsize * idxLat;
|
int tmplat = wp.ilat + cellsize * idxLat;
|
||||||
if (getDirectData(tmplon, tmplat, rc, expctxWay, searchRect, ais)) used++;
|
if (getDirectData(tmplon, tmplat, rc, expctxWay, searchRect, ais, maxscale > 7)) used++;
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean getDirectData(int inlon, int inlat, RoutingContext rc, BExpressionContextWay expctxWay, OsmNogoPolygon searchRect, List<AreaInfo> ais) {
|
public boolean getDirectData(int inlon, int inlat, RoutingContext rc, BExpressionContextWay expctxWay, OsmNogoPolygon searchRect, List<AreaInfo> ais, boolean checkBorder) {
|
||||||
int lonDegree = inlon / 1000000;
|
int lonDegree = inlon / 1000000;
|
||||||
int latDegree = inlat / 1000000;
|
int latDegree = inlat / 1000000;
|
||||||
int lonMod5 = (int) lonDegree % 5;
|
int lonMod5 = (int) lonDegree % 5;
|
||||||
@ -96,7 +97,13 @@ public class AreaReader {
|
|||||||
tmplat2 = lat + cellsize * (subLatIdx + 1);
|
tmplat2 = lat + cellsize * (subLatIdx + 1);
|
||||||
dataRect.addVertex(tmplon2, tmplat2);
|
dataRect.addVertex(tmplon2, tmplat2);
|
||||||
|
|
||||||
boolean intersects = searchRect.intersects(dataRect.points.get(0).x, dataRect.points.get(0).y, dataRect.points.get(2).x, dataRect.points.get(2).y);
|
// check for quadrant border
|
||||||
|
boolean intersects = checkBorder && dataRect.intersects(searchRect.points.get(0).x, searchRect.points.get(0).y, searchRect.points.get(2).x, searchRect.points.get(2).y);
|
||||||
|
if (!intersects && checkBorder) intersects = dataRect.intersects(searchRect.points.get(1).x, searchRect.points.get(1).y, searchRect.points.get(2).x, searchRect.points.get(3).y);
|
||||||
|
if (intersects) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
intersects = searchRect.intersects(dataRect.points.get(0).x, dataRect.points.get(0).y, dataRect.points.get(2).x, dataRect.points.get(2).y);
|
||||||
if (!intersects)
|
if (!intersects)
|
||||||
intersects = searchRect.intersects(dataRect.points.get(1).x, dataRect.points.get(1).y, dataRect.points.get(3).x, dataRect.points.get(3).y);
|
intersects = searchRect.intersects(dataRect.points.get(1).x, dataRect.points.get(1).y, dataRect.points.get(3).x, dataRect.points.get(3).y);
|
||||||
if (!intersects)
|
if (!intersects)
|
||||||
@ -151,6 +158,14 @@ public class AreaReader {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean ignoreCenter(int maxscale, int idxLon, int idxLat) {
|
||||||
|
int centerScale = (int) Math.round(maxscale * .2) -1;
|
||||||
|
if (centerScale < 0) return false;
|
||||||
|
if (idxLon >= -centerScale && idxLon <= centerScale &&
|
||||||
|
idxLat >= -centerScale && idxLat <= centerScale) return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
in this case the polygon is 'only' a rectangle
|
in this case the polygon is 'only' a rectangle
|
||||||
*/
|
*/
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user