{*** Inspired by C:\Prog\RADAddOns\TMS\TMS WEB Core RSXE12\Component Library Source\WEBLib.WebCtrls.pas ***}
unit CIC.TMSWeb.Cesium;

interface

uses
  {$IFNDEF LCLTMSWEB}
  System.Classes, VCL.Forms, VCL.Graphics, WEBLib.Controls, WEBLib.StdCtrls,
  WEBLib.WebCtrls, System.SysUtils,
  VCL.Controls, Web, JS, System.TypInfo, Dialogs, Types, Windows;
  {$ENDIF}
  {$IFDEF LCLTMSWEB}
  Classes, SysUtils, Web, JS,
  LCLIntf, LCLType, Forms, Controls, Graphics, WEBLib.Controls, WEBLib.StdCtrls,
  WEBLib.WebCtrls;
  {$ENDIF}

type
  { TCICWebGoogleMaps }
  TMapClickEvent = procedure(Sender: TObject; Lon, Lat: double) of object;
  TMapZoomEvent = procedure(Sender: TObject; ZoomLevel: integer) of object;
  TMapMarkerClickEvent = procedure(Sender: TObject; AIndex: integer; AMarker: TJSObject) of object;
  TMapPolygonClickEvent = procedure(Sender: TObject; AIndex: integer; APolygon: TJSObject) of object;
  TMapPolylineClickEvent = procedure(Sender: TObject; AIndex: integer; APolyline: TJSObject) of object;
  TMapCircleClickEvent = procedure(Sender: TObject; AIndex: integer; ACircle: TJSObject) of object;
  TMapRectangleClickEvent = procedure(Sender: TObject; AIndex: integer; ARectangle: TJSObject) of object;
  TMapKMLClickEvent = procedure(Sender: TObject; AIndex: integer; AKML: TJSObject) of object;

  TGoogleMarkerColor = (mcDefault, mcRed, mcBlue, mcGreen, mcPurple, mcYellow);
  TGoogleMarkerShape = (msPin, msPinDot, msFlag, msBookmark, msFlagSmall, msHome, msFavorite, msStar);
  TGoogleTravelMode = (tmDriving, tmWalking, tmBicycling, tmTransit);
  TGoogleMapType = (mtDefault, mtSatellite, mtHybrid, mtTerrain);
  TGoogleMapStyle = (mstDefault, mstNightMode, mstCustom);

  TCICWebGoogleMaps = class;

  TCICGoogleMapsOptions = class(TPersistent)
  private
    FOwner: TCICWebGoogleMaps;
    FCustomStyle: TStringList;
    FMapStyle: TGoogleMapStyle;
    FDefaultLongitude: Double;
    FDefaultLatitude: Double;
    FDefaultZoomLevel: Integer;
    procedure SetCustomStyle(const Value: TStringList);
  public
    constructor Create(AGoogleMaps: TCICWebGoogleMaps);
    destructor Destroy; override;
    procedure Assign(Source: TPersistent); override;
  published
    property CustomStyle: TStringList read FCustomStyle write SetCustomStyle;
    property MapStyle: TGoogleMapStyle read FMapStyle write FMapStyle default mstDefault;
    property DefaultLatitude: Double read FDefaultLatitude write FDefaultLatitude;
    property DefaultLongitude: Double read FDefaultLongitude write FDefaultLongitude;
    property DefaultZoomLevel: Integer read FDefaultZoomLevel write FDefaultZoomLevel default 8;
  end;

  {$IFNDEF LCLTMSWEB}
  [ComponentPlatforms(TMSWebPlatform)]
  {$ENDIF}
  TCICWebGoogleMaps = class(TWebCustomControl)
  private
    FAPIKey:string;
    FOnMapClick: TMapClickEvent;
    FOnMapDblClick: TMapClickEvent;
    FOnMapZoom: TMapZoomEvent;
    FOnMapPan: TMapClickEvent;
    FOnGeoCoded: TMapClickEvent;
    FOnMapLoaded: TNotifyEvent;
    FOnMapIdle: TNotifyEvent;
    FOnMarkerClick: TMapMarkerClickEvent;
    FOnPolygonClick: TMapPolygonClickEvent;
    FOnPolylineClick: TMapPolylineClickEvent;
    FOnRectangleClick: TMapRectangleClickEvent;
    FOnCircleClick: TMapCircleClickEvent;
    FOnKMLClick: TMapKMLClickEvent;
    FOptions: TCICGoogleMapsOptions;
    function GetCircle(AIndex: integer): TJSObject;
    function GetPolygon(AIndex: integer): TJSObject;
    function GetPolyline(AIndex: integer): TJSObject;
    function GetRectangle(AIndex: integer): TJSObject;
    function GetMarker(AIndex: integer): TJSObject;
  protected
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure SetCenter(Lat, Lon: double);
    function GetCenter(var Lat, Lon: Double): Boolean;
    function GetBounds(var NorthEastLat, NorthEastLon, SouthWestLat, SouthWestLon: Double): Boolean;
    procedure SetDoubleClickZoom(AValue: Boolean);
    procedure SetDraggable(AValue: Boolean);
    procedure SetScrollWheel(AValue: Boolean);
    procedure SetMapType(AMapType: TGoogleMapType = mtDefault);
    procedure SetZoom(Zoom: integer);
    procedure PanTo(Lat, Lon: double);
    procedure AddGPX(AGPX: string; AColor: TColor = clRed; AWidth: integer = 2; AOpacity: Double = 1);
    procedure AddKML(Url: string; ZoomToBounds: Boolean = true);
    procedure AddPolyLine(Points: TJSArray; AColor: TColor = clRed; AWidth: integer = 2; AOpacity: double = 1);
    procedure AddPolygon(Points: TJSArray; AFillColor: TColor = clRed; AStrokeColor: TColor = clBlack; AWidth: integer = 2; AOpacity: double = 1);
    procedure AddCircle(Lat, Lon: double; Radius: Integer; AFillColor: TColor = clRed; AStrokeColor: TColor = clBlack; AWidth: integer = 2; AOpacity: double = 1);
    procedure AddRectangle(NorthEastLat, NorthEastLon, SouthWestLat, SouthWestLon: double; AFillColor: TColor = clRed; AStrokeColor: TColor = clBlack; AWidth: integer = 2; AOpacity: double = 1);
    procedure AddMarker(Lat,Lon: double; Title: string = ''); overload;
    procedure AddMarker(Lat,Lon: double; AColor: TGoogleMarkerColor; Title: string = ''); overload;
    procedure AddMarker(Lat,Lon: double; AColor: TColor; PinLetter: string; Title: string = ''); overload;
    procedure AddMarker(Lat,Lon: double; PinIcon: string; Title: string); overload;
    procedure AddMarker(Lat,Lon: double; Shape: TGoogleMarkerShape; AColor: TColor; Title: string = ''); overload;
    procedure SetMarkerTitle(AIndex: Integer; ATitle: string);
    procedure SetMarkerLocation(AIndex: Integer; Lat, Lon: Double);
    procedure SetMarkerIcon(AIndex: Integer; Url: string);
    procedure SetCircleCenter(AIndex: Integer; Lat, Lon: Double);
    procedure SetCircleRadius(AIndex, Radius: Integer);
    procedure SetCircleColors(AIndex: Integer; AFillColor, AStrokeColor: TColor);
    procedure SetRectangleLocation(AIndex: Integer; NorthEastLat, NorthEastLon, SouthWestLat, SouthWestLon: double);
    procedure SetRectangleColors(AIndex: Integer; AFillColor, AStrokeColor: TColor);
    procedure SetPolylineColor(AIndex: Integer; AColor: TColor);
    procedure SetPolylinePoints(AIndex: Integer; Points: TJSArray);
    procedure SetPolygonColors(AIndex: Integer; AFillColor, AStrokeColor: TColor);
    procedure SetPolygonPoints(AIndex: Integer; Points: TJSArray);
    procedure FitBounds(LatMin,LonMin,LatMax,LonMax: double);
    procedure ClearMarkers;
    procedure ClearKMLs;
    procedure ClearPolylines;
    procedure ClearPolygons;
    procedure ClearCircles;
    procedure ClearRectangles;
    procedure ShowDirections(Source, Destination: string; ATravelMode: TGoogleTravelMode = tmDriving; WayPoints: TStringList = nil; OptimizeWayPoints: Boolean = False; AvoidHighways: Boolean = False; AvoidTolls: Boolean = False); overload;
    procedure ShowDirections(SourceLon, SourceLat, DestLon, DestLat: double; ATravelMode: TGoogleTravelMode = tmDriving; WayPoints: TStringList = nil; OptimizeWayPoints: Boolean = False; AvoidHighways: Boolean = False; AvoidTolls: Boolean = False); overload;
    procedure ShowStreetView(Lat, Lon: Double; Heading: Integer = 0; Zoom: Integer = 0; Pitch: Integer = 0);
    procedure HideStreetView;
    procedure RemoveDirections;
    procedure RemoveMarker(AIndex: Integer);
    procedure RemovePolygon(AIndex: Integer);
    procedure RemovePolyline(AIndex: Integer);
    procedure RemoveCircle(AIndex: Integer);
    procedure RemoveRectangle(AIndex: Integer);
    procedure GeoCode(const Address: string);
    property Markers[AIndex: integer]: TJSObject read GetMarker;
    property Polygons[AIndex: integer]: TJSObject read GetPolygon;
    property Polylines[AIndex: integer]: TJSObject read GetPolyline;
    property Circles[AIndex: integer]: TJSObject read GetCircle;
    property Rectangles[AIndex: integer]: TJSObject read GetRectangle;
  published
    property Align;
    {$IFNDEF LCLTMSWEB}
    property AlignWithMargins;
    {$ENDIF}
    property Anchors;
    property APIKey: string read FAPIKey write FAPIKey;
    property ChildOrder;
    property Options: TCICGoogleMapsOptions read FOptions write FOptions;
    property Visible;

    property OnGeoCoded: TMapClickEvent read FOnGeoCoded write FOnGeoCoded;
    property OnMapClick: TMapClickEvent read FOnMapClick write FOnMapClick;
    property OnMapDblClick: TMapClickEvent read FOnMapDblClick write FOnMapDblClick;
    property OnMapIdle: TNotifyEvent read FOnMapIdle write FOnMapIdle;
    property OnMapPan: TMapClickEvent read FOnMapPan write FOnMapPan;
    property OnMapLoaded: TNotifyEvent read FOnMapLoaded write FOnMapLoaded;
    property OnMapZoom: TMapZoomEvent read FOnMapZoom write FOnMapZoom;
    property OnMarkerClick: TMapMarkerClickEvent read FOnMarkerClick write FOnMarkerClick;
    property OnPolygonClick: TMapPolygonClickEvent read FOnPolygonClick write FOnPolygonClick;
    property OnPolylineClick: TMapPolylineClickEvent read FOnPolylineClick write FOnPolylineClick;
    property OnCircleClick: TMapCircleClickEvent read FOnCircleClick write FOnCircleClick;
    property OnRectangleClick: TMapRectangleClickEvent read FOnRectangleClick write FOnRectangleClick;
    property OnKMLClick: TMapKMLClickEvent read FOnKMLClick write FOnKMLClick;
  end;


  { TCICCesium }
  TCesiumClickEvent = procedure(Sender: TObject; pLat: double; pLon: double) of object;
  TCesiumMouseMoveEvent = procedure(Sender: TObject; pLat: double; pLon: double) of object;

  {$IFNDEF LCLTMSWEB}
  [ComponentPlatforms(TMSWebPlatform)]
  {$ENDIF}
  TCICWebCesium = class(TWebCustomControl)
  private
    FAPIKey:string;
    FOnMapClick: TMapClickEvent;
    FOnMapDblClick: TMapClickEvent;
    FOnMapZoom: TMapZoomEvent;
    FOnMapPan: TMapClickEvent;
    FOnGeoCoded: TMapClickEvent;
    FOnMapLoaded: TNotifyEvent;
    FOnMapIdle: TNotifyEvent;
    FOnMarkerClick: TMapMarkerClickEvent;
    FOnPolygonClick: TMapPolygonClickEvent;
    FOnPolylineClick: TMapPolylineClickEvent;
    FOnRectangleClick: TMapRectangleClickEvent;
    FOnCircleClick: TMapCircleClickEvent;
    FOnKMLClick: TMapKMLClickEvent;
    FOnCeslumClick: TCesiumClickEvent; // ALE 20200301 Cesium
    FOnCesiumMouseMove: TCesiumMouseMoveEvent; // ALE 20200309 Cesium
    FOptions: TCICGoogleMapsOptions;
    function GetCircle(AIndex: integer): TJSObject;
    function GetPolygon(AIndex: integer): TJSObject;
    function GetPolyline(AIndex: integer): TJSObject;
    function GetRectangle(AIndex: integer): TJSObject;
    function GetMarker(AIndex: integer): TJSObject;
  protected
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure SetCenter(Lat, Lon: double);
    function GetCenter(var Lat, Lon: Double): Boolean;
    function GetBounds(var NorthEastLat, NorthEastLon, SouthWestLat, SouthWestLon: Double): Boolean;
    procedure SetDoubleClickZoom(AValue: Boolean);
    procedure SetDraggable(AValue: Boolean);
    procedure SetScrollWheel(AValue: Boolean);
    procedure SetMapType(AMapType: TGoogleMapType = mtDefault);
    procedure SetZoom(Zoom: integer);
    procedure PanTo(Lat, Lon: double);
    procedure AddGPX(AGPX: string; AColor: TColor = clRed; AWidth: integer = 2; AOpacity: Double = 1);
    procedure AddKML(Url: string; ZoomToBounds: Boolean = true);
    procedure AddPolyLine(Points: TJSArray; AColor: TColor = clRed; AWidth: integer = 2; AOpacity: double = 1);
    procedure AddPolygon(Points: TJSArray; AFillColor: TColor = clRed; AStrokeColor: TColor = clBlack; AWidth: integer = 2; AOpacity: double = 1);
    procedure AddCircle(Lat, Lon: double; Radius: Integer; AFillColor: TColor = clRed; AStrokeColor: TColor = clBlack; AWidth: integer = 2; AOpacity: double = 1);
    procedure AddRectangle(NorthEastLat, NorthEastLon, SouthWestLat, SouthWestLon: double; AFillColor: TColor = clRed; AStrokeColor: TColor = clBlack; AWidth: integer = 2; AOpacity: double = 1);
    procedure AddMarker(Lat,Lon: double; Title: string = ''); overload;
    procedure AddMarker(Lat,Lon: double; AColor: TGoogleMarkerColor; Title: string = ''); overload;
    procedure AddMarker(Lat,Lon: double; AColor: TColor; PinLetter: string; Title: string = ''); overload;
    procedure AddMarker(Lat,Lon: double; PinIcon: string; Title: string); overload;
    procedure AddMarker(Lat,Lon: double; Shape: TGoogleMarkerShape; AColor: TColor; Title: string = ''); overload;
    procedure SetMarkerTitle(AIndex: Integer; ATitle: string);
    procedure SetMarkerLocation(AIndex: Integer; Lat, Lon: Double);
    procedure SetMarkerIcon(AIndex: Integer; Url: string);
    procedure SetCircleCenter(AIndex: Integer; Lat, Lon: Double);
    procedure SetCircleRadius(AIndex, Radius: Integer);
    procedure SetCircleColors(AIndex: Integer; AFillColor, AStrokeColor: TColor);
    procedure SetRectangleLocation(AIndex: Integer; NorthEastLat, NorthEastLon, SouthWestLat, SouthWestLon: double);
    procedure SetRectangleColors(AIndex: Integer; AFillColor, AStrokeColor: TColor);
    procedure SetPolylineColor(AIndex: Integer; AColor: TColor);
    procedure SetPolylinePoints(AIndex: Integer; Points: TJSArray);
    procedure SetPolygonColors(AIndex: Integer; AFillColor, AStrokeColor: TColor);
    procedure SetPolygonPoints(AIndex: Integer; Points: TJSArray);
    procedure FitBounds(LatMin,LonMin,LatMax,LonMax: double);
    procedure ClearMarkers;
    procedure ClearKMLs;
    procedure ClearPolylines;
    procedure ClearPolygons;
    procedure ClearCircles;
    procedure ClearRectangles;
    procedure ShowDirections(Source, Destination: string; ATravelMode: TGoogleTravelMode = tmDriving; WayPoints: TStringList = nil; OptimizeWayPoints: Boolean = False; AvoidHighways: Boolean = False; AvoidTolls: Boolean = False); overload;
    procedure ShowDirections(SourceLon, SourceLat, DestLon, DestLat: double; ATravelMode: TGoogleTravelMode = tmDriving; WayPoints: TStringList = nil; OptimizeWayPoints: Boolean = False; AvoidHighways: Boolean = False; AvoidTolls: Boolean = False); overload;
    procedure ShowStreetView(Lat, Lon: Double; Heading: Integer = 0; Zoom: Integer = 0; Pitch: Integer = 0);
    procedure HideStreetView;
    procedure RemoveDirections;
    procedure RemoveMarker(AIndex: Integer);
    procedure RemovePolygon(AIndex: Integer);
    procedure RemovePolyline(AIndex: Integer);
    procedure RemoveCircle(AIndex: Integer);
    procedure RemoveRectangle(AIndex: Integer);
    procedure GeoCode(const Address: string);
    procedure ConsoleLog(const pLogMessage: string);  // ALE 20200228 Cesium
    property Markers[AIndex: integer]: TJSObject read GetMarker;
    property Polygons[AIndex: integer]: TJSObject read GetPolygon;
    property Polylines[AIndex: integer]: TJSObject read GetPolyline;
    property Circles[AIndex: integer]: TJSObject read GetCircle;
    property Rectangles[AIndex: integer]: TJSObject read GetRectangle;
  published
    property Align;
    {$IFNDEF LCLTMSWEB}
    property AlignWithMargins;
    {$ENDIF}
    property Anchors;
    property APIKey: string read FAPIKey write FAPIKey;
    property ChildOrder;
    property Options: TCICGoogleMapsOptions read FOptions write FOptions;
    property Visible;

    property OnGeoCoded: TMapClickEvent read FOnGeoCoded write FOnGeoCoded;
    property OnMapClick: TMapClickEvent read FOnMapClick write FOnMapClick;
    property OnMapDblClick: TMapClickEvent read FOnMapDblClick write FOnMapDblClick;
    property OnMapIdle: TNotifyEvent read FOnMapIdle write FOnMapIdle;
    property OnMapPan: TMapClickEvent read FOnMapPan write FOnMapPan;
    property OnMapLoaded: TNotifyEvent read FOnMapLoaded write FOnMapLoaded;
    property OnMapZoom: TMapZoomEvent read FOnMapZoom write FOnMapZoom;
    property OnMarkerClick: TMapMarkerClickEvent read FOnMarkerClick write FOnMarkerClick;
    property OnPolygonClick: TMapPolygonClickEvent read FOnPolygonClick write FOnPolygonClick;
    property OnPolylineClick: TMapPolylineClickEvent read FOnPolylineClick write FOnPolylineClick;
    property OnCircleClick: TMapCircleClickEvent read FOnCircleClick write FOnCircleClick;
    property OnRectangleClick: TMapRectangleClickEvent read FOnRectangleClick write FOnRectangleClick;
    property OnKMLClick: TMapKMLClickEvent read FOnKMLClick write FOnKMLClick;
    property OnViewerClick: TCesiumClickEvent read FOnCeslumClick write FOnCeslumClick; // ALE 20200301 Cesium
    property OnViewerMouseMove: TCesiumMouseMoveEvent read FOnCesiumMouseMove write FOnCesiumMouseMove; // ALE 20200309 Cesium
  end;

