Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi Rio 10.3.3地图视图标记onDrag返回错误坐标_Delphi_Draggable_Marker - Fatal编程技术网

Delphi Rio 10.3.3地图视图标记onDrag返回错误坐标

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

我正在尝试构建一个项目,该项目使用带有可拖动地图标记的Mapview组件。问题是onMarkerDrag和onMarkerDragEnd事件都返回Mapmarker创建的MapCoordinate,而不是拖动的Mapmarker(标记在地图上正常移动,Google Maps组件显示地图没有问题-API键工作正常)。 代码如下:

    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。 提前谢谢