「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
のような投影はもう必要ありませんか?いい考えはありません。
ありがとうございます!
私はこれまで入力していただきありがとうございました。私はcoordsを送る必要がある形式は何ですか? 不適切な形式の座標を送信することは私の問題だと思っていますが、私が見たすべてのlat/lngのペアは通常負のlat値を持ちます(例:geo fix -82.411629 28.054553)。 – Dr1Ku
ええ、あなたはそれらをtelnetしなければならないことが判明しました。Eclipseの組み込みのものを使用すると、あまり良い結果が得られません。修正され、正しく入力された緯度/経線ペアを使用して動作します。再度、感謝します ! – Dr1Ku
ほとんどすべてのジオ関連のアプリが座標を扱うように、実際にはジオフィックスでは(lng、lat)が必要であり、(lat、lng)ではありません。 – Dr1Ku