/ / Aktueller Standort wird bei falschen Koordinaten auf dem Bildschirm angezeigt - Android, Google-Maps

Der aktuelle Standort wird unter falschen Koordinaten auf dem Bildschirm angezeigt - Android, Google Maps

Ich versuche nur, ein grundlegendes Android zu verstehenFrage zur Navigation, nämlich "Wie kann ich den aktuellen Standort anzeigen". Ich habe etwas Code aus Artikeln und Tutorials aus meinen langen Googling-Sitzungen verwendet. Die Anzeige einer einfachen Überlagerung (Kreis + Textnachricht) funktioniert, ist jedoch an einer falschen Position auf dem Bildschirm (anscheinend auf dem Equator).

Mein Code-Setup enthält eine kleine innere Klasse implements LocationListener, und sein onLocationChanged Eventhandler ruft diese Methode auf:

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 sieht alles in Ordnung aus, ich habe ein wenig herumgeprüft und das nicht-transformierte lat / lng-Paar ist in Ordnung, die E6-Variante davon in Ordnung.

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, da alle meine geografischen Koordinaten auf dem Äquator landen.

Ich kann bei Bedarf weitere Details angebenWenn Sie den Code auf dem Emulator ausführen, werden Maps API Level 8 (Android 2.2) und ich bekomme Kacheln und das CustomOverlay (Kreis + Text) wird nur an einer wirklich falschen Position angezeigt (Koordinaten wie 54.foo und 8.bar sind weit weg ).

Die Codebase könnte etwas älter sein, dann vielleicht eine Projektion wie toPixels ist es nicht mehr erforderlich? Keine Ahnung.

Danke im Voraus !

Antworten:

1 für die Antwort № 1

Gelöst, stellt sich heraus, dass der über Telnet gesendete "Geo Fix" -Befehl ein (Lng, Lat) -Paar und kein (Lat, Lng) -Paar wünscht. Inkonsistenz vom Feinsten! Danke für die Eingabe.


0 für die Antwort № 2

Wenn Sie nur den aktuellen Standort anzeigen und ihn mit einem kleinen blinkenden Kreis auf dem Bildschirm aktualisieren möchten, wie dies bei Google Maps für Android der Fall ist, verfügt Android über eine Standardimplementierung dieser Funktion.

    MyLocationOverlay myLocationOverlay = new MyLocationOverlay(context, mapView);
myLocationOverlay.enableMyLocation();
mapView.getOverlays().add(myLocationOverlay);

Das wird Android alles erledigen.