Ich versuche nur, eine grundlegende Frage zur Android-Navigation zu verstehen, nämlich "Wie kann ich den aktuellen Standort anzeigen?". Ich habe ein wenig Code aus Artikeln und Tutorials aus meinen langen Google-Sitzungen verwendet. Die Anzeige einer einfachen Überlagerung (Kreis + Textnachricht) funktioniert, allerdings bei einer falschen Bildschirmposition (scheinbar am Äquator).Aktueller Standort wird unter falschen Bildschirmkoordinaten angezeigt
Mein Code Setup enthält eine kleine innere Klasse, die implements LocationListener
und seine onLocationChanged
Event-Handler ruft diese Methode:
protected void createAndShowCustomOverlay(Location newLocation)
{
double lat = newLocation.getLatitude();
double lng = newLocation.getLongitude();
// geoPointFromLatLng is an E6 converter :
// return new GeoPoint((int) (pLat * 1E6), (int) (pLng * 1E6));
GeoPoint geopoint = GeoFunctions.geoPointFromLatLng(lat, lng);
CustomOverlay overlay = new CustomOverlay(geopoint);
mapView.getOverlays().add(overlay);
mapView.getController().animateTo(geopoint);
mapView.postInvalidate();
}
Bis zu diesem Punkt, es sieht alles ok, ich habe gedebuggt um und die Nicht- Das transformierte Lat/lng-Paar ist in Ordnung, die E6-Variante davon ist ebenfalls in Ordnung. Hier ist die CustomOverlay Klasse:
public class CustomOverlay extends Overlay
{
private static final int CIRCLERADIUS = 2;
private GeoPoint geopoint;
public CustomOverlay(GeoPoint point)
{
geopoint = point;
}
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow)
{
// Transfrom geoposition to Point on canvas
Projection projection = mapView.getProjection();
Point point = new Point();
projection.toPixels(geopoint, point);
// background
Paint background = new Paint();
background.setColor(Color.WHITE);
RectF rect = new RectF();
rect.set(point.x + 2 * CIRCLERADIUS, point.y - 4 * CIRCLERADIUS,
point.x + 90, point.y + 12);
// text "My Location"
Paint text = new Paint();
text.setAntiAlias(true);
text.setColor(Color.BLUE);
text.setTextSize(12);
text.setTypeface(Typeface.MONOSPACE);
// the circle to mark the spot
Paint circle = new Paint();
circle.setColor(Color.BLUE);
circle.setAntiAlias(true);
canvas.drawRoundRect(rect, 2, 2, background);
canvas.drawCircle(point.x, point.y, CIRCLERADIUS, circle);
canvas.drawText("My Location", point.x + 3 * CIRCLERADIUS, point.y + 3
* CIRCLERADIUS, text);
}
}
Es ist definitiv ein Projektionsfehler der Art, da alle meine geo fix'd coords auf dem Äquator am Ende, so gibt es einige 0.0 Werte um geworfen zu werden.
Ich kann andere Details zur Verfügung stellen, wenn ich Code auf dem Emulator, Google Maps API Level 8 (Android 2.2) ausführen und ich bekomme Kacheln und das CustomOverlay (Kreis + Text) wird angezeigt, nur zu einem wirklich falschen Position (Coords wie 54.foo und 8.bar sind weit weg).
Die Codebase könnte etwas älter sein, dann wird vielleicht eine Projektion wie toPixels
nicht mehr benötigt? Keine Ahnung.
Vielen Dank im Voraus!
Ich habe das schon mal probiert, danke für die Eingabe. In welchem Format muss ich die Coords einreichen? Ich denke, das Senden der falsch formatierten Koordinaten war mein Problem, alle lat/lng Paare, die ich gesehen habe, haben normalerweise einen negativen Lat-Wert (z. B. geo fix -82.411629 28.054553), warum ist das? – Dr1Ku
Yeah stellt sich heraus, dass Sie sie telnet, verwenden die eingebauten Sachen von Eclipse nicht so gute Ergebnisse. Es funktioniert mit überarbeiteten und korrekt eingegebenen Lat/Ing-Paaren. Danke noch einmal ! – Dr1Ku
Oh, wow sachlich geo fix will (lng, lat), nicht (lat, lng) - so wie fast jede geo-bezogene App Coords behandelt. – Dr1Ku