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;