Так вот как вы это делаете ...
Jedil правильно вы должны найти свою ширину экрана/высоту, точки на дюйм экрана и т.д. Таким образом, глядя через this old osmdroid источник I Сорт выяснял это:
//Get the x and y dpi
this.xdpi = this.context.getResources().getDisplayMetrics().xdpi;
this.ydpi = this.context.getResources().getDisplayMetrics().ydpi;
//Get the screen width/height
this.screenWidth = this.context.getResources().getDisplayMetrics().widthPixels;
this.screenHeight = this.context.getResources().getDisplayMetrics().heightPixels;
// DPI corrections for specific models
String manufacturer = null;
try {
final Field field = android.os.Build.class.getField("MANUFACTURER");
manufacturer = (String) field.get(null);
} catch (final Exception ignore) {
}
if ("motorola".equals(manufacturer) && "DROIDX".equals(android.os.Build.MODEL)) {
// If the screen is rotated, flip the x and y dpi values
WindowManager windowManager = (WindowManager) this.context
.getSystemService(Context.WINDOW_SERVICE);
if (windowManager.getDefaultDisplay().getOrientation() > 0) {
this.xdpi = (float) (this.screenWidth/3.75);
this.ydpi = (float) (this.screenHeight/2.1);
} else {
this.xdpi = (float) (this.screenWidth/2.1);
this.ydpi = (float) (this.screenHeight/3.75);
}
} else if ("motorola".equals(manufacturer) && "Droid".equals(android.os.Build.MODEL)) {
// http://www.mail-archive.com/[email protected]/msg109497.html
this.xdpi = 264;
this.ydpi = 264;
}
// set default max length to 1 inch
maxLength = 2.54f;
Вот как вы получаете «константы» (по крайней мере, в глазах устройства). Для того, чтобы преобразовать ...
// calculate dots per centimeter
int xdpcm = (int) ((float) xdpi/2.54);
int ydpcm = (int) ((float) ydpi/2.54);
// get length in pixel
int xLen = (int) (maxLength * xdpcm);
int yLen = (int) (maxLength * ydpcm);
// Two points, xLen apart, at scale bar screen location
IGeoPoint p1 = projection.fromPixels((screenWidth/2) - (xLen/2), yOffset);
IGeoPoint p2 = projection.fromPixels((screenWidth/2) + (xLen/2), yOffset);
// get distance in meters between points
final int xMeters = ((GeoPoint) p1).distanceTo(p2);
... и это похоже, если не почти идентичны, независимо от того, чтобы получить yMeters (подсказка: используйте ScreenHeight).
Понятно, что я не совсем уверен в том, что делают линии IGeoPoint...
, но я понимаю, что преобразование есть. Надеясь, что это поможет кому-то в будущем. Для лучшего понимания приведенного выше кода см. Ссылку, которую я опубликовал.
На самом деле, я сортирую следующее [это] (https://code.google.com/p/osmdroid/source/browse/trunk/osmdroid-android/src/main/java/org/osmdroid/views/ overlay/ScaleBarOverlay.java? r = 1152) прямо сейчас, и я думаю, что это решение моей проблемы ... Я обновлю этот поток, когда/если я его выясню. – Matt