implementation

{ TCICWebGoogleMaps }

procedure TCICWebGoogleMaps.AddMarker(Lat, Lon: double; Title: string);
begin
//
end;

procedure TCICWebGoogleMaps.AddMarker(Lat, Lon: double; AColor: TColor; PinLetter,
  Title: string);
begin
//
end;

procedure TCICWebGoogleMaps.AddMarker(Lat, Lon: double; AColor: TGoogleMarkerColor;
  Title: string);
begin
//
end;

procedure TCICWebGoogleMaps.AddCircle(Lat, Lon: double; Radius: Integer;
  AFillColor, AStrokeColor: TColor; AWidth: integer; AOpacity: double);
begin
//
end;

procedure TCICWebGoogleMaps.AddGPX(AGPX: string; AColor: TColor; AWidth: integer;
  AOpacity: Double);
begin
//
end;

procedure TCICWebGoogleMaps.AddKML(Url: string; ZoomToBounds: Boolean);
begin
//
end;

procedure TCICWebGoogleMaps.AddMarker(Lat, Lon: double; Shape: TGoogleMarkerShape;
  AColor: TColor; Title: string);
begin
//
end;

procedure TCICWebGoogleMaps.AddPolygon(Points: TJSArray; AFillColor,
  AStrokeColor: TColor; AWidth: integer; AOpacity: double);
