Merge remote-tracking branch 'origin/master'

This commit is contained in:
Weblate 2016-11-04 19:45:21 +01:00
commit 59fddcfb1f
3 changed files with 58 additions and 14 deletions

View file

@ -30,6 +30,7 @@ import net.osmand.binary.BinaryMapIndexReader.TagValuePair;
import net.osmand.data.LatLon; import net.osmand.data.LatLon;
import net.osmand.data.QuadRect; import net.osmand.data.QuadRect;
import net.osmand.data.QuadTree; import net.osmand.data.QuadTree;
import net.osmand.osm.edit.Node;
import net.osmand.util.Algorithms; import net.osmand.util.Algorithms;
import net.osmand.util.MapAlgorithms; import net.osmand.util.MapAlgorithms;
import net.osmand.util.MapUtils; import net.osmand.util.MapUtils;
@ -238,6 +239,20 @@ public class OsmandRegions {
return false; return false;
} }
public static double getArea(BinaryMapDataObject bo) {
double area = 0.0;
if (bo.getPointsLength() > 0) {
for (int i = 1; i < bo.getPointsLength(); i++) {
double ax = bo.getPoint31XTile(i - 1);
double bx = bo.getPoint31XTile(i);
double ay = bo.getPoint31YTile(i - 1);
double by = bo.getPoint31YTile(i);
area += (bx + ax) * (by - ay) / 1.631E10;
}
}
return Math.abs(area);
}
private List<BinaryMapDataObject> getCountries(int tile31x, int tile31y) { private List<BinaryMapDataObject> getCountries(int tile31x, int tile31y) {
HashSet<String> set = new HashSet<String>(quadTree.queryInBox(new QuadRect(tile31x, tile31y, tile31x, tile31y), HashSet<String> set = new HashSet<String>(quadTree.queryInBox(new QuadRect(tile31x, tile31y, tile31x, tile31y),
new ArrayList<String>())); new ArrayList<String>()));

View file

@ -1,14 +1,16 @@
package net.osmand.plus.mapcontextmenu; package net.osmand.plus.mapcontextmenu;
import java.io.IOException; import android.graphics.drawable.Drawable;
import java.util.Iterator; import android.support.annotation.NonNull;
import java.util.LinkedList; import android.view.View;
import java.util.List; import android.view.View.OnClickListener;
import android.widget.LinearLayout;
import net.osmand.IndexConstants; import net.osmand.IndexConstants;
import net.osmand.NativeLibrary;
import net.osmand.NativeLibrary.RenderedObject; import net.osmand.NativeLibrary.RenderedObject;
import net.osmand.binary.BinaryMapDataObject; import net.osmand.binary.BinaryMapDataObject;
import net.osmand.binary.BinaryMapIndexReader;
import net.osmand.binary.BinaryMapIndexReader.TagValuePair;
import net.osmand.binary.RouteDataObject; import net.osmand.binary.RouteDataObject;
import net.osmand.data.Amenity; import net.osmand.data.Amenity;
import net.osmand.data.FavouritePoint; import net.osmand.data.FavouritePoint;
@ -60,11 +62,11 @@ import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarControll
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarControllerType; import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarControllerType;
import net.osmand.util.Algorithms; import net.osmand.util.Algorithms;
import net.osmand.util.MapUtils; import net.osmand.util.MapUtils;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull; import java.io.IOException;
import android.view.View; import java.util.Iterator;
import android.view.View.OnClickListener; import java.util.LinkedList;
import android.widget.LinearLayout; import java.util.List;
public abstract class MenuController extends BaseMenuController { public abstract class MenuController extends BaseMenuController {
@ -520,11 +522,22 @@ public abstract class MenuController extends BaseMenuController {
Iterator<BinaryMapDataObject> it = mapDataObjects.iterator(); Iterator<BinaryMapDataObject> it = mapDataObjects.iterator();
while (it.hasNext()) { while (it.hasNext()) {
BinaryMapDataObject o = it.next(); BinaryMapDataObject o = it.next();
if (!osmandRegions.contain(o, point31x, point31y)) { if (o.getTypes() != null) {
it.remove(); boolean isRegion = true;
for (int i = 0; i < o.getTypes().length; i++) {
TagValuePair tp = o.getMapIndex().decodeType(o.getTypes()[i]);
if ("boundary".equals(tp.value)) {
isRegion = false;
break;
}
}
if (!isRegion || !osmandRegions.contain(o, point31x, point31y)) {
it.remove();
}
} }
} }
String selectedFullName = ""; String selectedFullName = "";
double smallestArea = -1;
for (BinaryMapDataObject o : mapDataObjects) { for (BinaryMapDataObject o : mapDataObjects) {
boolean downloaded = checkIfObjectDownloaded(rm, osmandRegions.getDownloadName(o)); boolean downloaded = checkIfObjectDownloaded(rm, osmandRegions.getDownloadName(o));
if (downloaded) { if (downloaded) {
@ -532,7 +545,13 @@ public abstract class MenuController extends BaseMenuController {
break; break;
} else { } else {
String fullName = osmandRegions.getFullName(o); String fullName = osmandRegions.getFullName(o);
if (fullName.length() > selectedFullName.length()) { double area = OsmandRegions.getArea(o);
if (smallestArea == -1) {
smallestArea = area;
selectedFullName = fullName;
downloadMapDataObject = o;
} else if (area < smallestArea) {
smallestArea = area;
selectedFullName = fullName; selectedFullName = fullName;
downloadMapDataObject = o; downloadMapDataObject = o;
} }

View file

@ -13,6 +13,8 @@ import android.util.DisplayMetrics;
import android.view.WindowManager; import android.view.WindowManager;
import net.osmand.IndexConstants; import net.osmand.IndexConstants;
import net.osmand.binary.BinaryMapDataObject; import net.osmand.binary.BinaryMapDataObject;
import net.osmand.binary.BinaryMapIndexReader;
import net.osmand.binary.BinaryMapIndexReader.TagValuePair;
import net.osmand.data.LatLon; import net.osmand.data.LatLon;
import net.osmand.data.PointDescription; import net.osmand.data.PointDescription;
import net.osmand.data.RotatedTileBox; import net.osmand.data.RotatedTileBox;
@ -468,7 +470,15 @@ public class DownloadedRegionsLayer extends OsmandMapLayer implements IContextMe
Iterator<BinaryMapDataObject> it = result.iterator(); Iterator<BinaryMapDataObject> it = result.iterator();
while (it.hasNext()) { while (it.hasNext()) {
BinaryMapDataObject o = it.next(); BinaryMapDataObject o = it.next();
if (!osmandRegions.contain(o, point31x, point31y) ) { boolean isRegion = true;
for (int i = 0; i < o.getTypes().length; i++) {
TagValuePair tp = o.getMapIndex().decodeType(o.getTypes()[i]);
if ("boundary".equals(tp.value)) {
isRegion = false;
break;
}
}
if (!isRegion || !osmandRegions.contain(o, point31x, point31y) ) {
it.remove(); it.remove();
} }
} }