2016-04-14 5 views
1

Ich versuche, ein Bild auf eine Google Map mit dem Google Maps Android API v2 hinzuzufügen:GoogleMap Ground: Squeeze Bild zu vier LatLngBounds

mMap = googleMap; 
LatLng sw = new LatLng(47.01377857060625, 8.305519705172628); 
LatLng ne = new LatLng(47.01395211967171, 8.306270482717082); 
LatLng nw = new LatLng(47.014014755501165, 8.305559697328135); 
LatLng se = new LatLng(47.01370751919609, 8.306236284552142); 
LatLngBounds latLngBounds = new LatLngBounds(sw, ne).including(nw).including(se); 
GroundOverlayOptions groundOverlayOptions = new GroundOverlayOptions(); 
BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromAsset("t2c.png"); 
groundOverlayOptions.image(bitmapDescriptor); 
groundOverlayOptions.positionFromBounds(latLngBounds); 
mMap.addGroundOverlay(groundOverlayOptions); 

Leider ist die LatLng Werte sind nicht zu 100% korrekt, so Das Hintergrundbild dreht sich nicht, ist aber nach Google verzerrt:

Wenn die Ränder nicht dem ursprünglichen Seitenverhältnis entsprechen, wird das Bild verzerrt.

Mit nur LatLngsw und ne:

https://developers.google.com/maps/documentation/android-api/groundoverlay#use_latlngbounds_to_position_an_image

With two LatLng

Ich weiß nicht, wie ich sollte die genaueLatLng von Süd-West, um herauszufinden, der Lage sein, und nordöstlich, also interessiert mich eine Möglichkeit, ein Polygon zu definieren und das Bild irgendwie mit den vier 012 hineinzuquetschenals Anker. Die Verwendung von vier LatLng sieht derzeit so aus. Mit LatLngsw, ne, nw und se:

With four LatLng

Antwort

0

Sie nie erreichen, was Sie wollen LatLngBounds verwenden, weil Sie Ihre Ground zu drehen versuchen.

Was Sie tun müssen, ist Lager (Rotation) und Breite/Höhe der Boden-Overlay zu verwenden. Lassen Sie uns sagen, Ihr Gebäude in -20 Grad gedreht und hat eine Breite von 40-20 (nur Sie kennen diese Werte. 1- Holen Sie sich die LatLng der Mitte des Gebäudes, die das Zentrum der vier Koordinaten in Ihrem findet Code oben. Dieser Wert wird Ihre „centerLocation“

GroundOverlayOptions groundOverlayOptions = new GroundOverlayOptions(); 
BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromAsset("t2c.png"); 
groundOverlayOptions.image(bitmapDescriptor); 
groundOverlayOptions.position(centerLocation,widthInMeters,heightInMeters); 
groundOverlayOptions.bearing(rotated);//the value is clockwise and rotation is about anchor point (which should be by default 0.5,0.5 of your image 
mMap.addGroundOverlay(groundOverlayOptions); 

Dies sollte funktionieren, werden offensichtlich müssen Sie Werte berechnen oder unterschiedliche Werte versuchen, Schritt für Schritt gehen.

Hoffe, es

+0

hilft es hilft Vielleicht weißt du, ob es eine Möglichkeit gibt, auf die Punkte zu verweisen Bild ohne GPS LongLat? Nehmen wir an, ich möchte etwas über mein Bild an den Pixelkoordinaten x = 35/y = 54 zeichnen. aber da das Bild schon gedreht wurde ('Bearing'), weiß ich nicht mehr, wie ich diese Punkte referenzieren soll. – user3105453

+0

Ja, Sie müssen relativ-absolute Transformation machen. Normalerweise sollten Sie ein Punktpaar (oben links, unten rechts) in beiden Koordinatensystemen auswählen und die Formel finden, aber in einem Kommentar ist es ziemlich komplex, Sie sollten eine neue Frage öffnen –