begin
//
end;

procedure TCICWebGoogleMaps.AddPolyLine(Points: TJSArray; AColor: TColor;
  AWidth: integer; AOpacity: double);
begin
//
end;

procedure TCICWebGoogleMaps.AddRectangle(NorthEastLat, NorthEastLon, SouthWestLat,
  SouthWestLon: double; AFillColor, AStrokeColor: TColor; AWidth: integer;
  AOpacity: double);
begin
//
end;

procedure TCICWebGoogleMaps.AddMarker(Lat, Lon: double; PinIcon, Title: string);
begin
//
end;

procedure TCICWebGoogleMaps.ClearCircles;
begin
//
end;

procedure TCICWebGoogleMaps.ClearKMLs;
begin
//
end;

procedure TCICWebGoogleMaps.ClearMarkers;
begin
//
end;

procedure TCICWebGoogleMaps.ClearPolygons;
begin
//
end;

procedure TCICWebGoogleMaps.ClearPolylines;
begin
//
end;

procedure TCICWebGoogleMaps.ClearRectangles;
begin
//
end;

constructor TCICWebGoogleMaps.Create(AOwner: TComponent);
begin
  inherited;
  FOptions := TCICGoogleMapsOptions.Create(Self);
  Width := 640;
  Height := 480;
end;

destructor TCICWebGoogleMaps.Destroy;
begin
  FOptions.Free;
  inherited;
end;

procedure TCICWebGoogleMaps.FitBounds(LatMin, LonMin, LatMax, LonMax: double);
begin
//
end;

procedure TCICWebGoogleMaps.GeoCode(const Address: string);
begin
//
end;

function TCICWebGoogleMaps.GetBounds(var NorthEastLat, NorthEastLon, SouthWestLat,
  SouthWestLon: Double): Boolean;
begin
  Result := False;
end;

function TCICWebGoogleMaps.GetCenter(var Lat, Lon: Double): Boolean;
begin
  Result := False;
end;

function TCICWebGoogleMaps.GetCircle(AIndex: integer): TJSObject;
begin
  Result := nil;
end;

function TCICWebGoogleMaps.GetMarker(AIndex: integer): TJSObject;
begin
  Result := nil;
end;

function TCICWebGoogleMaps.GetPolygon(AIndex: integer): TJSObject;
begin
  Result := nil;
end;

function TCICWebGoogleMaps.GetPolyline(AIndex: integer): TJSObject;
begin
  Result := nil;
end;

function TCICWebGoogleMaps.GetRectangle(AIndex: integer): TJSObject;
begin
  Result := nil;
end;

procedure TCICWebGoogleMaps.HideStreetView;
begin
//
end;

procedure TCICWebGoogleMaps.PanTo(Lat, Lon: double);
begin
//
end;

procedure TCICWebGoogleMaps.RemoveCircle(AIndex: Integer);
begin
//
end;

procedure TCICWebGoogleMaps.RemoveDirections;
begin
//
end;

procedure TCICWebGoogleMaps.RemoveMarker(AIndex: Integer);
begin
//
end;

procedure TCICWebGoogleMaps.RemovePolygon(AIndex: Integer);
begin
//
end;

procedure TCICWebGoogleMaps.RemovePolyline(AIndex: Integer);
begin
//
end;

procedure TCICWebGoogleMaps.RemoveRectangle(AIndex: Integer);
begin
//
end;

procedure TCICWebGoogleMaps.SetCenter(Lat, Lon: double);
begin
//
end;

procedure TCICWebGoogleMaps.SetCircleCenter(AIndex: Integer; Lat, Lon: Double);
begin
//
end;

procedure TCICWebGoogleMaps.SetCircleColors(AIndex: Integer; AFillColor,
  AStrokeColor: TColor);
begin
//
end;

procedure TCICWebGoogleMaps.SetCircleRadius(AIndex, Radius: Integer);
begin
//
end;

procedure TCICWebGoogleMaps.SetDoubleClickZoom(AValue: Boolean);
begin
//
end;

