地圖控制元件
# PinToo 控制元件使用(地圖控制元件)
# 1. TfxAMap
- 引用單元 CCAMap
TfxAMap元件是一個基於高德地圖的定位元件。
TfxAMap通過StartLocation來開啟動定位,通過StopLocation方法結束定位。
開啟定位時,觸發OnLocationChangedCallbackEvent事件,返回定位資訊。
示例
//設定TfxListView
procedure SetViewItem(AText: String; ADetail: String);
begin
with lvLocation.Items.Add do
begin
Text := AText;
Detail := ADetail;
end;
end;
//顯示定位資訊
Procedure fxAMap1OnLocationChangedCallbackEvent(Sender: TObject; ErrorCode: Integer; ErrorInfo: string;
LocationDetail: string; LocationType: Integer; Longitude: Double; Latitude: Double; Altitude: Double;
Accuracy: Single; Provider: string; Speed: Single; Bearing: Single; Satellites: Integer; Country: string;
Province: string; City: string; CityCode: string; District: string; AdCode: string; Address: string;
PoiName: string; LocationTime: string; isWifiAble: Boolean; isWifiAbleString: string; GPSStatus: Integer;
GPSStatusString: string);
Begin
lvLocation.BeginUpdate;
try
lvLocation.Items.Clear;
SetViewItem('提供者:'+ Provider,'');
SetViewItem('經度:'+ FloatToStr(Longitude),'');
SetViewItem('緯度:'+ FloatToStr(Latitude),'');
SetViewItem('海拔:'+ FloatToStr(Altitude) + '米','');
SetViewItem('精度:'+ FloatToStr(Accuracy) + '米','');
SetViewItem('角度:'+FloatToStr(Bearing),'');
SetViewItem('速度:'+ FloatToStr(Speed) + '米 / 秒','');
SetViewItem('國家:'+ Country,'');
SetViewItem('省:'+ Province,'');
SetViewItem('市:'+ City,'');
SetViewItem('城市編碼:'+ CityCode,'');
SetViewItem('區:'+ District,'');
SetViewItem('區域碼:'+ AdCode,'');
SetViewItem('地址:'+ Address,'');
SetViewItem('興趣點:'+ PoiName,'');
SetViewItem('定位時間:'+ LocationTime,'');
SetViewItem('WIFI開關:', isWifiAbleString);
SetViewItem('GPS狀態:', GPSStatusString);
finally
lvLocation.EndUpdate();
end;
End;
//初始化
Begin
lvLocation.ItemAppearanceObjects.ItemEditObjects.Detail.Height := 24;
fxAMap1.StartLocation;
fxAMap1.StopLocation;
End.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# 2. TfxAMapView
- 引用單元 CCAMapView
TfxAMapView元件是一個基於高德地圖的地圖瀏覽元件。
# 2.1. 屬性(Properties)
- TfxAMapView元件主要屬性
屬性 | 功能說明 |
---|---|
Align | 指定此控制元件的對齊選項(頂部、左側、客戶端等)。 |
Anchors | 指定如何將控制元件錨定到其父控制元件。 |
Enabled | 指定控制元件是否響應滑鼠、鍵盤和計時器事件。 |
Height | 指定控制元件的垂直大小(以畫素為單位)。 |
Hint | 指定當使用者將滑鼠移到控制元件上時出現的文字字串。 |
HitTest | 使控制元件能夠捕獲滑鼠事件。 |
Locked | 指定控制元件在設計時是否鎖定。 |
Margins | 指定控制元件的頁邊距。 |
Name | 指定程式碼中引用的元件的名稱。 |
Opacity | 指定控制元件不透明度。 |
Padding | 指定控制元件的填充。 |
PopupMenu | 指定上下文(彈出式)功能表對像 |
Position | 指定當前控制元件的相對於其父控制元件的左上角。 |
RotationAngle | 指定控制元件從x軸旋轉的數量(以度為單位)。 |
RotationCenter | 指定控制元件的軸心點的位置。 |
Scale | 指定控制元件的規模。 |
Size | 指定垂直和水平大小(大小。控制元件的高度和大小(以畫素為單位)。 |
Touch | 指定與控制元件關聯的觸控管理器元件。 |
Visible | 指定元件是否顯示在螢幕上。 |
Width | 指定控制元件的水平大小(以畫素為單位)。 |
WrapMode | 指定是否以及如何調整點陣圖影象的大小、複製和位置以呈現TfxImage表面。 |
# 2.1.1. Align屬性
指定此控制元件的對齊選項(頂部,左側,客戶端等)。
使用「 對齊」自動設定目前控制元件的對齊方式。將「 對齊」設定為與None可能影響控制元件的 位置,大小(高度和寬度)以及錨點不同的值。預設情況下,「 對齊」設定為None。
設定了Align或Anchors屬性的控制元件可以使用與預設值(1,1)不同的Scale,這樣即使控制元件具有自定義比例,它們也可以對齊。
# 2.1.2. Anchors屬性
指定控制元件如何錨定到其父級。
使用錨點可確保控制元件相對於父控制元件的邊緣保持目前位置,即使父控制元件已調整大小。當它的父的大小時,控制保持相對於其所被固定的邊緣的位置。僅在調整父控制元件的大小時才強制執行錨定。
如果控制元件同時錨固到相對的邊緣,則控制元件將水平或垂直拉伸以保持控制元件邊緣和父邊緣之間的距離恒定。如果控制元件錨定到其父級的所有四個邊緣,則控制元件將在所有方向上拉伸。預設情況下,控制元件固定在其容器的頂部和左側邊緣(Anchors = [akTop,akLeft]
)。
自動對齊可能會影響控制元件的錨點。當對齊設定為None所有的主播都可用。如果Align
不是None
,則排除受自動對齊影響的錨點。更改受自動對齊影響的錨的狀態對控制元件沒有影響。
設定了Align
或Anchors
屬性的控制元件可以使用與預設值(1,1)不同的Scale
,這樣即使控制元件具有自定義比例,它們也可以對齊。
# 2.1.3. Enabled屬性
指定控制元件是否響應滑鼠,鍵盤和計時器事件。
使用Enabled
可以更改控制元件對使用者的可用性。要禁用控制元件,請將Enabled
設定為False
。一些禁用的控制元件顯示為灰色(例如:按鈕,覈取方塊,標籤),而其他一些(容器控制元件)僅失去其功能而不更改其外觀。
如果Enabled
設定為False
,則控制元件將忽略滑鼠,鍵盤和計時器事件。
要重新啟用控制元件,請將Enabled
設定為True
。
# 2.1.4. Height屬性
指定控制元件的垂直大小(以畫素為單位)。
使用Height屬性讀取或更改控制元件的高度。
# 2.1.5. Hint屬性
指定當使用者將滑鼠移到控制元件上時出現的文字字串。
# 2.1.6. HitTest屬性
使控制元件能夠捕獲滑鼠事件。
# 2.1.7. Locked屬性
指定控制元件在設計時是否鎖定。
# 2.1.8. Margins屬性
指定控制元件的頁邊距。
Margins(頁邊距)
的控制的從每個邊緣的距離(以畫素為單位)(top(頂部), left(左邊), bottom(底部), right(右側)),以相同的內另一父控制或其父邊緣。 邊距為控制元件的外側增加了空間。
如果邊距不為0,則沒有其他控制元件比指定距離更接近該控制元件。如果從父級邊到相應控制邊的距離小於該邊的指定邊距,則在必要時重新調整控制元件的位置和大小,以保持指定的距離。
下圖顯示了 Padding(填充)
和 Margins(邊距)
屬性如何影響控制元件的對齊方式,位置和大小。
# 2.1.9. MarginsWrapMode屬性
指定如何調整點陣圖的邊距大小,複製和定位。
使用MarginWrapMode屬性設定並獲取如何在TImage中顯示點陣圖的邊距。預設情況下,頁邊距被拉伸以填充整個TImage。要檢視MarginWrapMode的可能值,請轉到TImageWrapMode。
如果未設定BitmapMargins屬性,則MarginWrapMode對影象無效。
# 2.1.10. Name屬性
指定程式碼中引用的元件的名稱。
使用名稱更改元件的名稱以反映其在目前應用程式中的用途。預設情況下,IDE根據元件的型別分配順序名稱,如『fxButton1』、『fxButton2』等。
警告:在運行時更改名稱將導致對舊名稱的任何引用變得未定義。任何使用舊名稱的後續程式碼都將導致異常。
# 2.1.11. Opacity屬性
指定控制元件不透明度。
設定不透明度屬性值可自定義目前控制元件的透明度。
不透明度屬性的取值範圍為0到1。如果不透明度為1,則控制元件完全不透明;否則,控制元件完全不透明。如果為0,則控制元件是完全透明的。大於1的值視為1,小於0的值視為0。
不透明度適用於控制元件的子控制元件。
# 2.1.12. Padding屬性
指定控制元件的填充。
控制元件的填充指定控制元件的子級可以接近其每個邊緣(上,左,下,右)的程度(以畫素為單位)。填充為控制元件的內側增加了空間。
如有必要,請調整控制元件的子級的位置和大小,以保持Padding。
下圖顯示了 Padding(填充)
和 Margins(邊距)
屬性如何影響控制元件的對齊方式,位置和大小。
# 2.1.13. PopupMenu屬性
指定上下文(彈出式)功能表對象。
# 2.1.14. Position屬性
指定當前控制元件的相對於其父控制元件的左上角。
Position(位置)可以受到其父控制元件的填充和控制元件的空白的影響。
# 2.1.15. RotationAngle屬性
指定控制元件從x軸旋轉的量(以度為單位)。
正角對應于順時針旋轉。對於逆時針旋轉,請使用負值。
要設定旋轉中心,請使用RotationCenter
屬性。
# 2.1.16. RotationCenter屬性
指定控制元件的軸心點的位置。
旋轉中心的座標取值範圍為0到1。座標為(0,0)的點對應于控制元件的左上角,座標為(1,1)的點對應于控制元件的左上角。控制元件的右下角,預設旋轉中心為(0.5,0.5),[0,0]和[1,1]之外的值可以在某些後代類中裁剪。
要設定旋轉角度,請使用 RotationAngle
屬性。
# 2.1.17. Scale屬性
指定控制元件的比例。
設定比例座標以指定每個軸上的比例。
每個軸的初始縮放比例為1。
注意:設定 了'對齊'或'錨點'屬性的控制元件可以使用與預設值(1,1)不同的比例,這樣,即使控制元件具有自定義比例,它們也可以對齊。
# 2.1.18. Size屬性
指定垂直和水平大小(大小。控制元件的高度和大小(以畫素為單位)。
使用Size屬性讀取或更改控制元件的大小。
# 2.1.19. Touch屬性
指定與控制元件關聯的觸控管理器元件。
使用「 觸控」屬性可以訪問與控制元件關聯的手勢選項。Touch指定型別為TTouchManager的類。
觸控用於:
關聯TfxGestureManager。
(TfxGestureManager管理控制元件可以使用的所有標準手勢。)
選擇標準,互動式或自定義手勢以與控制元件關聯。
(您還可以將每個手勢連線到一個動作;請參閱將動作分配給手勢。)
# 2.1.20. Visible屬性
指定元件是否顯示在螢幕上。
在運行時使用可視屬性來控制控制元件的可見性。如果Visible為真,則出現控制元件。如果可見為假,則控制元件不可見。
# 2.2. 事件(Events)
- TfxAMapView元件主要事件
事件 | 何時觸發 |
---|---|
OnLocationChangedCallbackEvent | 當位置發生改變時觸發 |
OnMapClickCallbackEvent | 當單擊地圖時觸發 |
OnMapScreenShotCallbackEvent | 獲取地圖截圖時觸發 |
OnMarkerClickCallbackEvent | 當單價地圖上標記時觸發 |
# 2.2.1. OnLocationChangedCallbackEvent事件
{ 參數:
ErrorCode: Integer; // 錯誤程式碼
ErrorInfo: string; // 錯誤資訊
LocationDetail: string; // 描述
LocationType: Integer; // 定位型別
Longitude: Double; // 經 度
Latitude: Double; // 緯 度
Altitude: Double; // 海拔
Accuracy: Single; // 精度 米
Provider: string; // 提供者
Speed: Single; // 速度 米/秒
Bearing: Single; // 角 度
Satellites: Integer; // 定位服務的衛星個數
Country: string; // 國 家
Province: string; // 省
City: string; // 市
CityCode: string; // 城市編碼
District: string; // 區
AdCode: string; // 區域 碼
Address: string; // 地 址
PoiName: string; // 興趣點
LocationTime: string; // 定位時間
isWifiAble: Boolean; // WIFI開關
isWifiAbleString: string; // WIFI開關
GPSStatus: Integer; // GPS狀態
GPSStatusString: string // GPS狀態
}
Procedure OnLocationChangedCallbackEvent(Sender: TObject; ErrorCode: Integer; ErrorInfo: string; LocationDetail: string; LocationType: Integer; Longitude: Double; Latitude: Double; Altitude: Double; Accuracy: Single; Provider: string; Speed: Single; Bearing: Single; Satellites: Integer; Country: string; Province: string; City: string; CityCode: string; District: string; AdCode: string; Address: string; PoiName: string; LocationTime: string; isWifiAble: Boolean; isWifiAbleString: string; GPSStatus: Integer; GPSStatusString: string);
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
當位置發生改變時,觸發該事件,並返回位置資訊。
示例
//在地圖上顯示我的位置標記
if ErrorCode = 0 then
begin
fxLabel1.Text := Address;
fxAMapView1.Zoom(18);
fxAMapView1.AddMarker3(Longitude + 0.00026, Latitude + 0.00016,'我是您的鄰居', '遠親不如緊鄰!', true, 0.0, true);
end;
2
3
4
5
6
7
# 2.2.2. OnMapClickCallbackEvent事件
//參數:TCCAMapLatLng 經緯度
Procedure fxAMapView1OnMapClickCallbackEvent(Sender: TObject; ALatLng: TCCAMapLatLng);
2
在地圖上單擊時觸發該事件。
示例
//單擊地圖的時候,在地圖上新增一個標記
fxAMapView1.Zoom(18);
fxAMapView1.AddMarker2(ALatLng.Longitude + 0.00026, ALatLng.Latitude + 0.00016, true, fxImage1.Bitmap);
2
3
# 2.2.3. OnMapScreenShotCallbackEvent事件
//參數:ABitmap 地圖截圖
Procedure fxAMapView1OnMapScreenShotCallbackEvent(Sender: TObject; ABitmap: TBitmap);
2
獲取地圖截圖時觸發該事件。
示例
//將地圖截圖賦值圖片控制元件
fxImage1.Bitmap := ABitmap;
2
# 2.2.4. OnMarkerClickCallbackEvent事件
//參數:ALatLng 地圖示記經緯度
Procedure fxAMapView1OnMarkerClickCallbackEvent(Sender: TObject; ALatLng: TCCAMapLatLng);
2
當單擊地圖上標記時觸發該事件。
示例
//獲取標記的經緯度
Showmessage('經度:'+FloatToStr(ALatLng.FLongitude)+',維度:'+FloatToStr(ALatLng.FLatitude));
2
# 2.3. 方法(Methods)
- TfxAMapView元件主要方法
方法 | 功能說明 |
---|---|
SetMapLanguage | 設定地圖語言 |
SetMapType | 設定地圖型別 |
MoveCamera | 移動視角 |
AddMarker1 | 往地圖上新增一個標記 |
AddMarker2 | 往地圖上新增一個標記 |
AddMarker3 | 往地圖上新增一個標記 |
AddMarker4 | 往地圖上新增一個標記 |
addOverlayToMap | 往地圖上新增一個groundoverlay覆蓋物 |
Clear | 從地圖上刪除所有的overlay(marker,circle,polyline 等對像) |
getMapScreenShot | 獲取地圖截圖 |
SetMyLocationEnabled | 設定我的位置是否啟用 |
ShowMyLocationSingle | 顯示我的位置圖示(指定圖示序號) |
ShowMyLocationBitmap | 顯示我的位置圖示(指定圖像) |
HideMyLocation | 隱藏我的位置 |
SetMyLocationType | 設定我的位置型別 |
SetMyLocationButtonEnabled | 設定我的位置按鈕是否啟用 |
setCompassEnabled | 設定羅盤是否啟用 |
setScaleControlsEnabled | 設定是否顯示比例尺 |
Zoom | 放大縮小地圖 |
addPolylineFromLatLng | |
addPolylineFromLatLngList | |
addPolylineInPlayGround | |
startMove | 開始移動 |
stopLocation | 停止定位 |
# 2.3.1. SetMapLanguage方法
//功能:設定地圖語言
//返回值:無
//參數:AValue 語言標記 zh_cn 中文,en 英文
{
CCAMap_Language_CHINESE = 'zh_cn'; // 中文地圖
CCAMap_Language_ENGLISH = 'en'; // 英文地圖
}
procedure SetMapLanguage(AValue: string);
2
3
4
5
6
7
8
示例
//設定為中文地圖
fxAMapView1.SetMapLanguage('zh_cn');
//設定為英文地圖
fxAMapView1.SetMapLanguage('en');
2
3
4
# 2.3.2. SetMapType方法
//功能:設定地圖模式
//返回值:無
//參數:AValue 地圖模式
// MAP_TYPE_NORMAL = 1 普通地圖,值為1;
// MAP_TYPE_SATELLITE = 2 衛星地圖,值為2;
// MAP_TYPE_NIGHT = 3 黑夜地圖,夜間模式,值為3;
// MAP_TYPE_NAVI = 4 導航模式,值為4;
// MAP_TYPE_BUS = 5 公交模式,值為5
procedure SetMapType(AValue: TCCAMap_MapType);
2
3
4
5
6
7
8
9
10
示例
//設定為普通地圖
fxAMapView1.SetMapType(MAP_TYPE_NORMAL);
//設定為衛星地圖
fxAMapView1.SetMapType(MAP_TYPE_SATELLITE);
//設定為黑夜地圖
fxAMapView1.SetMapType(MAP_TYPE_NIGHT);
//設定為導航模式
fxAMapView1.SetMapType(MAP_TYPE_NAVI);
//設定為公交模式
fxAMapView1.SetMapType(MAP_TYPE_BUS);
2
3
4
5
6
7
8
9
10
# 2.3.3. MoveCamera方法
//功能:移動視角
//返回值:無
//參數:
// target為LatLng位置,zoom為縮放級別,bearing為可視區域指向的方向,以角度為單位,正北方向為0度,tilt為目標可視區域的傾斜度,以角度為單位。)
procedure MoveCamera(ALongitude: Double; ALatitude: Double; AZoom: Single; ATilt: Single; ABearing: Single);
2
3
4
5
# 2.3.4. AddMarker1方法
//功能:往地圖上新增一個標記
//返回值:無
//參數:
//ALongitude:經度
//ALatitude:維度
//ADraggable:是否為可拖動標記
//AMarkerIcon:標記圖示型別
{
// 標記型別
CCAMap_MarkerType_HUE_RED = 0.0;
CCAMap_MarkerType_HUE_ORANGE = 30.0;
CCAMap_MarkerType_HUE_YELLOW = 60.0;
CCAMap_MarkerType_HUE_GREEN = 120.0;
CCAMap_MarkerType_HUE_CYAN = 180.0;
CCAMap_MarkerType_HUE_AZURE = 210.0;
CCAMap_MarkerType_HUE_BLUE = 240.0;
CCAMap_MarkerType_HUE_VIOLET = 270.0;
CCAMap_MarkerType_HUE_MAGENTA = 300.0;
CCAMap_MarkerType_HUE_ROSE = 330.0;
}
procedure AddMarker1(ALongitude: Double; ALatitude: Double; ADraggable: Boolean; AMarkerIcon: Single);
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
示例
fxAMapView1.AddMarker3(Longitude + 0.00026, Latitude + 0.00016,'我是您的鄰居', '遠親不如緊鄰!', true, CCAMap_MarkerType_HUE_ROSE);
# 2.3.5. AddMarker2方法
//功能:往地圖上新增一個標記
//返回值:無
//參數:
//ALongitude:經度
//ALatitude:維度
//ADraggable:是否為可拖動標記
//AMarkerIcon:標記圖示對像
procedure AddMarker2(ALongitude: Double; ALatitude: Double; ADraggable: Boolean; AMarkerIcon: TBitmap);
2
3
4
5
6
7
8
示例
fxAMapView1.Zoom(18);
fxAMapView1.AddMarker2(ALatLng.Longitude + 0.00026, ALatLng.Latitude + 0.00016, true, fxImage1.Bitmap);
2
# 2.3.6. AddMarker3方法
//功能:往地圖上新增一個標記
//返回值:無
//參數:
//ALongitude:經度
//ALatitude:維度
//ADraggable:是否為可拖動標記
//AMarkerIcon:標記圖示序號
//ATitle:標記標籤
//ASnippet:標記小標籤
//AShowInfoWindow:是否顯示資訊視窗
procedure AddMarker3(ALongitude: Double; ALatitude: Double; ATitle: string; ASnippet: string; ADraggable: Boolean;
AMarkerIcon: Single; AShowInfoWindow: Boolean);
2
3
4
5
6
7
8
9
10
11
12
示例
fxAMapView1.AddMarker3(Longitude + 0.00026, Latitude + 0.00016,'我是您的鄰居', '遠親不如緊鄰!', true, CCAMap_MarkerType_HUE_ROSE, true);
# 2.3.7. AddMarker4方法
//功能:往地圖上新增一個標記
//返回值:無
//參數:
//ALongitude:經度
//ALatitude:維度
//ADraggable:是否為可拖動標記
//AMarkerIcon:標記圖示對像
//ATitle:標記標籤
//ASnippet:標記小標籤
//AShowInfoWindow:是否顯示資訊視窗
procedure AddMarker4(ALongitude: Double; ALatitude: Double; ATitle: string; ASnippet: string; ADraggable: Boolean;
AMarkerIcon: TBitmap; AShowInfoWindow: Boolean);
2
3
4
5
6
7
8
9
10
11
12
示例
fxAMapView1.AddMarker3(Longitude + 0.00026, Latitude + 0.00016,'我是您的鄰居', '遠親不如緊鄰!', true, fxImage1.Bitmap, true);
# 2.3.8. addOverlayToMap方法
//功能:往地圖上新增一個groundoverlay覆蓋物
//返回值:無
//參數:
//ALongitude:經度
//ALatitude:維度
//GroundOverlay:覆蓋物圖片
procedure addOverlayToMap(ALongitude: Double; ALatitude: Double; GroundOverlay: TBitmap);
2
3
4
5
6
7
示例
fxAMapView1.AddMarker3(Longitude + 0.00026, Latitude + 0.00016, fxImage1.Bitmap);
# 2.3.9. Clear方法
//功能:從地圖上刪除所有的overlay(marker,circle,polyline 等對像)
procedure Clear;
2
# 2.3.10. getMapScreenShot方法
//功能:獲取地圖截圖
//返回值:截圖成功執行OnMapScreenShotCallbackEvent事件,並返回Bitmap對像
//參數:無
procedure getMapScreenShot;
2
3
4
# 2.3.11. SetMyLocationEnabled方法
//功能:設定我的位置是否啟用
//返回值:無
//參數:enabled = true 或 false
procedure SetMyLocationEnabled(enabled: Boolean);
2
3
4
示例
//顯示我的位置
fxAMapView1.SetMyLocationEnabled(true);
//禁用我的位置
fxAMapView1.SetMyLocationEnabled(false);
2
3
4
# 2.3.12. ShowMyLocationSingle方法
//功能:設定我的位置圖示
//返回值:無
//參數:AMarkerIcon 我的位置圖示序號
procedure ShowMyLocationSingle(AMarkerIcon: Single);
2
3
4
示例
fxAMapView1.ShowMyLocationSingle(CCAMap_MarkerType_HUE_ROSE);
# 2.3.13. ShowMyLocationBitmap方法
//功能:設定我的位置圖示
//返回值:無
//參數:AMarkerIcon 我的位置圖示對像
procedure ShowMyLocationBitmap(AMarkerIcon: TBitmap);
2
3
4
示例
fxAMapView1.ShowMyLocationBitmap(fxImage1.Bitmap);
# 2.3.14. HideMyLocation方法
//功能:隱藏我的位置
//返回值:無
//參數:AMarkerIcon 我的位置圖示對像
procedure HideMyLocation;
2
3
4
# 2.3.15. SetMyLocationType方法
//功能:設定我的位置型別
//返回值:無
//參數:AMyLocationType 我的位置型別
{
TCCAMap_MyLocationType = (
LOCATION_TYPE_SHOW = 0, // 只定位一次。
LOCATION_TYPE_LOCATE = 1, // 定位一次,且將視角移動到地圖中心點。
LOCATION_TYPE_FOLLOW = 2, // 連續定位、且將視角移動到地圖中心點,定位藍點跟隨設備移動。(1秒1次定位)
LOCATION_TYPE_MAP_ROTATE = 3,// 連續定位、且將視角移動到地圖中心點,地圖依照設備方向旋轉,定位點會跟隨設備移動。(1秒1次定位)
LOCATION_TYPE_LOCATION_ROTATE = 4,// 連續定位、且將視角移動到地圖中心點,定位點依照設備方向旋轉,並且會跟隨設備移動。(1秒1次定位)預設執行此種模式。
// 以下三種模式從5.1.0版本開始提供
LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER = 5,// 連續定位、藍點不會移動到地圖中心點,定位點依照設備方向旋轉,並且藍點會跟隨設備移動。
LOCATION_TYPE_FOLLOW_NO_CENTER = 6, // 連續定位、藍點不會移動到地圖中心點,並且藍點會跟隨設備移動。
LOCATION_TYPE_MAP_ROTATE_NO_CENTER);// 連續定位、藍點不會移動到地圖中心點,地圖依照設備方向旋轉,並且藍點會跟隨設備移動。
}
procedure SetMyLocationType(AMyLocationType: TCCAMap_MyLocationType);
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
示例
//只定位一次
fxAMapView1.SetMyLocationType(LOCATION_TYPE_SHOW);
//定位一次,且將視角移動到地圖中心點
fxAMapView1.SetMyLocationType(LOCATION_TYPE_LOCATE);
//連續定位、且將視角移動到地圖中心點,定位藍點跟隨設備移動。(1秒1次定位)
fxAMapView1.SetMyLocationType(LOCATION_TYPE_FOLLOW);
2
3
4
5
6
# 2.3.16. SetMyLocationButtonEnabled方法
//功能:設定我的位置按鈕是否啟用
//返回值:無
//參數:MyLocationButtonEnabled 是否啟用
procedure SetMyLocationButtonEnabled(MyLocationButtonEnabled: Boolean);
2
3
4
示例
//啟用我的位置按鈕
fxAMapView1.SetMyLocationButtonEnabled(true);
//禁用我的位置按鈕
fxAMapView1.SetMyLocationButtonEnabled(false);
2
3
4
# 2.3.17. setCompassEnabled方法
//功能:設定羅盤是否啟用
//返回值:無
//參數:CompassEnabled 是否啟用
procedure setCompassEnabled(CompassEnabled: Boolean);
2
3
4
示例
//啟用羅盤
fxAMapView1.setCompassEnabled(true);
//禁用羅盤
fxAMapView1.setCompassEnabled(false);
2
3
4
# 2.3.18. setScaleControlsEnabled方法
//功能:設定是否顯示比例尺
//返回值:無
//參數:scaleControlsEnabled 是否啟用
procedure setScaleControlsEnabled(scaleControlsEnabled: Boolean);
2
3
4
示例
//顯示比例尺
fxAMapView1.setScaleControlsEnabled(true);
//禁用比例尺
fxAMapView1.setScaleControlsEnabled(false);
2
3
4
# 2.3.19. Zoom方法
//功能:放大縮小地圖
//返回值:無
//參數:zoomTo 放大倍數
procedure Zoom(zoomTo: Single);
2
3
4
示例
//放大18倍
fxAMapView1.Zoom(18);
2
# 2.3.20. addPolylineFromLatLng方法
procedure addPolylineFromLatLng(APoint: TCCAMapLatLng; APolylineOptions: TCCPolylineOptions);
# 2.3.21. addPolylineFromLatLngList方法
procedure addPolylineFromLatLngList(APoints: TArray<TCCAMapLatLng>; APolylineOptions: TCCPolylineOptions);
# 2.3.22. addPolylineInPlayGround方法
procedure addPolylineInPlayGround(APoints: TArray<TCCAMapLatLng>);
# 2.3.23. startMove方法
//功能:開始移動
//返回值:無
//參數:無
procedure startMove;
2
3
4
# 2.3.24. stopLocation方法
//功能:停止定位
//返回值:無
//參數:無
procedure stopLocation;
2
3
4
# 3. TfxFNCMaps
此控制元件是地圖服務的抽像層展示,可通過地圖資訊服務商提供的API來實現特定的地圖顯示的功能。
關於自定義的圖形新增方法如下,請根據示例進行說明。
- 新增標記的示例。
//支援自定義標記型別
fxFNCMaps1.AddMarker(25.047468, 121.509705,'<font color="red"><b>Car</b></font><br>','https://s1.imagehub.cc/images/2022/08/24/car.png').DataInteger := 0;
fxFNCMaps1.AddMarker(24.212871, 120.670919,'<font color="red"><b>Car</b></font><br>','https://s1.imagehub.cc/images/2022/08/24/car.png').DataInteger := 1;
fxFNCMaps1.AddMarker(24.674813, 121.478387,'<font color="red"><b>Car</b></font><br>','https://s1.imagehub.cc/images/2022/08/24/car.png').DataInteger := 2;
fxFNCMaps1.AddMarker(25.499806, 119.549742,'<font color="red"><b>Cust</b></font><br>','https://s1.imagehub.cc/images/2022/08/24/cust.png').DataInteger := 3;
fxFNCMaps1.AddMarker(22.761620, 121.143498,'<font color="red"><b>Supply</b></font><br>','https://s1.imagehub.cc/images/2022/08/24/supply.png').DataInteger := 4;
fxFNCMaps1.AddMarker(24.202322, 120.711247,'<font color="red"><b>meter</b></font><br>','https://s1.imagehub.cc/images/2022/08/24/meter.png').DataInteger := 5;
fxFNCMaps1.SetCenterCoordinate(25.499806, 119.549742);
ZoomLevel := 8;
fxFNCMaps1.SetZoomLevel(ZoomLevel);
2
3
4
5
6
7
8
9
10
11
12
- 新增彈窗的示例。
var
s: String;
prevPopup: String;
begin
if prevPopUp <> '' then
fxFNCMaps1.ClosePopup(prevPopUp);
s :='<font color="red"><b>IsoFace</b></font><br>'
+ '<iframe width="240" height="240" src="https://isoface.net/isoface/images/video/rocket_2.mp4" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"></iframe>';
prevPopUp := fxFNCMaps1.ShowPopup(25.042232, 121.559655,s,-80,50);
fxFNCMaps1.SetCenterCoordinate(25.042232, 121.559655);
End;
2
3
4
5
6
7
8
9
10
11
12
- 新增路徑的示例。
var
cdsData:TfxRFDataSet;
Begin
cdsData:=TfxRFDataSet.Create(nil);
try
{ 新增欄位 }
cdsData.FieldDefs.Add('Latitude',ftFMTBcd,4,false);
cdsData.FieldDefs.Add('Longitude',ftFMTBcd,4,false);
{ 建立建數據集, 不可缺少的一步 }
cdsData.CreateDataSet;
AddRecord(cdsData,25.043759, 121.494587);
AddRecord(cdsData,25.053090, 121.505574);
AddRecord(cdsData,25.064662, 121.506369);
AddRecord(cdsData,25.072282, 121.506712);
AddRecord(cdsData,25.089073, 121.497614);
AddRecord(cdsData,25.094980, 121.490576);
fxFNCMaps1.LoadGPXDataSet(cdsData,true,true,3,Orangered,false,false,600);
fxFNCMaps1.AddMarker(25.043759, 121.494587,'<font color="green"><b>Start</b></font><br>','https://s1.imagehub.cc/images/2022/08/24/location.png');
fxFNCMaps1.AddMarker(25.094980, 121.490576,'<font color="red"><b>Stop</b></font><br>','https://s1.imagehub.cc/images/2022/08/24/location.png');
fxFNCMaps1.SetCenterCoordinate(25.043759, 121.494587);
ZoomLevel := 12.5;
fxFNCMaps1.SetZoomLevel(ZoomLevel);
Finally
//Except {ErrorMsg / RaiseMsg(Const Error:String)}
cdsData.Free;
End;
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 3.1. 屬性
# 3.1.1. APIKey
property APIKey: UnicodeString;
用於設定APIKey,對於部分地圖資訊提供商,需要填寫此屬性后才可使用。
# 3.1.2. Circles
property Circles: TTMSFNCMapsCircles;
圓標記的管理。點選控制元件屬性結構列表,通過新增按鈕可手動新增標記。新增的標記包含以下屬性:
名稱 | 說明 |
---|---|
Center | 設定圓的中心位置,指定標記的緯度與經度位置 |
FillColor | 圓所使用的填充層的顏色 |
FillOpacity | 填充層的透明度 |
Radius | 圓的半徑 |
StrokeColor | 圓邊線的顏色 |
StrokeOpacity | 圓邊線的透明度 |
StrokeWidth | 圓邊線的畫素寬度 |
Visible | 是否顯示 |
# 3.1.3. ElementContainer
property ElementContainer: TTMSFNCElementContainer;
通過此屬性的設定,可在地圖上層新增HTML與CSS元素。通過Actions 可建立自定義控制元件,這部分內容與地圖服務相互獨立,在任何地圖服務下均顯示為相同的效果。點選控制元件屬性結構列表,通過新增按鈕可手動新增。新增的元素包含以下屬性:
名稱 | 說明 |
---|---|
Actions | 設定執行的動作 |
HTML | 元素的HTML |
HTMLElementClass | 元素的類名稱 |
HTMLElementID | 元素的ID |
# 3.1.4. Markers
property Markers: TTMSFNCMapsMarkers;
地圖示記的管理。點選控制元件屬性結構列表,通過新增按鈕可手動新增。新增的標記包含以下屬性:
名稱 | 說明 |
---|---|
IconURL | 如使用自定義圖示,則在此處指定自定義圖示的URL |
Latitude | 指定標記所在的緯度 |
Longtitude | 指定標記所在的經度 |
Title | 標記的標題資訊 |
Visible | 標記是否可見 |
# 3.1.5. Polygons
property Polygons: TTMSFNCPolygons;
多邊形標記的管理,點選控制元件屬性結構列表,通過新增按鈕可手動新增。新增的標記包含以下屬性:
名稱 | 說明 |
---|---|
Coordinates | 多邊形的角所在的經緯度位置 |
FillColor | 填充層的顏色 |
FillOpacity | 填充層的透明度 |
StrokeColor | 邊線的顏色 |
StrokeOpacity | 邊線的透明度 |
StrokeWidth | 邊線的畫素寬度 |
Visible | 是否顯示 |
# 3.1.6. Polylines
property Polylines: TTMSFNCPolylines;
折線標記的管理,點選控制元件屬性結構列表,通過新增按鈕可手動新增。新增的標記包含以下屬性:
名稱 | 說明 |
---|---|
Coordinates | 折線的端點所在的經緯度位置 |
StrokeColor | 邊線的顏色 |
StrokeOpacity | 邊線的透明度 |
StrokeWidth | 邊線的畫素寬度 |
Visible | 是否顯示 |
# 3.1.7. Rectangles
property Rectangles: TTMSFNCRectangles;
矩形標記的管理,點選控制元件屬性結構列表,通過新增按鈕可手動新增。新增的標記包含以下屬性:
名稱 | 說明 |
---|---|
Bounds | 設定定位邊線的座標位置,需為 NorthEast 與 SouthWest 設定經緯度位置。 |
FillColor | 填充層的顏色 |
FillOpacity | 填充層的透明度 |
StrokeColor | 邊線的顏色 |
StrokeOpacity | 邊線的透明度 |
StrokeWidth | 邊線的畫素寬度 |
Visible | 是否顯示 |
# 3.1.8. Service
property Service: TTMSFNCMapsService;
設定地圖服務的提供商。您可以在程式中動態切換地圖服務提供商,動態切換后,已設定的標記、折線、多邊形等仍然會保留。但是定位資訊與縮放等會恢復至預設設定。可選專案如下:
名稱 | 說明 |
---|---|
msAzureMaps | Azure 地圖 |
msBingMaps | Bing 地圖 |
msGoogleMaps | Google 地圖 |
msHere | Here 地圖 |
msMapBox | MapBox 地圖 |
msMapKit | MapKit 地圖 |
msOpenLayers | OpenLayers 地圖 |
msTomTom | TomTom 地圖 |
# 3.2. 方法
# 3.2.1. BeginUpdate
procedure BeginUpdate;
開始執行更新。
# 3.2.2. EndUpdate
procedure EndUpdate;
結束更新。
# 3.2.3. AddMarkerRec
function AddMarkerRec(var ACoordinate: TTMSFNCMapsCoordinateRec;ATitle: UnicodeString;AIconURL:UnicodeString): TTMSFNCOpenLayersMarker;
在地圖的指定位置新增標記。
var
Coordinate: TTMSFNCMapsCoordinateRec;
begin
Coordinate.Logtitude := 49.0564068515288;
Coordinate.Latitude := 24.1373163639494;
fxFNCMaps1.AddMarkerRec(Coordinate,'','');
end;
2
3
4
5
6
7
# 3.2.4. AddMarkerCoordinate
function AddMarkerCoordinate(ALatitude: Double; ALongtitude: Double; ATitle: UnicodeString; AIconURL: UnicodeString): TTMSFNCOpenLayersMarker;
直接指定標記位置,進行標記新增。
fxFNCMaps1.AddMarkerCoordinate(49.05,24.13,'','');
# 3.2.5. ClearMarkers
procedure ClearMarkers;
清除所有的地圖示記。
# 3.2.6. ClearPolyLines
procedure ClearPolyLines;
清除所有的折線標記。
# 3.2.7. ClearPolygons
procedure ClearPolygons;
清除所有的多邊形標記。
# 3.2.8. ClearRectangles
procedure ClearRectangles;
清除所有矩形標記。
# 3.2.9. ShowPopup
function ShowPopup(var ACoordinate: TTMSFNCMapsCoordinateRec;AText: UnicodeString; AOffsetX: Double; AOffserY: Double): UnicodeString:
設定顯示彈出式視窗。
# 3.2.10. SetZoomLevel
procedure SetZoomLevel(AZoomLevel: Double);
設定地圖的縮放級別。
# 4. TfxFNCOpenLayers
TFNCOpenLayers 繼承于 TFNCMaps,並公開了特定於 OpenLayers API 的額外功能。如需要了解此元件的通用屬性、事件與方法,請參考 TfxFNCMaps。
# 4.1. TileServer
當使用此元件時,您可以指定自定義的瓦片圖層伺服器,可在 Options.TileServer
中進行指定。
# 4.1.1. TileLayers
您可以指定切片圖層列表以顯示地圖圖層的頂部。TileLayers 具有 URL 值和可選 Opacity 值的 tilelayers 集合。
# 4.1.2. 折線與多邊形標籤
您可以為折線和多邊形指定標籤文字。 預設情況下,標籤文字顯示在折線的中心。可指定的內容屬性如下:
名稱 | 描述 |
---|---|
Label.Text | 設定標籤文字 |
Label.FontColor | 設定標籤文字的的字型顏色 |
Label.FontSize | 設定標籤文字的字型大小 |
Label.OffsetX | 設定標籤在X方向上的偏移量 |
Label.OffsetY | 設定標籤在Y方向上的偏移量 |
# 5. TfxFNCGeocoding
此元件用於執行地址地理編碼或者座標反向地理編碼。
# 5.1. 屬性
# 5.1.1. APIKey
property APIKey: UnicodeString;
用於設定APIKey,對於部分地圖資訊提供商,需要填寫此屬性后才可使用。
# 5.1.2. GeocodingRequests
property GeocodingRequests: TTMSFNCGeocodingRequests;
設定地理資訊編碼請求的專案。
# 5.1.3. Service
property Service: TTMSFNCMapsService;
設定地理編碼資訊服務的提供商。可選專案有 gsAzure
、gsBing
、gsGeoApify
、gsGoogle
、gsHere
、gsMapBox
、gsOpenRoute
、gsOpenStreetMap
。
# 5.2. 事件
事件名稱 | 觸發方式 |
---|---|
OnGetGeocoding | 呼叫 GetGeocoding 后觸發。 包含地理編碼操作的結果。 ARequest.Status 和 ARequest.ErrorMessage 值可用於檢視所選服務返回的狀態和錯誤訊息(如果有)。 在多個地理編碼呼叫的情況下,ARequest.ID 值可用於確定結果與哪個呼叫相關聯。 從請求返回的數據可以在 ARequest.Items 集合中找到。 |
OnGetReverseGeocoding | 呼叫 GetReverseGeocoding 后觸發。 包含反向地理編碼操作的結果。 ARequest.Status 和 ARequest.ErrorMessage 值可用於檢視所選服務返回的狀態和錯誤訊息(如果有)。 在多個 GetReverseGeocoding 呼叫的情況下,ARequest.ID 值可用於確定結果與哪個呼叫相關聯。 從請求返回的數據可以在 ARequest.Items 集合中找到。 |
OnGetGeocodingResult | 呼叫 GetGeocoding 后觸發。 包含地理編碼操作的結果。 從請求返回的數據可以在 AResult.Items 集合中找到。 |
OnGetReverseGeocodingResult | 呼叫 GetReverseGeocoding 后觸發。 包含反向地理編碼操作的結果。 從請求返回的數據可以在 AResult.Items 集合中找到。 |
# 5.3. 方法
# 5.3.1. GetGeocodingAddress
procedure GetGeocodingAddress(AAddress: UnicodeString; AID: UnicodeString; ADataPointer: Pointer; AMode: TTMSFNCMapsLocaleMode);
獲取指定位置的地理地點資訊。