- レイアウトファイルのクラスcom.google.android.maps.MapViewをorg.osmdroid.views.MapViewに変更します。
- このプロジェクトでは、 MarkerClustererライブラリを使用して、マップ上のラベル、すべてのクラスcom.google.android.mapsをクラスター化しています* org.osmdroidに置き換えられました*
たとえば、 org.osmdroid.util.GeoPointの com.google.android.maps.GeoPoint です 。
osmdroidコードのエラーにより、その結果としてmapView.getProjection()。ToPixels(...)を呼び出すと、座標ではなく画面の座標が表示されることがあります。その結果、ClusterMarkerクラスのhitTestメソッドが機能せず、クラスターのクリック処理が機能しませんでした。タイルの座標を画面の座標に変換するスタックオーバーフローコードで発見された
/** * * @param x view coord relative to left * @param y view coord relative to top * @param vw MapView * @return GeoPoint */ public static GeoPoint geoPointFromScreenCoords(int x, int y, MapView vw){ if (x < 0 || y < 0 || x > vw.getWidth() || y > vw.getHeight()){ return null; // coord out of bounds } // Get the top left GeoPoint Projection projection = vw.getProjection(); GeoPoint geoPointTopLeft = (GeoPoint) projection.fromPixels(0, 0); Point topLeftPoint = new Point(); // Get the top left Point (includes osmdroid offsets) projection.toPixels(geoPointTopLeft, topLeftPoint); // get the GeoPoint of any point on screen GeoPoint rtnGeoPoint = (GeoPoint) projection.fromPixels(x, y); return rtnGeoPoint; } /** * * @param gp GeoPoint * @param vw Mapview * @return a 'Point' in screen coords relative to top left */ public static Point pointFromGeoPoint(GeoPoint gp, MapView vw){ Point rtnPoint = new Point(); Projection projection = vw.getProjection(); projection.toPixels(gp, rtnPoint); // Get the top left GeoPoint GeoPoint geoPointTopLeft = (GeoPoint) projection.fromPixels(0, 0); Point topLeftPoint = new Point(); // Get the top left Point (includes osmdroid offsets) projection.toPixels(geoPointTopLeft, topLeftPoint); rtnPoint.x-= topLeftPoint.x; // remove offsets rtnPoint.y-= topLeftPoint.y; if (rtnPoint.x > vw.getWidth() || rtnPoint.y > vw.getHeight() || rtnPoint.x < 0 || rtnPoint.y < 0){ return null; // gp must be off the screen } return rtnPoint; }
- かつて、標準のMyLocationOverlayの周りにラッパークラスが記述されていましたが、遷移の結果として破棄されました。 osmにはこのための独自のクラスがあります。
- ズームが機能しなかったため、mapView.setMultiTouchControls(true)への呼び出しを追加して有効にする必要があります。
- 「Mapnik」基板は、mapView.setTileSource(TileSourceFactory.MAPNIK)を呼び出して基板として選択されました。
現在、アプリケーションがテストされており、その結果、このライブラリに関するいくつかの新しい問題が明らかになる可能性があります。