Google maps 使用相同参数给出不同结果的函数
我使用GMLib与谷歌地图一起工作,现在我已经到了一个非常困惑的地步。 我有函数GetDistance和GetHeading来计算地图上两个标记之间的距离和指南针方向。 当我从GetHeadingDistance过程中调用它们时,我得到了我期望的结果(距离和方向是正确的)-aSearchCallInfo是一个包含需要用这些值更新的信息的类 现在我正在尝试添加一个函数,让用户在地图上按鼠标右键,然后获取有关该位置的信息 但在这种情况下,我得到了非常错误的结果。就我所能看到的结果而言,它使用GMMarker.Items[1]。将位置作为源,即使我知道它是GMMarker.Items[0]。将位置作为参数发送 当我试图在计算期间通过将值写入文本文件来调试函数时,我可以看到它在正确的位置使用的是正确的值 (GMMarker.Items[0]。位置是软件用户的位置) 有什么办法可以解决这个问题吗Google maps 使用相同参数给出不同结果的函数,google-maps,delphi,gmlib,Google Maps,Delphi,Gmlib,我使用GMLib与谷歌地图一起工作,现在我已经到了一个非常困惑的地步。 我有函数GetDistance和GetHeading来计算地图上两个标记之间的距离和指南针方向。 当我从GetHeadingDistance过程中调用它们时,我得到了我期望的结果(距离和方向是正确的)-aSearchCallInfo是一个包含需要用这些值更新的信息的类 现在我正在尝试添加一个函数,让用户在地图上按鼠标右键,然后获取有关该位置的信息 但在这种情况下,我得到了非常错误的结果。就我所能看到的结果而言,它使用GMMa
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个固定的标记,一切看起来都正常,但我添加了“浮动”标记,没有问题是标记没有给出我期望的索引编号,所以我没有从源计算到目的地,而是从目的地到目的地进行了实际计算,得出了错误的结果。但现在已经修好了。