Delphi Rio 10.3.3地图视图标记onDrag返回错误坐标
我正在尝试构建一个项目,该项目使用带有可拖动地图标记的Mapview组件。问题是onMarkerDrag和onMarkerDragEnd事件都返回Mapmarker创建的MapCoordinate,而不是拖动的Mapmarker(标记在地图上正常移动,Google Maps组件显示地图没有问题-API键工作正常)。 代码如下:Delphi Rio 10.3.3地图视图标记onDrag返回错误坐标,delphi,draggable,marker,Delphi,Draggable,Marker,我正在尝试构建一个项目,该项目使用带有可拖动地图标记的Mapview组件。问题是onMarkerDrag和onMarkerDragEnd事件都返回Mapmarker创建的MapCoordinate,而不是拖动的Mapmarker(标记在地图上正常移动,Google Maps组件显示地图没有问题-API键工作正常)。 代码如下: unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, Sys
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Maps,
FMX.Controls.Presentation, FMX.StdCtrls, System.Sensors,
System.Sensors.Components, FMX.ScrollBox, FMX.Memo;
type
TForm1 = class(TForm)
MapView1: TMapView;
LocationSensor1: TLocationSensor;
Memo1: TMemo;
procedure FormShow(Sender: TObject);
procedure MapView1MarkerDrag(Marker: TMapMarker);
procedure MapView1MarkerDragEnd(Marker: TMapMarker);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Androidapi.JNI.Os,
Androidapi.JNI.JavaTypes,
Androidapi.Helpers,
System.Permissions, FMX.DialogService;
{$R *.fmx}
procedure TForm1.FormShow(Sender: TObject);
var
MapDescr: TMapMarkerDescriptor;
marker: TMapMarker;
coord: TMapCoordinate;
begin
coord := TMapCoordinate.Create(42,17);
MapDescr := TMapMarkerDescriptor.Create(coord, 'Test');
MapDescr.Draggable := True;
MapView1.AddMarker(MapDescr);
{$IF defined(Android)}
PermissionsService.RequestPermissions
([JStringToString(TJManifest_permission.JavaClass.ACCESS_FINE_LOCATION)],
procedure(const APermissions: TArray<string>;
const AGrantResults: TArray<TPermissionStatus>)
begin
if (Length(AGrantResults) = 1) and
(AGrantResults[0] = TPermissionStatus.Granted) then
{ activate or deactivate the location sensor }
begin
LocationSensor1.Active := True;
end
else
begin
LocationSensor1.Active := false;
TDialogService.ShowMessage('Location permission not granted');
end;
end);
sleep(100);
{$ENDIF}
sleep(200);
{$IF defined(Android)}
PermissionsService.RequestPermissions
([JStringToString(TJManifest_permission.JavaClass.ACCESS_LOCATION_EXTRA_COMMANDS)],
procedure(const APermissions: TArray<string>;
const AGrantResults: TArray<TPermissionStatus>)
begin
if (Length(AGrantResults) = 1) and
(AGrantResults[0] = TPermissionStatus.Granted) then
{ activate or deactivate the location sensor }
begin
LocationSensor1.Active := True;
end
else
begin
LocationSensor1.Active := false;
TDialogService.ShowMessage('Location permission not granted');
end;
end);
sleep(100);
{$ENDIF}
end;
procedure TForm1.MapView1MarkerDrag(Marker: TMapMarker);
begin
Memo1.BeginUpdate;
Memo1.Lines.Add('Dragging:'+FloatToStr(Marker.Descriptor.Position.Latitude)+'-'+FloatToStr(Marker.Descriptor.Position.Longitude));
Memo1.EndUpdate;
end;
procedure TForm1.MapView1MarkerDragEnd(Marker: TMapMarker);
begin
Memo1.BeginUpdate;
Memo1.Lines.Add('End:'+FloatToStr(Marker.Descriptor.Position.Latitude)+'-'+FloatToStr(Marker.Descriptor.Position.Longitude));
Memo1.EndUpdate;
end;
end.
单元1;
接口
使用
System.SysUtils、System.TYPE、System.UITYPE、System.Classes、System.VARIANT、,
FMX.类型,FMX.控件,FMX.窗体,FMX.图形,FMX.对话框,FMX.地图,
FMX.Controls.Presentation,FMX.StdCtrls,系统传感器,
System.Sensors.Components,FMX.ScrollBox,FMX.Memo;
类型
TForm1=类(TForm)
地图视图1:TMapView;
位置传感器1:t位置传感器;
备忘录1:TMemo;
程序表单显示(发送方:TObject);
程序图视图1标记器(标记器:TMapMarker);
程序图视图1标记器标记器(标记器:TMapMarker);
私有的
{私有声明}
公众的
{公开声明}
结束;
变量
表1:TForm1;
实施
使用Androidapi.JNI.Os,
Androidapi.JNI.JavaTypes,
安德罗里达皮,帮手,
系统权限,FMX.DialogService;
{$R*.fmx}
程序TForm1.FormShow(发送方:TObject);
变量
MapDescr:TMapMarkerDescriptor;
标记:TMapMarker;
协调:TMapCoordinate;
开始
坐标:=TMapCoordinate.Create(42,17);
MapDescr:=TMapMarkerDescriptor.Create(坐标,'Test');
MapDescr.Draggable:=真;
MapView1.AddMarker(MapDescr);
{$IF-defined(Android)}
PermissionsService.RequestPermissions
([JStringToString(TJManifest_permission.JavaClass.ACCESS_FINE_LOCATION)],
程序(常数:TArray;
const Agrantres结果:TArray)
开始
if(长度(AGrantResults)=1)和
(AGrantResults[0]=TPermissionStatus.grated)然后
{激活或停用位置传感器}
开始
位置传感器1.激活:=真;
结束
其他的
开始
位置传感器1.激活:=错误;
TDialogService.ShowMessage('未授予位置权限');
结束;
(完),;
睡眠(100);
{$ENDIF}
睡眠(200);
{$IF-defined(Android)}
PermissionsService.RequestPermissions
([JStringToString(TJManifest_permission.JavaClass.ACCESS_LOCATION_EXTRA_COMMANDS)],
程序(常数:TArray;
const Agrantres结果:TArray)
开始
if(长度(AGrantResults)=1)和
(AGrantResults[0]=TPermissionStatus.grated)然后
{激活或停用位置传感器}
开始
位置传感器1.激活:=真;
结束
其他的
开始
位置传感器1.激活:=错误;
TDialogService.ShowMessage('未授予位置权限');
结束;
(完),;
睡眠(100);
{$ENDIF}
结束;
程序TForm1.MapView1MarkerDrag(标记:TMapMarker);
开始
备忘录1.开始更新;
Memo1.Lines.Add('drawing:'+FloatToStr(Marker.Descriptor.Position.Latitude)+'-'+FloatToStr(Marker.Descriptor.Position.Longitude));
备忘录1.1更新;
结束;
程序TForm1.MapView1MarkerDragEnd(标记:TMapMarker);
开始
备忘录1.开始更新;
Memo1.Lines.Add('End:'+FloatToStr(Marker.Descriptor.Position.Latitude)+'-'+FloatToStr(Marker.Descriptor.Position.Longitude));
备忘录1.1更新;
结束;
结束。
在Android移动设备上执行代码后,两个事件过程都返回:42,17。
我使用SDK 25.2.5 32位和26.1.1 32位构建了应用程序,结果相同,我还尝试向清单xml文件添加以下内容:
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
没有任何成功。
在目标平台库中,我使用默认设置:com-google-android-gms.play-services-maps.16.1.0.dex.jar。
提前谢谢