地图控件
# 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);
获取指定位置的地理地点信息。