こんにちは
この投稿では、Androidアプリケーションでのさまざまなソース(Yandexカードを含む)のカードの使用を検討します。

問題を解決するために、
osmdroidライブラリを使用します。
ライブラリ自体(リンクは最新バージョン用ではありません。このバージョンは、新しいバージョンよりも安定しており、高速です)と、
もう1つ追加する必要が
あります。 それらをプロジェクトに追加します(Windows版Eclipseを使用)(ビルドパス->ビルパスの構成->ライブラリ->外部JARの追加)。
プロジェクトマニフェストに必要な権限を書き込みます
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
YandexやGoogleなどの新しいマップソースを追加するには(Mapnikは既にライブラリに組み込まれています)、XYTileSourceクラスを展開する必要があります。
MyTileSource public class MyTileSource extends XYTileSource { public MyTileSource(String aName, string aResourceId, int aZoomMinLevel, int aZoomMaxLevel, int aTileSizePixels, String aImageFilenameEnding, String... aBaseUrl) { super(aName, aResourceId, aZoomMinLevel, aZoomMaxLevel, aTileSizePixels, aImageFilenameEnding, aBaseUrl); }
問題は、osmdroidがYandexマップ投影をサポートしていないことです。 したがって、Yandexマップを正しく表示するために、TilesOverlayクラスを拡張します。 座標をタイルに変換し、ネットワークに戻すために、
クラスが見つかりました。 これは少し変更されたクラスです
YandexUtils public class YandexUtils { public static double[] geoToMercator(double[] g) { double d = g[0] * Math.PI / 180, m = g[1] * Math.PI / 180, l = 6378137, k = 0.0818191908426, f = k * Math.sin(m); double h = Math.tan(Math.PI / 4 + m / 2), j = Math.pow( Math.tan(Math.PI / 4 + Math.asin(f) / 2), k), i = h / j;
座標を変換するための式があるので、TilesOverlayを展開できます
YandexTilesOverlay public class YandexTilesOverlay extends TilesOverlay { private final Rect mTileRect = new Rect(); private final Point mTilePos = new Point(); public YandexTilesOverlay(MapTileProviderBase aTileProvider, Context aContext) { super(aTileProvider, aContext); }
フォームにカードを表示するために残ります
BlogOsmYandexActivity public class BlogOsmYandexActivity extends Activity { MapView mMap; MapController mMapController; YandexTilesOverlay tilesOverlayYandex; TilesOverlay tilesOverlayGoogle; TilesOverlay tilesOverlayMapnik; MapTileProviderBasic tileProviderYandex; MapTileProviderBasic tileProviderGoogle; MapTileProviderBasic tileProviderMapnik; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
結果
