ステップ4:Locate Meボタン:マップ上の場所を表示
最初のステップでは、ユーザーがlocate-meボタ
location managerは、CLLocation
オブジェクト内の現在の場所をlocationManager.location
で提供します。 このオブジェクトには、緯度と経度の座標値を含むさまざまな情報が含まれています。
マップに注釈を追加する
与えられた座標でマップに注釈を追加する新しい関数を作成しましょう。
次の関数は、新しいMKPointAnnotation
オブジェクトを作成し、以前のすべての注釈を削除した後にマップに追加します。 また、マップをズームしてスクロールして、新しく追加された注釈を画面の中央に配置します。
この関数ができたので、button IBAction関数で表示したい現在の位置情報を使用して呼び出すことができます。 現時点では、この情報がまだないため、タイトルとしてnil
を配置します。
updateLocationOnMap(to: locationManager.location, with: nil)
注釈にタイトルとして場所の完全なアドレスを追加
さて、私たちは、注釈にタイトルとして場所の完全なアドレスを追加します。 CoreLocationはCLGeocoder
で簡単に行うことができます。
CLLocation
への拡張機能を作成し、次の関数を追加します:
の目印を取得すると、ジオコードの場所が逆になり、完全な郵便住所を抽出するために必要なすべての情報を含むCLPlacemark
が表示されます。
住所情報は、目印オブジェクトに以下のように格納されます。 完全なアドレスの文字列値を取得するには、必要なコンポーネントを連結する必要があります。 以下の表のApple HQアドレスの例を次に示します:
私たちに直接完全なアドレスを与える私たちのCLLocation
拡張機能に関数を追加してみましょう。 便宜上、CLPlacemark
の拡張子に新しいプロパティを追加することができます。 この例では、このプロパティはstringValue
と呼ばれます。
次に、新しいlookUpLocationName
関数を使用してupdateLocationOnMap
への呼び出しを更新しましょう。
をタップしてアプリをビルドして実行します:locate-meボタンを押すと、現在の場所が地図上に追加され、現在の場所
文字列アドレスからマップに目印を追加する
ステップ3でlocate-meボタンについて書いた関数のほとんども、この部分で使用されます。 新しい関数updatePlaceMark(to address: String)
を追加し、TextField検証時に呼び出すだけです。
この関数では、まずユーザーが入力した文字列値から目印を取得し、次に最初の目印でマップを更新します。
に基づいて地図上の場所を表示するgeocodeAddressString
は場所検索機能ではないため、有効な住所と識別可能な場所、都市、州、または国のいずれかが必要で
ステップ6: マップ上のリアルタイムの位置を表示する
リアルタイムの位置を表示するには、すでに作成したCLLocationManagerDelegate
拡張機能に次のデリゲート関数を追加します。
Location Managerは、最初に定義されたポリシーに従って、位置情報の更新時にこの関数を自動的に呼び出します。
ステップ7:ビルド&実行
アプリをビルドして実行する: あなたは今、あなたの現在の場所を表示するマップアプリを持っています,リアルタイムで完全なアドレスを表示します,locate-meボタンタップであなたを