Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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
Google maps 使用相同参数给出不同结果的函数_Google Maps_Delphi_Gmlib - Fatal编程技术网

Google maps 使用相同参数给出不同结果的函数

Google maps 使用相同参数给出不同结果的函数,google-maps,delphi,gmlib,Google Maps,Delphi,Gmlib,我使用GMLib与谷歌地图一起工作,现在我已经到了一个非常困惑的地步。 我有函数GetDistance和GetHeading来计算地图上两个标记之间的距离和指南针方向。 当我从GetHeadingDistance过程中调用它们时,我得到了我期望的结果(距离和方向是正确的)-aSearchCallInfo是一个包含需要用这些值更新的信息的类 现在我正在尝试添加一个函数,让用户在地图上按鼠标右键,然后获取有关该位置的信息 但在这种情况下,我得到了非常错误的结果。就我所能看到的结果而言,它使用GMMa

我使用GMLib与谷歌地图一起工作,现在我已经到了一个非常困惑的地步。 我有函数GetDistance和GetHeading来计算地图上两个标记之间的距离和指南针方向。 当我从GetHeadingDistance过程中调用它们时,我得到了我期望的结果(距离和方向是正确的)-aSearchCallInfo是一个包含需要用这些值更新的信息的类

现在我正在尝试添加一个函数,让用户在地图上按鼠标右键,然后获取有关该位置的信息

但在这种情况下,我得到了非常错误的结果。就我所能看到的结果而言,它使用GMMarker.Items[1]。将位置作为源,即使我知道它是GMMarker.Items[0]。将位置作为参数发送

当我试图在计算期间通过将值写入文本文件来调试函数时,我可以看到它在正确的位置使用的是正确的值

(GMMarker.Items[0]。位置是软件用户的位置)

有什么办法可以解决这个问题吗

procedure TfrmQthMap.GMMapRightClick(Sender: TObject; LatLng: TLatLng; X, Y: Double);
var
  MessageText: string;
  LL: TLatLng;
  Heading: double;
  Distance: double;
  Qra: string;
begin
  if GMMarker.Count > 0 then
    begin
      LL := TLatLng.Create;
      try
        LL.Lat    := LatLng.Lat;
        LL.Lng    := LatLng.Lng;
        Heading   := GetHeading(GMMarker.Items[0].Position, LL);
        Distance  := GetDistance(GMMarker.Items[0].Position, LL);
        Qra       := Maidenhead(LatLng.LngToStr, LatLng.LatToStr);
      finally
        FreeAndNil(LL);
      end;
      MessageText := 'Data for det sted du klikkede på: ' + sLineBreak + sLineBreak +
                     Format('Længdegrad: %s', [LatLng.LngToStr(Precision)]) + sLineBreak +
                     Format('Breddegrad: %s', [LatLng.LatToStr(Precision)]) + sLineBreak +
                     Format('Afstand: %6.1f km', [Distance]) + sLineBreak +
                     Format('Retning: %6.1f °', [Heading]) + sLineBreak +
                     Format('Lokator: %s', [Qra]);
      ShowMessage(MessageText);
    end;
end;

procedure TfrmQthMap.GetHeadingDistance(aSearchCallInfo: TCallInfo);
var
  Heading: double;
  Distance: double;
begin
  if GMMarker.Count > 1 then
    begin
      Heading   := GetHeading(GMMarker.Items[0].Position, GMMarker.Items[1].Position);
      Distance  := GetDistance(GMMarker.Items[0].Position, GMMarker.Items[1].Position);

      barFooter.Panels[PanelDist].Text  := Format('Afstand: %6.1f km', [Distance]);
      barFooter.Panels[PanelDir].Text   := Format('Retning: %6.1f°', [Heading]);

      aSearchCallInfo.Distance          := Format('%6.1f km', [Distance]);
      aSearchCallInfo.Heading           := Format('%6.1f °', [Heading]);
      aSearchCallInfo.SaveToDatabase;
    end;
end;
function TfrmQthMap.GetDistance(aOrigin, aDest: TLatLng): double;
var
  Distance: double;
begin
  Distance  := TGeometry.ComputeDistanceBetween(GMMap, aOrigin, aDest);
  Distance  := Distance / 1000;
  Result    := Distance;
end;

function TfrmQthMap.GetHeading(aOrigin, aDest: TLatLng): double;
var
  Heading: double;
begin
  Heading := TGeometry.ComputeHeading(GMMap, aOrigin, aDest);
  Heading := 180 + Heading;
  Result  := Heading;
end;

我没有看到任何明显的错误,唯一不确定的是用户在地图上单击的位置可能与
GMMarker.Items[1]不完全相同。如果在
GetHeading
(和
GetDistance
)的第一行上放置断点,则从
GetHeadingDistance
GMMapRightClick
调用时,
AORiggin
aDest
是否相同。具体值是什么(编辑到您的问题中)。如果
aOrigin
值不同,那么您的问题在于您没有显示的代码。很抱歉,没有早点回来-我在查看GMLib代码很多小时后发现,一切都没有像我想象的那样正常工作。只要有2个固定的标记,一切看起来都正常,但我添加了“浮动”标记,没有问题是标记没有给出我期望的索引编号,所以我没有从源计算到目的地,而是从目的地到目的地进行了实际计算,得出了错误的结果。但是现在已经修复了。我没有看到任何明显的错误,唯一的不确定性是用户在地图上单击的位置可能与
GMMarker.Items[1]不完全相同。如果在
GetHeading
(和
GetDistance
)的第一行上放置断点,则从
GetHeadingDistance
GMMapRightClick
调用时,
AORiggin
aDest
是否相同。具体值是什么(编辑到您的问题中)。如果
aOrigin
值不同,那么您的问题在于您没有显示的代码。很抱歉,没有早点回来-我在查看GMLib代码很多小时后发现,一切都没有像我想象的那样正常工作。只要有2个固定的标记,一切看起来都正常,但我添加了“浮动”标记,没有问题是标记没有给出我期望的索引编号,所以我没有从源计算到目的地,而是从目的地到目的地进行了实际计算,得出了错误的结果。但现在已经修好了。