マップビューを表示するために私のアプリケーションでosmdroid 3.0.5 jarを使用しています。私は水平線と垂直線からなるオーバーレイを重ねています。特定の場所でのみ、ズームレベルが高いと線の一部が消えて、地図がドラッグされると再び表示されることに気付きました。高いズームレベルでのOsmdroidオーバーレイでの不思議な動作
私は実際のデバイスとエミュレータ(Gingerbread 2.3.3)の両方で問題を示すサンプルアプリケーションを作成しました。
完全なコードは以下の通りである - (彼らはこの最小限のサンプルにあるように表示されませんが、「変換」の方法は、実際のアプリケーションで必要です)。興味深いことに
public class DemoMap extends Activity implements MapViewConstants {
private MapView mapView;
private MapController mapController;
private MapOverlay mmapOverlay = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.copymain);
mapView = (MapView) findViewById(R.id.mapview);
mapView.setTileSource(TileSourceFactory.MAPNIK);
mapView.setBuiltInZoomControls(true);
mapView.setMultiTouchControls(true);
mapController = mapView.getController();
mapController.setZoom(17);
// Only shows the bug at ceratin lat/lon positions, this is one
GeoPoint point2 = new GeoPoint(39191699, -120102561);
mapController.setCenter(point2);
mmapOverlay = new MapOverlay(this);
List<Overlay> listOfOverlays = mapView.getOverlays();
listOfOverlays.add(mmapOverlay);
mapView.invalidate();
}
public class MapOverlay extends org.osmdroid.views.overlay.Overlay {
public MapOverlay(Context ctx) {super(ctx); }
private int mVpl;// viewport left, top, right, bottom
private int mVpt;
private int mVpr;
private int mVpb;
private MapView mMv = null;
// Two routines to transform and scale between viewport and mapview
private float transformX(float in, MapView mv) {
float out;
out = ((mVpr - mVpl) * in)/(mv.getRight() - mv.getLeft())
+ mVpl;
return out;
}
private float transformY(float in, MapView mv) {
float out;
out = ((mVpb - mVpt) * in)/(mv.getBottom() - mv.getTop())
+ mVpt;
return out;
}
@Override
protected void draw(Canvas pC, MapView mapV, boolean shadow) {
if (shadow)
return;
Paint paint;
paint = new Paint();
paint.setColor(Color.RED);
paint.setAntiAlias(true);
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(1);
paint.setTextAlign(Paint.Align.LEFT);
paint.setTextSize(12);
final Rect viewportRect = new Rect();
final Projection projection = mapV.getProjection();
viewportRect.set(projection.getScreenRect());
mVpl = viewportRect.left;
mVpt = viewportRect.top;
mVpr = viewportRect.right;
mVpb = viewportRect.bottom;
// draw two lines to split screen into 2x2 quarters
// drag the map left and right and the vertical line disappears,
// then reappears! It's OK at one less zoom level
pC.drawLine(transformX(mapV.getWidth()/2, mapV), transformY(0, mapV),
transformX(mapV.getWidth()/2, mapV),
transformY(mapV.getHeight(), mapV), paint);
pC.drawLine(transformX(0, mapV), transformY(mapV.getHeight()/2, mapV),
transformX(mapV.getWidth(), mapV),
transformY(mapV.getHeight()/2, mapV), paint);
}
}
}
あれば、私の本当でアプリ、オフラインのビットマップに描画を行う場合は、オーバーレイの描画の最後に1つずつ描画します。線は消えません。
ご協力いただければ幸いです。
ありがとうございます。私は新しい瓶を試してみたいと思っていますが、javadocsのjarファイルを入手してEclipseにコンテキストヘルプを与える方法がわかりません。 3.0.7以降は何もないようです。 – NickT
新しいリリースと一緒に新しいjavadocビルドを投稿するべきです。問題報告を追加します。 Mavenを使って自分でビルドすることもできます。 – kurtzmarc
FYI - javadocはMaven Centralからダウンロードできます:http://search.maven.org/#browse%7C-2035155240 – kurtzmarc