Delphi Android/iOSアプリケーションでTGeocoderクラスを使って逆ジオコーディング(位置情報から住所を得る)

Delphiには、ジオコーディングおよび逆ジオコーディングの処理を行う「TGeocoder」というクラスがあります。
ツールパレットに登録されていないので、気がつきにくいかもしれません。

TGeocoder」を使って、位置情報から住所を得る方法を紹介します。

位置情報は、「TLocationSensor」を使って取得します。
TLocationSensorのActiveプロパティをTrueにすると、OnLocationChangedイベントで位置情報を取得できます。

procedure TForm1.Button1Click(Sender: TObject);
begin
  //ボタンを押したら位置情報を取得する
  LocationSensor1.Active := True;
end;

procedure TForm1.LocationSensor1LocationChanged(Sender: TObject;
  const OldLocation, NewLocation: TLocationCoord2D);
begin
  //取得した位置情報(NewLocation)を使って処理を行う
end;

privateフィールドにTGeocoderの変数を追加します。

private
  { private 宣言 }
  FGeocoder: TGeocoder;

TGeocoderは逆ジオコーディングの処理が終わるとOnGeocodeReverseイベントを発生させます。

OnGeocodeReverseイベントの処理を行うメソッドを追加します。

procedure OnGeocodeReverseEvent(const Address: TCivicAddress);

フォームのコンストラクタで初期設定を行います。

procedure TForm1.FormCreate(Sender: TObject);
begin
  FGeocoder := TGeocoder.Current.Create;
  FGeocoder.OnGeocodeReverse := OnGeocodeReverseEvent;
end;

TLocationSensorのOnLocationChangedイベントで取得した位置情報をTGeocoderで逆ジオコーディングします。

procedure TForm1.LocationSensor1LocationChanged(Sender: TObject;
  const OldLocation, NewLocation: TLocationCoord2D);
begin
  //位置情報を取得したらセンサーを無効にする
  LocationSensor1.Active := False;
  //位置情報を解析する
  FGeocoder.GeocodeReverse(NewLocation);
end;

逆ジオコーディングで取得した住所を表示します。

procedure TForm1.OnGeocodeReverseEvent(const Address: TCivicAddress);
begin
  TThread.Synchronize(TThread.CurrentThread,
    procedure
    begin
      Memo1.Lines.Clear;
      Memo1.Lines.Add('国コード:' + Address.CountryCode);
      Memo1.Lines.Add('国名:' + Address.CountryName);
      Memo1.Lines.Add('管理領域:' + Address.AdminArea);
      Memo1.Lines.Add('サブ管理領域:' + Address.SubAdminArea);
      Memo1.Lines.Add('区域名:' + Address.Locality);
      Memo1.Lines.Add('サブ区域:' + Address.SubLocality);
      Memo1.Lines.Add('サブ通り:' + Address.SubThoroughfare);
      Memo1.Lines.Add('通り:' + Address.Thoroughfare);
    end);
end;

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください