Похоже, что вы хотите нанести текущее географическое местоположение пользователя на изображение, скажем, здания или кампуса. Исходя из этого, мой подход заключается в том, чтобы «отобразить» неподвижное изображение на экране, что, вероятно, потребует преобразования преобразования, преобразования вращения и преобразования масштабирования. Кроме того, вам нужно знать фактические координаты географического местоположения как минимум двух точек на вашем изображении. Учитывая изображение в вашем предыдущем посте, я бы предположил, что у вас есть географические координаты нижнего левого угла и нижнего правого угла. У вас уже есть информация для преобразования географической координаты в экранную координату, чтобы изображение можно было нарисовать в соответствии с нижним левым углом изображения с вычисленной вами пиксельной координатой. Я буду называть эту точку вашей точкой привязки.
На этом этапе у вас, вероятно, есть изображение с одним углом в правильном месте, но теперь его нужно уменьшить или увеличить, а затем повернуть вокруг точки привязки. Вы можете получить текущий уровень масштабирования из вашего mapView, или вы можете получить latitudeSpan, и вы можете рассчитать масштабный коэффициент, который будет применен к вашему изображению.
Наконец, если у вас есть географические координаты двух углов изображения, вы можете рассчитать угол поворота изображения. Это можно рассчитать с помощью Пифагора или вы можете преобразовать из декартовых координат в полярные координаты см. Здесь . Это вычисление не должно выполняться вашим приложением - его можно рассчитать отдельно и ввести как константу. Теперь вы можете применить преобразование поворота вокруг неподвижной точки крепления.
Вы также можете использовать удобные встроенные функции, такие как mapController.zoomInFixing (), которая принимает пиксельные координаты или одну из других функций zoomTo () или animateTo ().
Редактировать: Если вы не используете вид карты для управления своими гео-координатами, тогда вы можете применить преобразования изображения, используя такой код:
// create a matrix for the manipulation
Matrix matrix = new Matrix();
// resize the bit map
matrix.postScale(scaleWidth, scaleHeight);
// rotate the Bitmap
matrix.postRotate(angle);
// recreate the new Bitmap
Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0,
width, height, matrix, true);
// make a Drawable from Bitmap to allow to set the BitMap
// to the ImageView, ImageButton or what ever
BitmapDrawable bmd = new BitmapDrawable(resizedBitmap);
ImageView imageView = new ImageView(this);
// set the Drawable on the ImageView
imageView.setImageDrawable(bmd);
Редактировать: Используя верхнюю левую и нижнюю правую координаты, вы можете рассчитать угол следующим образом:
angle = sin-1 ((right.x - left.y) / sqrt ((right.x - left.x) sq + (right.y - left.y) sq))
[где sqrt = квадратный корень; кв = квадрат