procedure TCICWebGoogleMaps.SetDraggable(AValue: Boolean);
begin
//
end;

procedure TCICWebGoogleMaps.SetMapType(AMapType: TGoogleMapType);
begin
//
end;

procedure TCICWebGoogleMaps.SetMarkerIcon(AIndex: Integer; Url: string);
begin
//
end;

procedure TCICWebGoogleMaps.SetMarkerLocation(AIndex: Integer; Lat, Lon: Double);
begin
//
end;

procedure TCICWebGoogleMaps.SetMarkerTitle(AIndex: Integer; ATitle: string);
begin
//
end;

procedure TCICWebGoogleMaps.SetPolygonColors(AIndex: Integer; AFillColor,
  AStrokeColor: TColor);
begin
//
end;

procedure TCICWebGoogleMaps.SetPolygonPoints(AIndex: Integer; Points: TJSArray);
begin
//
end;

procedure TCICWebGoogleMaps.SetPolylineColor(AIndex: Integer; AColor: TColor);
begin
//
end;

procedure TCICWebGoogleMaps.SetPolylinePoints(AIndex: Integer; Points: TJSArray);
begin
//
end;

procedure TCICWebGoogleMaps.SetRectangleColors(AIndex: Integer; AFillColor,
  AStrokeColor: TColor);
begin
//
end;

procedure TCICWebGoogleMaps.SetRectangleLocation(AIndex: Integer; NorthEastLat,
  NorthEastLon, SouthWestLat, SouthWestLon: double);
begin
//
end;

procedure TCICWebGoogleMaps.SetScrollWheel(AValue: Boolean);
begin
//
end;

procedure TCICWebGoogleMaps.SetZoom(zoom: integer);
begin
//
end;


procedure TCICWebGoogleMaps.ShowDirections(SourceLon, SourceLat, DestLon,
  DestLat: double; ATravelMode: TGoogleTravelMode; WayPoints: TStringList;
  OptimizeWayPoints, AvoidHighways, AvoidTolls: Boolean);
