OpenStreetMapsを使うためにGoogle MapsベースのプロジェクトをOsmdroidに移植します。ポートは、数多くの直線とテキストからなるオーバーレイを追加するだけでOKです。どちらのプロジェクトでも、私は、スレッドとハンドラーredrawOverlayを呼び出すことによってオーバーレイを追加します。GoogleマップアプリをOsmdroidに移植する - オーバーレイに関する問題
OSMプロジェクトでは、私のオーバーレイは地図を完全に隠す灰色の四角形です。 redrawOveralyへの呼び出しを削除すると、OSMタイルはOKと表示されます。下のコードサンプルでは、オーバーレイコードを1つの対角線の最小値に減らしました。 Googleアプリでうまく動作し、地図タイルをオーバーレイします。 com.google.android.maps.Overlayは、drawメソッドを持って、OSMはonDrawは持っているので、私はOSMのバージョンを持っている:
:私は同等のものを持っているGoogleマップの元でながらprivate MapView mv;
private MapOverlay mmapOverlay = null;
private void redrawOverlay() {
gPt = mv.getMapCenter();
if (mmapOverlay == null)
mmapOverlay = new MapOverlay(getApplicationContext());
List<Overlay> listOfOverlays = mv.getOverlays();
listOfOverlays.clear();
listOfOverlays.add(mmapOverlay);
mv.invalidate();
}
public class MapOverlay extends org.osmdroid.views.overlay.Overlay {
public MapOverlay(Context ctx) {
super(ctx);
// TODO Auto-generated constructor stub
}
@Override
public void onDraw(Canvas canvas, MapView mapView) {
Paint lp3;
lp3 = new Paint();
lp3.setColor(Color.RED);
lp3.setAntiAlias(true);
lp3.setStyle(Style.STROKE);
lp3.setStrokeWidth(1);
lp3.setTextAlign(Paint.Align.LEFT);
lp3.setTextSize(12);
canvas.drawLine(10, 10, 150, 150, lp3);
}
public class MapOverlay extends com.google.android.maps.Overlay {
@Override
public boolean draw(Canvas canvas, MapView mapView, boolean shadow,
long when) {
super.draw(canvas, mapView, shadow);
Paint lp3;
lp3 = new Paint();
.....etc.
redrawOverlayは、オーバーレイのインスタンス化を除いて同じであるだけである:
mmapOverlay = new MapOverlay();
すべての提案は感謝
0を受信しますkurtzmarcためUPDATE質問:あなたのための
おかげで私はあなたがOsmdroidの著者の一人であることがわかり、これまでに支援します。これまでのことが好きです。私はあなたがダブルタップで取得することを「ジャンプしてズームインする」ことを抑制したいと思います。私は何もしないでください。私はそれはおそらくあなたの元にこのビットを打つとzoomInFixingをやっていると思う:
private class MapViewDoubleClickListener implements GestureDetector.OnDoubleTapListener {
@Override
public boolean onDoubleTap(final MotionEvent e) {
for (int i = mOverlays.size() - 1; i >= 0; i--)
if (mOverlays.get(i).onDoubleTapUp(e, MapView.this))
return true;
final GeoPoint center = getProjection().fromPixels(e.getX(), e.getY());
return zoomInFixing(center);
}
私がそれをオーバーライドすることができていないようです。私は3.0.1 jarとそれに関連するjavadocsを使用しています。私はMapviewのsetTouchDelegateメソッドが助けになるかどうかは疑問だが、javadocsにはその参照がない。何か提案してください?
これは確かにmWorldSize_2をintとして定義し、.drawlineにPaint引数を追加すると、画面に線を描画します。 (Canvasが渡されるCanvasは、Google Mapsが渡すCanvasとはまったく異なります)。しかし、基礎をなすMapViewが消えて、灰色の背景の上に線が表示されます。 – NickT
あなたの助けてくれてありがとう、私はゆっくりとそこに着いています! listOfOverlays.clear()が原因でした。インデックス0のものを除いてすべてクリアする必要がありました(Googleマップと同じではありません)。私の主な問題は、私が書いたサービス/リモートインターフェイス経由で描画したい線の座標とテキストを得るために多くの作業をしたことです。これらはGoogleのオーバーレイがそれらを望んでいたので、スクリーンピクセル座標で表示されます。 OsmdroidのOSM座標に変換する必要があります。 – NickT
完了!どうもありがとう。私は頭を払ってペンと紙で座った後、私はちょうど2行の2行のtransformX、transformYルーチンを書く必要があることを理解しました。これはGoogleマップオーバーレイのように見えます。 – NickT