iOSアプリケーション用のオフラインマップの作成



親愛なるハブロフチアン!

この記事では、オフラインマップを実装する方法について説明します。

免責事項 この記事は何のPRでもありません。 私はこの実装オプションを最も最適なものとして選択しましたが、アクセスしやすい形でそれを伝えたいと思います。
よろしくお願いします!

背景


香港向けのガイドアプリケーションを開発する際、オフラインマップを使用する必要がありました。 残念ながら、Googleマップはそのような機会を提供しないため、絶望のため、MapBoxなどのサービス、またはiOSの拡張機能であるMapBox-ios-sdkを使用する必要がありました。

猫の下で興味を持ってください。

必要なソフトウェアをインストールする


必要なもの:

Postgres.appをダウンロードして構成する

オフからアプリケーションをダウンロードします siteを展開し、アプリケーションフォルダーに移動します。
次に、それを実行します。

アプリケーションは、このようなウィンドウで私たちを歓迎します。
「psqlを開く」をクリックします。



または、ステータスバーから開きます。



これらの手順の後、PostgreSQLが実行されているコンソールが開きます。 次に、タイルを保存するためのベースを作成する必要があります。
コンソールで、次を入力します。

create database osm: \connect osm create extension postgis; \quit 


OSM Brightをダウンロード

このリンクからOSM Brightパッケージをダウンロードしてください。

フォルダーを解凍して開き、configure.py.sampleファイルの名前をconfigure.pyに変更し、このファイルをテキストエディターで開き、フィールドを変更します(必要な場合)。

それでも、将来プロジェクトに混乱が生じないように、これを行うことをお勧めします。

それで、名前を変えて、私は香港を示しました。

デフォルトのディレクトリを残しました。 このディレクトリはTileMillアプリケーションによって使用されます。後でTileMillに煩わされないように、変更しないことをお勧めします。



ユーザー名とパスワード、および他のすべてのフィールドは空白のままです。

次に、マップのスタイルファイルをダウンロードする必要があります。
彼らはここにいます:



ロード後、それらをOSM Brightフォルダーにミックスします。
ファイルを解凍する必要はありません。OSMBrightはそれ自体を行います。

osm2pgsqlをダウンロードしてインストールする

リンクをダウンロードし、イメージをエミュレートして、osm2pgsqlをインストールします。



TileMill.appをダウンロードする

サイトにアクセスしてダウンロードし、続いてアプリケーションをアプリケーションディレクトリに転送します。

地図の読み込み


オフラインマップを作成する前に、そのサイズを決定する必要があります。 アプリケーションの重量が1〜2 GBを超えるため、カードは大きすぎてはいけません。

iPhone 16gbを使用するユーザーは非常に失望します。

以下にリストされているサービスのいずれかに渡します。
metro.teczno.comからマップをダウンロードしました。


市を見つけて、拡張子が.osm.pbfのファイルをダウンロードします。



変換


osm2pgsql

「ターミナル」を開いて書き込みます。

 osm2pgsql -cGs -d osm -S /usr/local/share/osm2pgsql/default.style ~/Downloads/<your_map>.osm.pbf 


OpenStreetMap wiki wiki.openstreetmap.org/wiki/Osm2pgsqlでパラメーターの説明を表示するか、ターミナルでコマンドを記述できます

 osm2pgsql --help 


osm2pgsqlパッケージがカードを処理し、それをPostgresデータベースに転送するまで待機します。
通常、ファイルサイズに応じて5〜20分です。

最後に、このような「Osm2pgsqlは全体で71秒かかった」という碑文が表示されます。



OSMブライト

次に、TileMillアプリケーション用のプロジェクトを作成する必要があります。
c OSM Brightフォルダーに移動します。

 cd ~/Downloads/mapbox-osm-bright 


そして、スクリプトを実行します。

 ./make.py 


オフラインマップの作成


TileMill.appアプリケーションを開きます。

注意! 考えられるバグ。 TileMillの起動中にPostgresアプリケーションが開いている場合、TileMillアプリケーションは開かず、常にロード状態にあるという事実にあります。 (コンピューターを再起動することで処理されます)。



すべてが正しく行われた場合、プロジェクトはTileMillアプリケーションに表示されます。

閉じている場合はPostgresを起動し、プロジェクトを開きます。



[エクスポート]をクリックして、MBTiles形式を選択します。



ズームを設定します。たとえば、10〜14を設定し、最小ズームの中心点をすぐにマークします。
あなたが何か間違ったことをすると、アプリケーションはそれについてあなたに知らせます。
選択して、目的の領域を選択します。
そして「エクスポート」をクリックします。

マップの変換と圧縮には、10分から1年、1年という非常に長い時間がかかります。
それはすべて、Macのパワーと圧縮するカードの領域に依存します。 実際のプロジェクトで推奨されるカードのズーム(11〜16)、MacBook Pro 13、2012年半ばの圧縮には30〜40分かかります。

処理後、プログラムはファイルの保存を提案します。



セーブ!

アプリケーションでのカードの統合


Cocoa-Podsを使用してMapBox-ios-sdkを接続します。SDKはここにあります 。 更新バージョンは既にこのバージョンに接続されているため、「開発」ブランチの使用をお勧めします
iOS 7スタイルを含むSMCalloutView 2.0。
ポッドファイル
プラットフォーム:ios、「7.0」

ポッド 'Mapbox' ,: git => 'https://github.com/mapbox/mapbox-ios-sdk.git' ,: branch => 'develop'


TileMillで作成されたマップをプロジェクトリソースに転送します。

そして、マップをメインビューに追加します。

ViewController.m
 @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; RMMBTilesSource *offlineSource = [[RMMBTilesSource alloc] initWithTileSetResource:@"HongKong" ofType:@"mbtiles"]; RMMapView *mapView = [[RMMapView alloc] initWithFrame:[self view].bounds andTilesource:offlineSource]; [mapView setZoom:11]; [mapView setMinZoom:11]; [mapView setMaxZoom:14]; [mapView setCenterCoordinate:CLLocationCoordinate2DMake(22.327330,114.123419)]; //  MapBox     . =) [mapView setShowLogoBug:NO]; [mapView setHideAttribution:YES]; [mapView setAutoresizingMask:(UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth)]; // Retina Display [mapView setAdjustTilesForRetinaDisplay:YES]; [self.view addSubview:mapView]; } @end 



サンプル付きプロジェクト-github.com/Ne0nX/OfflineMaps-Example

プロセスで使用したリソース


www.mapbox.com/tilemill/docs/guides/osm-bright-mac-quickstart
github.com/mapbox/mapbox-ios-example

最後まで読んでいただきありがとうございます。
頑張って!

Source: https://habr.com/ru/post/J227193/


All Articles