begin
//
end;

procedure TCICWebGoogleMaps.ShowStreetView(Lat, Lon: Double; Heading, Zoom,
  Pitch: Integer);
begin
//
end;

procedure TCICWebGoogleMaps.ShowDirections(Source, Destination: string;
  ATravelMode: TGoogleTravelMode; WayPoints: TStringList; OptimizeWayPoints,
  AvoidHighways, AvoidTolls: Boolean);
begin
//
end;

{ TGoogleMapsOptions }

procedure TCICGoogleMapsOptions.Assign(Source: TPersistent);
begin
  inherited;
  FCustomStyle := (Source as TCICGoogleMapsOptions).CustomStyle;
  FMapStyle := (Source as TCICGoogleMapsOptions).MapStyle;
  FDefaultLatitude := (Source as TCICGoogleMapsOptions).DefaultLatitude;
  FDefaultLongitude := (Source as TCICGoogleMapsOptions).DefaultLongitude;
  FDefaultZoomLevel := (Source as TCICGoogleMapsOptions).DefaultZoomLevel;
end;

constructor TCICGoogleMapsOptions.Create(AGoogleMaps: TCICWebGoogleMaps);
begin
  inherited Create;
  FCustomStyle := TStringList.Create;
  FMapStyle := mstDefault;
  FDefaultLatitude := -34.397;
  FDefaultLongitude := 150.644;
  FDefaultZoomLevel := 8;
  FOwner := AGoogleMaps;
end;

destructor TCICGoogleMapsOptions.Destroy;
begin
  FCustomStyle.Free;
  inherited;
end;

procedure TCICGoogleMapsOptions.SetCustomStyle(const Value: TStringList);
begin
  FCustomStyle.Assign(Value);
end;

{ TCICWebCesium }

procedure TCICWebCesium.AddMarker(Lat, Lon: double; Title: string);
begin
//
end;

procedure TCICWebCesium.AddMarker(Lat, Lon: double; AColor: TColor; PinLetter,
  Title: string);
begin
//
end;

procedure TCICWebCesium.AddMarker(Lat, Lon: double; AColor: TGoogleMarkerColor;
  Title: string);
begin
//
end;

procedure TCICWebCesium.AddCircle(Lat, Lon: double; Radius: Integer;
  AFillColor, AStrokeColor: TColor; AWidth: integer; AOpacity: double);
begin
//
end;

procedure TCICWebCesium.AddGPX(AGPX: string; AColor: TColor; AWidth: integer;
  AOpacity: Double);
begin
//
end;

procedure TCICWebCesium.AddKML(Url: string; ZoomToBounds: Boolean);
begin
//
end;

procedure TCICWebCesium.AddMarker(Lat, Lon: double; Shape: TGoogleMarkerShape;
  AColor: TColor; Title: string);
begin
//
end;

procedure TCICWebCesium.AddPolygon(Points: TJSArray; AFillColor,
  AStrokeColor: TColor; AWidth: integer; AOpacity: double);
begin
//
end;

procedure TCICWebCesium.AddPolyLine(Points: TJSArray; AColor: TColor;
  AWidth: integer; AOpacity: double);
begin
//
end;

procedure TCICWebCesium.AddRectangle(NorthEastLat, NorthEastLon, SouthWestLat,
  SouthWestLon: double; AFillColor, AStrokeColor: TColor; AWidth: integer;
  AOpacity: double);
begin
//
end;

procedure TCICWebCesium.AddMarker(Lat, Lon: double; PinIcon, Title: string);
begin
//
end;

procedure TCICWebCesium.ClearCircles;
begin
//
end;

procedure TCICWebCesium.ClearKMLs;
begin
//
end;

procedure TCICWebCesium.ClearMarkers;
begin
//
end;

procedure TCICWebCesium.ClearPolygons;
begin
//
end;

procedure TCICWebCesium.ClearPolylines;
begin
//
end;

procedure TCICWebCesium.ClearRectangles;
begin
//
end;

procedure TCICWebCesium.ConsoleLog(const pLogMessage: string);
begin
  //
end;

constructor TCICWebCesium.Create(AOwner: TComponent);
begin
  inherited;
  // TODO ALE FOptions := TCICGoogleMapsOptions.Create(Self);
  Width := 400;
  Height := 300;
end;

destructor TCICWebCesium.Destroy;
begin
  // TODO ALE FOptions.Free;
  inherited;
end;

procedure TCICWebCesium.FitBounds(LatMin, LonMin, LatMax, LonMax: double);
begin
//
end;

