/ / Localização atual exibida em coordenadas falsas na tela - android, google-maps

Localização atual exibida em coordenadas falsas na tela - android, google-maps

Estou apenas tentando entender um Android básicoquestão relacionada à navegação, a saber "Como posso exibir a localização atual". Eu usei um pouco de código de artigos e tutoriais de minhas longas sessões de pesquisa no Google. A exibição de uma sobreposição simples (círculo + mensagem de texto) funciona, mas em uma posição incorreta na tela (aparentemente no Equador).

Minha configuração de código inclui uma pequena classe interna que implements LocationListener, e os seus onLocationChanged O manipulador de eventos chama este método:

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();
}

Até o momento, tudo parece ok, eu depurei o par lat / lng não transformado e a variante E6 também está ok. Aqui está a classe CustomOverlay:

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);
}
}

Definitivamente, é um tipo de erro de projeção, uma vez que todas as minhas cordas geo-fixadas acabam no Equador, então existem alguns valores de 0,0 sendo gerados.

Posso fornecer outros detalhes, se necessário, estouexecutando o código no emulador, a API do Google Maps nível 8 (Android 2.2) e eu recebo blocos e o CustomOverlay (círculo + texto) é exibido, apenas em uma posição realmente falsa (as cordas como 54.foo e 8.bar estão muito longe )

A base de código pode ser um pouco mais antiga, talvez uma projeção como toPixels não é mais necessário? Não faço ideia.

Desde já, obrigado !

Respostas:

1 para resposta № 1

Resolvido, o comando "geo fix" enviado via telnet deseja um par (Lng, Lat), não um par (Lat, Lng). Inconsistência no seu melhor! Obrigado pela contribuição.


0 para resposta № 2

Se você deseja mostrar apenas a localização atual e mantê-la atualizada com um pequeno círculo piscando na tela, como o Google Maps para Android, o Android tem uma implementação padrão desse recurso.

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

É isso que o Android vai lidar com tudo.