Back to Devexpress

TdxMapControlAzureMapReverseGeocodeProvider.ExecuteAsync(IdxAzureMapReverseGeocodeQueryParams) Method

vcl-dxazuremapinformationproviders-dot-tdxmapcontrolazuremapreversegeocodeprovider-dot-executeasync-x28-dxazuremapinterfaces-dot-idxazuremapreversegeocodequeryparams-x29.md

latest5.6 KB
Original Source

TdxMapControlAzureMapReverseGeocodeProvider.ExecuteAsync(IdxAzureMapReverseGeocodeQueryParams) Method

Sends an asynchronous query to an Azure Maps server.

Declaration

delphi
procedure ExecuteAsync(const AParams: IdxAzureMapReverseGeocodeQueryParams);

Parameters

NameTypeDescription
AParamsIdxAzureMapReverseGeocodeQueryParams

Accepts a configured query parameters container.

Call the CreateQueryParams function to create a query parameters container.

|

Remarks

Call the ExecuteAsync procedure to send an asynchronous query to an Azure Maps server.

Receive Server Responses to Asynchronous Queries

Handle the OnResponse event to receive and process a server query after an ExecuteAsync procedure call.

Code Example: Obtain Map Point Address Asynchronously

The code example in this section demonstrates a procedure that sends a query to an Azure Maps Reverse Geocode server and an OnResponse event handler that receives and processes the server response.

delphi
uses
  dxAzureMapInformationProviders, // Declares TdxMapControlAzureMapReverseGeocodeProvider
  dxMessageDialog; // Declares the dxMessageDlg global function
// ...

procedure TMyForm.AddPushpin(AGeoPoint: TdxMapControlGeoPoint): Boolean;
var
  APushpin: TdxMapPushpin;
  AQueryParams: IdxAzureMapReverseGeocodeQueryParams;
begin
  // Creates a new pushpin on an existing map item layer
  APushpin := dxMapControl1ItemLayer1.MapItems.Add(TdxMapPushpin) as TdxMapPushpin;
  APushpin.Location.GeoPoint := AGeoPoint;
  AQueryParams := dxMapControl1AzureMapReverseGeocodeProvider1.CreateQueryParams;
  AQueryParams.Coordinates := APushpin.Location.GeoPoint;
  // Uses a configured reverse geocode provider to send a query to an Azure Maps server
  dxMapControl1AzureMapReverseGeocodeProvider1.ExecuteAsync(AQueryParams);
end;

procedure TMyForm.dxMapControl1AzureMapReverseGeocodeProvider1Response(
  ASender: TdxMapControlAzureMapReverseGeocodeProvider;
  AResponse: TdxAzureMapReverseGeocodeRequestResponse; var ADestroyResponse: Boolean);
var
  AMapItems: TdxMapItems;
  APushpin: TdxMapPushpin;
begin
  AMapItems := dxMapControl1ItemLayer1.MapItems;
  if AResponse <> nil then
  begin
    if AResponse.IsSuccess and (AResponse.Features.Count > 0) then // Checks if the query is successful
    begin
      APushpin := AMapItems.Items[AMapItems.Count - 1] as TdxMapPushpin;
      APushpin.Hint := AResponse.Features.First.Properties.Address.FormattedAddress;
    end
    else if Assigned(AResponse.ErrorInfo) then
      dxMessageDlg(AResponse.ErrorInfo.Message, TMsgDlgType.mtError, [mkOK], 0);
  end;
end;
cpp
#include "dxAzureMapInformationProviders.hpp" // Declares TdxMapControlAzureMapReverseGeocodeProvider
#include "dxMessageDialog.hpp" // Declares the dxMessageDlg global function
// ...

void __fastcall TMyForm::AddPushpin(TdxMapControlGeoPoint *AGeoPoint)
{
  TdxMapPushpin *APushpin;
  _di_IdxAzureMapReverseGeocodeQueryParams AQueryParams;
  // Creates a new pushpin on an existing map item layer
  APushpin = dynamic_cast<TdxMapPushpin*>(dxMapControl1ItemLayer1->MapItems->Add(__classid(TdxMapPushpin)));
  APushpin->Location->GeoPoint = AGeoPoint;
  AQueryParams = dxMapControl1AzureMapReverseGeocodeProvider1->CreateQueryParams();
  AQueryParams->Coordinates = APushpin->Location->GeoPoint;
  // Uses a configured reverse geocode provider to send a query to an Azure Maps server
  dxMapControl1AzureMapReverseGeocodeProvider1->ExecuteAsync(AQueryParams);
}

void __fastcall TMyForm::dxMapControl1AzureMapReverseGeocodeProvider1Response(
  TdxMapControlAzureMapReverseGeocodeProvider *ASender,
  TdxAzureMapReverseGeocodeRequestResponse *AResponse, bool &ADestroyResponse)
{
  TdxMapItems *AMapItems;
  TdxMapPushpin *APushpin;
  AMapItems = dxMapControl1ItemLayer1->MapItems;
  if(AResponse != nullptr)
  {
    if((AResponse->IsSuccess) && (AResponse->Features->Count > 0)) // Checks if the query is successful
    {
      APushpin = dynamic_cast<TdxMapPushpin*>(AMapItems->Items[AMapItems->Count - 1]);
      APushpin->Hint = AResponse->Features->Properties->Address->FormattedAddress;
    }
    else if(AResponse->ErrorInfo != nullptr)
    {
      dxMessageDlg(AResponse->ErrorInfo->Message, TMsgDlgType::mtError, TMsgDlgButtons() << mbOK, 0);
    }
  }
}

See Also

TdxMapControlAzureMapReverseGeocodeProvider.Execute Procedure

TdxMapControlAzureMapReverseGeocodeProvider Class

TdxMapControlAzureMapReverseGeocodeProvider Members

dxAzureMapInformationProviders Unit