26

Open Street Maps のオープン ソース マップを使用するアプリケーションを構築しようとしています (ただし、この概念はどのマップ プロバイダーにも適用できるはずです)。このアプリケーションにより、ユーザーは出発前にルートに沿って多数のウェイポイントを指定できます。

私は自分の携帯電話のデータ プランを持っていないため (また、田舎をぶらぶらしていると接続がうまくいかないため)、ウェイポイントやルートに関連するマップ タイルを出発前にプリロードできるようにしたいと考えています。データ接続なしでマップを引き続き使用できるようにします。

最初に考えたのは、マップ プロバイダーから必要なタイルをダウンロードし、それらを分離されたストレージに格納することです。ただし、このクラスを使用する Bing Maps コントロールの実装はTileSource、タイルをダウンロードできる絶対 URI を返すことに依存しており、分離ストレージに保存されているデータでは明らかに機能しません。

質問は既に行われています: Windows Phone 7 Map Control with custom layer in offline mode、しかし回答はありませんでした。それ以来、誰かが問題を解決したのではないかと思っています。

4

6 に答える 6

2

マップ上に配置されたカスタム レイヤーでこれが行われるのを見てきました。タイルは、好きな場所 (IsolatedStorage、オンライン、その他) からカスタム レイヤーに読み込まれます。

申し訳ありませんが、現時点でこれを示すコードを共有できるわけではありませんが、現在非常に似たようなことを行っています。

于 2012-02-14T10:31:04.233 に答える
2

Android 用の OpenStreetMaps を使用して小さなプロトタイプを作成しました。リポジトリを見るのは面白いかもしれないと思うので、私のような解決策を見つけてください。事前にマップをダウンロードしましたが、これにはオンライン ソリューションを使用できるかもしれません。これはリポジトリです: https://github.com/kikofernandez/OpenStreetMapExampleと、それがどのように見えるかのビデオ: https://vimeo.com/40619538 .

このプロトタイプには、OpenLayers、OpenStreetMaps、JavaScript、および Android の WebView を使用しました。詳細をお伝えしたいのですが、あくまでも試作品です。

于 2012-05-28T08:38:43.370 に答える
0

データをローカルに保存できる(XAPに埋め込む)ことができる場合は、絶対URIを介してデータを参照できます。ChrisWalshieがここでそれについて話します。

したがって、たとえば、アプリのインストールパスを取得したら、次のようにリソースを参照できます。

Uri toResource = new Uri("file:///Applications/Install/4FFA38B5-00AF-4760-A7EB-7C0C0BC1D31A/Install/EMBEDDED_RESOURCE", UriKind.Absolute);
于 2011-02-22T00:44:03.210 に答える
0

アプリが WP8 で実行されている場合は、Windows Phone 8 SDK の組み込みのマップ コントロールを使用します。これは、すぐに使用できるオフライン マップを既にサポートしているためです。WP7 を対象とする場合、オフライン マップを機能させることは可能ですが、多くの作業が必要です。私は数年前に顧客のためにこれを作成しましたが、これを行うには 3000 行を少し超えるコードが必要だったと思います。また、さまざまなソースからタイルを追加するためのフレームワークも必要としていたことに注意してください。たとえば、ダウンロードや zip ファイルのダウンロードなどです。レンダリングを機能させる方法は、キャンバスの位置を設定せずにマップに移動することでした。これはデフォルトでマップの子になりますが、移動しません。次に、キャンバスをマップと同じサイズにし、サイズ変更イベントを使用して、マップのサイズが変更された場合にキャンバスのサイズを変更しました。次に、ビュー変更イベントを使用して、タイルをレンダリングするメソッドをトリガーしました。このイベントが発生したとき、最初にここにあるコードを使用して、表示されているすべてのタイルを計算しました。http://msdn.microsoft.com/en-us/library/bb259689.aspx

次に、独立したストレージからタイルを引き出して、キャンバスに描画します。パフォーマンスのために、キャンバスに追加したタイルを追跡して、タイルがまだ表示されている場合は、分離ストレージから再読み込みするのではなく、位置を変更するだけにしました。また、表示されなくなった画像を削除しました。全体的にこれは問題なく動作しますが、ズーム レベル間の移行がスムーズでないなどの小さな問題がいくつかありました。本当にそれを機能させたい場合は、それを機能させることができますが、さらに多くの計算が必要です。また、タイルのないエリアを拡大すると、空のマップになってしまいます。カスタム マップ モードを作成して、ユーザーがタイルのないエリアに入らないようにすることができます。

于 2013-07-31T13:04:30.087 に答える
0

画像の Build Action を Content に設定しましたか?

于 2012-05-07T09:52:37.393 に答える
0

解決策

質問は少し古いですが、Qt を使用できる人なら誰でも解決策があります。このソリューションは Windows Phone プラットフォームに限定されません。私は Android をターゲットにしており、私のデスクトップでも動作します。

Qt では、QtLocation で使用される OSM プラグインにパッチを適用する必要があります。シンプル、迅速、簡単です。

どうやってするの ?

簡単な実装では、QGeoTiledMappingManagerEngineOsmクラスを変更して、QGeoTileFetcherではなく独自のものを呼び出すようにすることができますQGeoTileFetcherOsm。これを達成するためのより良い方法があるかもしれませんが、少なくとも私にとってはうまくいきます。

基本的に、ネットワークではなくファイルシステムからタイルを読み取るフェッチャーを作成します。たとえば、オンライン リソース (以下を参照) からファイル システム データベースを 1 回構築し、それをオフラインで使用するためにアプリケーションと共にデプロイします。

タイルはどこから入手できますか?

オフライン実装にタイルを取得する方法については、 http ://wiki.openstreetmap.org/wiki/Slippy_map_tilenames を参照してください。

無料で使用できるタイルのソースは次の 2 つです。

  • ストリート マップ プロジェクト サーバーを開く
  • Mapquest Open Tiles サーバー

ライセンスと使用条件に注意してください。

ストリートマップを開く

  • プロジェクト : wiki.openstreetmap.org/wiki/Main_Page
  • ライセンス : www.openstreetmap.org/copyright
  • 利用規約 : wiki.openstreetmap.org/wiki/Tile_usage_policy
  • サーバーは現在、*.tile.openstreetmap.orgのような名前になっています

MapQuest-OSM タイル

  • プロジェクト : developer.mapquest.com/web/products/open/map
  • ライセンス : opendatacommons.org/licenses/odbl/
  • 利用規約 : developer.mapquest.com/web/info/terms-of-use
  • サーバーは現在otile*.mqcdn.comのような名前になっています

(おかしなリンクで申し訳ありません: 本物のリンクを投稿するほどの評判はありません)。

于 2015-04-13T13:21:31.487 に答える