2016-05-09 5 views
3

私はOSMDroid(v 4.3)を使用してAndroidモバイルマッピングアプリケーションを開発しています。私は私のタイルサーバーとしてarcgisonlineを使用してベースマップを確立しました。OSMDroid - タイルを変更せずにズームインできますか?

String[] urlArray = {"http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/"}; 
    mapView.setTileSource(new OnlineTileSourceBase("ArcGisOnline", null, 0, 16, 256, "", 
      urlArray) { 
      @Override 
      public String getTileURLString(MapTile aTile) { 
       String mImageFilenameEnding = ".png"; 
       return getBaseUrl() + aTile.getZoomLevel() + "/" + aTile.getY() + "/" + aTile.getX() 
         + mImageFilenameEnding; 
      } 
    }); 

タイルサーバーは正常に動作します。しかし、ズームイン(レベル14+)すると、衛星画像で設定されたタイルには部分的に地面を覆う雲があるため、タイルセットを変更せずにズームインすることができるかどうかを知りたいと思います。

satellite imagery with cloud cover

REALレベル13

zoom13

FAKEズームシミュレーション(GIMP) digital/fake zoom

注:私はつまり、タイル画像を "爆破" によって定義を失うことになります与えられた。私はいくつかの土地の周りにマーカーを追加する必要があるため、ズーム13ではあまりにも不正確になり、雲のカバレッジでズーム14+で正しいエッジを判断することは不可能になります。デジタルズームのピクセル化は問題ではなく、完璧です受け入れられる。

答えて

2

いいえ、OSMdroidのソースコードを変更せずにこれを行う方法はありません。

しかし、ソースコードを使用せずに提供される各タイルセットに対して、技術的に1つのズームレベルを追加する方法があります。

提供されているズームボタンを使用する代わりに、独自のズームボタンを作成する必要があります。デフォルトのズームボタンを無効にします。

mapView.setBuiltInZoomControls(false); 

新しいボタンを作成したときに元に戻ります。

新しいボタンでは、現在のズームレベルを把握する必要があります。通常のズームレベル(この場合は雲の前のレベル)で「ズームイン」ボタンを設定すると代わりにこれ。

mapView.setTilesScaledToDpi(true); 

地図の縮尺を1インチあたりのドット数にすると、結果が得られます。ここに例があります。

Trueに設定されている場合。 mapView.setTilesScaledToDpi(true);

falseに設定すると、 mapView.setTilesScaledToDpi(false);

このズームレベルから離れるときは、忘れずにfalseに設定してください。

これまでのところ、1つのズームレベルでは結果を決めることができません。ズーム解像度はデバイスによって異なる場合があります。そのように使用することは意図されておらず、誤った結果が生じる可能性があります。

編集:ここのように、Tilesourceのタイルのスケーリングを変更することもできます。 https://stackoverflow.com/a/25761055/6263209しかし、私はあなたが望むとは思わないすべてのズームレベルでタイルを拡大します。

EDIT 2:あなたがsetTilesScaledToDpiがうまくいきませんでしたので、以前のものと同じ効果がある別の解決策を説明しようとします。

TileSizePixelsパラメータ(以下の行の5番目のパラメータ)を除いて、すべてのパラメータが同じで新しいものを使用してtileSourceを変更する機能がもう1つあります。

mapView.setTileSource(new OnlineTileSourceBase("ArcGisOnline", null, 0, 16, *Here*->256, "", 
     urlArray) 
ユーザーが、彼らは、画素ごとのタイルのサイズに基づいて、タイルセットにズームインしたいどのくらい入ることができるあなたのアプリ内の行を設定して何ができるか

、彼らはそこに選択肢あなたを確認するだろうというときこのようになります。関数を呼び出すことができます:

public Void setNewTilesPixels(int tileSizePixels) { 
    String[] urlArray = {"http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/"}; 
    mapView.setTileSource(new OnlineTileSourceBase("ArcGisOnline", null, 0, 16, tileSizePixels, "", 
     urlArray) { 
      @Override 
      public String getTileURLString(MapTile aTile) { 
       String mImageFilenameEnding = ".png"; 
       return getBaseUrl() + aTile.getZoomLevel() + "/" + aTile.getY() + "/" + aTile.getX() 
        + mImageFilenameEnding; 
     } 
    }); 
} 

を基本的にはそれだけで、ユーザーが最も効率的な方法ではありません新しいTileSourceを作成することによって、彼の画面上のタイルのサイズを決定させるだろうが、そう、以前はなかったです答え。自分で値をハードコーディングすることもできます。

official gitHub pageに必要な問題を提出する必要があります。現時点で回避すべき回避策があるからです。

+0

これらを実装することを試みます>その間、ありがとうございます。すべてのズームレベルでタイルをスケーリングすると、このような問題は発生しない可能性があります。私の重大な状況は約14と15ズームレベルです。それは "脂肪の指"の問題です(ちょうど十分な精密ズームレベル13で地図をクリックできないという意味で)。 –

+1

オハイオ州、その場合、単に「ファットフィンガー」問題であれば、デフォルトでsetTilesScaledToDpi(true)を使うことができます。すべてのデバイスでこの問題が解決されるはずです。なぜなら、このメソッドが作成された理由です。 –

+0

は、スイートを紹介しています。 –

関連する問題