Я решил это сам. Я думаю, что документация Google не очень ясна. В нем говорится, что GroundOverlay можно расположить с помощью двух возможных способов:
Есть два способа указать положение основного наложения: Используя LatLng центрировать накладку, и размеры в метрах, чтобы указать размер изображение. Использование LatLngBounds для указания северо-восточного и юго-западного углов изображения. Перед добавлением на карту необходимо указать положение наложения на землю.
Я использовал второй способ или предоставил ему два гео-угла изображения, которые я хотел применить. Неясно, что со вторым методом вращение невозможно, и каждый Несоответствие пропорции будет отображаться с искаженным изображением. На самом деле идея, которую я имел, была именно такой, что, учитывая две точки на равнине, у нас есть ровно одно изображение, которое может соответствовать этим двум точкам без разрыва, но просто вращаясь, я был разочарован, обнаружив, что это не работает.
Однако, если у вас есть достаточно терпения, чтобы вычислить ваш собственный размер в метрах и вращения вашего изображения, вы можете определить один угол, или центр изображения, и использовать первый метод, с помощью LatLng и явно укажите якорь, например (0, 0) для верхнего левого угла или (0,5, 0,5) для центра, высоту изображения в метрах (вот хороший способ его найти: How to convert latitude or longitude to meters?), найдите поворот, используя тригонометрия, и все.
Способ размещения изображения в пикселях here.
Вот мой окончательный код, для памяти:
BitmapFactory.Options dimensions = new BitmapFactory.Options();
dimensions.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(), imgRes, dimensions);
int imgHeightPixels = dimensions.outHeight;
GroundOverlayOptions goo = new GroundOverlayOptions()
.image(BitmapDescriptorFactory.fromResource(imgRes))
.position(imgBottomLeftCorner, imgHeightInPixels)
.anchor(0, 1)
.bearing(imgRotation);
mMap.addGroundOverlay(goo);
Смотрите, что Y координаты на карте растут снизу вверх, в то время как на изображении растут сверху вниз, так что якорь (0,1).
Учитывая два вектора, вот что я сделал, чтобы найти свой угол, и, следовательно, поворот изображения (с использованием вектора из двух координат точек на изображении по сравнению с вектором из тех же двух точек с географическими координатами):
private static double calcDistance(double x1, double y1, double x2, double y2) {
return (Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1)));
}
private static double calcVectorRotation(double x1, double y1, double x2, double y2) {
return Math.asin((y1-y2)/calcDistance(x1, y1, x2, y2));
}
Настоящая проблема заключалась в том, что вращение не включается при использовании этого метода, спасибо вам в любом случае. –