I am working on an application in which map zoom level set on the basis on seekbar move say
seekbar progress is 10 mile then calculate exact zoom level of map by which cover 10 mile distance on mobile screen map.more explanation in attached image
my seekbar initial position is 1 mile and max position is 50 miles when I move seekbar max position say 50 map cover only 30 km area while it should be cover 80 km area.I am using code for achieve this is -
private int zoomLevel(double _distance) {
int newzoomlevel = 1;
double distance = _distance * 1609.34;
double equatorLength = 40075004; // in meters
double widthInPixels = screenWidth();
double metersPerPixel = equatorLength / 256;
int zoomLevel = 1;
while ((metersPerPixel * widthInPixels) > distance) {
metersPerPixel /= 2;
++zoomLevel;
}
Log.i("current zoom level", "zoom level = " + zoomLevel);
if (zoomLevel <=19) {
newzoomlevel = zoomLevel;
} else {
newzoomlevel = zoomLevel - 2;
}
return newzoomlevel;
}
I am passing seekpar position as a parameter since it is in mile in method I convert it into meter by multiplying 1609.34. but my over all out come is not correct please any one guide me thanks in advance.