procedure TCICWebCesium.GeoCode(const Address: string);
begin
//
end;

function TCICWebCesium.GetBounds(var NorthEastLat, NorthEastLon, SouthWestLat,
  SouthWestLon: Double): Boolean;
begin
  Result := False;
end;

function TCICWebCesium.GetCenter(var Lat, Lon: Double): Boolean;
begin
  Result := False;
end;

function TCICWebCesium.GetCircle(AIndex: integer): TJSObject;
begin
  Result := nil;
end;

function TCICWebCesium.GetMarker(AIndex: integer): TJSObject;
begin
  Result := nil;
end;

function TCICWebCesium.GetPolygon(AIndex: integer): TJSObject;
begin
  Result := nil;
end;

function TCICWebCesium.GetPolyline(AIndex: integer): TJSObject;
begin
  Result := nil;
end;

function TCICWebCesium.GetRectangle(AIndex: integer): TJSObject;
begin
  Result := nil;
end;

procedure TCICWebCesium.HideStreetView;
begin
//
end;

procedure TCICWebCesium.PanTo(Lat, Lon: double);
begin
//
end;

procedure TCICWebCesium.RemoveCircle(AIndex: Integer);
begin
//
end;

procedure TCICWebCesium.RemoveDirections;
begin
//
end;

procedure TCICWebCesium.RemoveMarker(AIndex: Integer);
begin
//
end;

procedure TCICWebCesium.RemovePolygon(AIndex: Integer);
begin
//
end;

procedure TCICWebCesium.RemovePolyline(AIndex: Integer);
begin
//
end;

procedure TCICWebCesium.RemoveRectangle(AIndex: Integer);
begin
//
end;

procedure TCICWebCesium.SetCenter(Lat, Lon: double);
begin
//
end;

procedure TCICWebCesium.SetCircleCenter(AIndex: Integer; Lat, Lon: Double);
begin
//
end;

procedure TCICWebCesium.SetCircleColors(AIndex: Integer; AFillColor,
  AStrokeColor: TColor);
begin
//
end;

procedure TCICWebCesium.SetCircleRadius(AIndex, Radius: Integer);
begin
//
end;

procedure TCICWebCesium.SetDoubleClickZoom(AValue: Boolean);
begin
//
end;

procedure TCICWebCesium.SetDraggable(AValue: Boolean);
begin
//
end;

procedure TCICWebCesium.SetMapType(AMapType: TGoogleMapType);
begin
//
end;

procedure TCICWebCesium.SetMarkerIcon(AIndex: Integer; Url: string);
begin
//
end;

procedure TCICWebCesium.SetMarkerLocation(AIndex: Integer; Lat, Lon: Double);
begin
//
end;

procedure TCICWebCesium.SetMarkerTitle(AIndex: Integer; ATitle: string);
begin
//
end;

procedure TCICWebCesium.SetPolygonColors(AIndex: Integer; AFillColor,
  AStrokeColor: TColor);
begin
//
end;

procedure TCICWebCesium.SetPolygonPoints(AIndex: Integer; Points: TJSArray);
begin
//
end;

procedure TCICWebCesium.SetPolylineColor(AIndex: Integer; AColor: TColor);
begin
//
end;

procedure TCICWebCesium.SetPolylinePoints(AIndex: Integer; Points: TJSArray);
begin
//
end;

procedure TCICWebCesium.SetRectangleColors(AIndex: Integer; AFillColor,
  AStrokeColor: TColor);
begin
//
end;

procedure TCICWebCesium.SetRectangleLocation(AIndex: Integer; NorthEastLat,
  NorthEastLon, SouthWestLat, SouthWestLon: double);
begin
//
end;

procedure TCICWebCesium.SetScrollWheel(AValue: Boolean);
begin
//
end;

procedure TCICWebCesium.SetZoom(zoom: integer);
begin
//
end;


procedure TCICWebCesium.ShowDirections(SourceLon, SourceLat, DestLon,
  DestLat: double; ATravelMode: TGoogleTravelMode; WayPoints: TStringList;
  OptimizeWayPoints, AvoidHighways, AvoidTolls: Boolean);
begin
//
end;

procedure TCICWebCesium.ShowStreetView(Lat, Lon: Double; Heading, Zoom,
  Pitch: Integer);
begin
//
end;

procedure TCICWebCesium.ShowDirections(Source, Destination: string;
  ATravelMode: TGoogleTravelMode; WayPoints: TStringList; OptimizeWayPoints,
  AvoidHighways, AvoidTolls: Boolean);
begin
//
end;

end.
