2010-11-24 18 views
0

「Androidの現在の位置を表示するにはどうすればいいですか?」という基本的なAndroidナビゲーション関連の質問を理解しようとしています。私は、長いグーグル・セッションからの記事やチュートリアルのコードを少し使いました。シンプルなオーバーレイ(円+テキストメッセージ)の表示は、うまく画面上の位置(明らかに赤道上)で動作します。現在の位置が画面上の座標に表示されない

私のコードのセットアップは、小さな内部クラスというimplements LocationListenerを含み、そしてそのonLocationChangedイベントハンドラは、このメソッドを呼び出します:

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

この時点まで、それはすべてOKに見えますが、私は周りのデバッグきたと非を変換された緯度/経度のペアは大丈夫​​です。そのE6バリアントもOKです。ここで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); 
    } 
} 

すべての私の地理fix'd COORDSは赤道上で終わるので、それは、ほとんど間違いなく種類の投影誤差ですので、周りの投げいくつかの0.0の値があります。

私はエミュレータ、Maps APIレベル8(Android 2.2)でコードを実行していますが、タイルが表示され、カスタムオーバーレイ(円+テキスト)が表示されるようになりました。位置(54.fooや8.barのような座標はオフです)。

コードベースが少し古いかもしれませんが、おそらくtoPixelsのような投影はもう必要ありませんか?いい考えはありません。

ありがとうございます!

答えて

1

解決済み、telnet経由で送信された「geo fix」コマンドは、(Lat、Lng)ペアではなく、(Lng、Lat)ペアが必要です。最高の不一致!入力いただきありがとうございます。

0

Android用Googleマップのように画面上の小さな点滅するサークルで現在の位置のみを表示して更新したい場合は、Androidにこの機能のデフォルト実装があります。

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

これはAndroidがすべてを処理することです。

+0

私はこれまで入力していただきありがとうございました。私はcoordsを送る必要がある形式は何ですか? 不適切な形式の座標を送信することは私の問題だと思っていますが、私が見たすべてのlat/lngのペアは通常負のlat値を持ちます(例:geo fix -82.411629 28.054553)。 – Dr1Ku

+0

ええ、あなたはそれらをtelnetしなければならないことが判明しました。Eclipseの組み込みのものを使用すると、あまり良い結果が得られません。修正され、正しく入力された緯度/経線ペアを使用して動作します。再度、感謝します ! – Dr1Ku

+0

ほとんどすべてのジオ関連のアプリが座標を扱うように、実際にはジオフィックスでは(lng、lat)が必要であり、(lat、lng)ではありません。 – Dr1Ku

関連する問題