【问题标题】:Draw a Line between two coordinates in a TMapView (Delphi FMX)在 TMapView (Delphi FMX) 中的两个坐标之间画一条线
【发布时间】:2021-04-04 01:58:18
【问题描述】:

我的表单上有TMapViewTMapView 到目前为止工作正常,但我想增加在TMapView 上的两个坐标之间画一条线的可能性。我该怎么做?

我尝试了以下方法,但无论如何都不起作用:

var
A,B: TMapCoordinate;
AB: TMapPolylineDescriptor;
begin
A.Latitude:=51.88;
A.Longitude:=10.56;
B.Latitude:=51.9;
B.Longitude:=10.7;
//MapView1.Canvas.DrawLine(A,B,50); //doesnt work
// AB.Points:=[A,B]; //doesnt work too
AB.StrokeWidth:=50;
//MapView1.AddPolyline(AB); //doesnt work too
end;

我猜画布的东西不会像我想要的那样工作,因为我认为它只是将 TMapView 上的点连接为位图,而不是地图本身。请建议我如何在地图上的两个坐标之间画一条线(如果可能的话)

我使用的是 Delphi 10.3.3 Community Edition,并尝试在我的 android 10 手机上编译它。

我发现了这个SO Link,其中 Polyline 在 iPhone 上的 MapKit 的 Objective-C 中使用。我想我必须在 delphi 中做同样的事情,但我不知道该怎么做。但我看到 Polyline 在两点之间绘制了一条地图路线。也很高兴知道,但我只想绘制我的线,并且没有来自 Google 的地图路线建议。

如果我使用此代码:

  if MapView1.Canvas.BeginScene then
  begin
    Canvas.Fill.Color := $FF111111 + random($FFFFFF);
    Canvas.Fill.Kind := TBrushKind.Solid;
    Canvas.FillRect(RectF(random(300), random(300), random(300), random(300)),
    0,
    0, [], 1);
    Canvas.EndScene;
  end;

它可以工作并在某处以某种颜色绘制彩色矩形,但在出现后立即消失..也许这就是为什么我的线条也不可见的原因。也许他们被画了,但立即被覆盖了。我一般不太了解我的 TMapView 或 Canvas 的画布,但在绘制“正方形”后它消失了,我猜这些线条也正在消失。我能否以某种方式使这些自绘的画布更改永久化,直到我自己重绘它们?

【问题讨论】:

  • 您可能必须将地理坐标(纬度、经度)转换为画布(位图)坐标。尝试从左上角 (0, 0) 到底线角 (with, height) 画一条线,看看这条线是否可见。
  • 我尝试画画布,但我使用的代码没有画任何东西:delphi var A,B: TPoint; begin A.x:=12; A.y:=12; B.x:=strtoint(MapView1.Width.ToString); B.y:=strtoint(MapView1.Height.ToString); MapView1.Canvas.DrawLine(A,B,50); //doesnt work end; 所以我什至没有设法画出任何线条
  • delphi with MapView1.Canvas do begin BeginUpdate; Stroke.Color := TAlphaColors.Black; Stroke.Thickness := 2.0; Stroke.Kind := TBrushKind.Solid; DrawLine(PointF(10, 10), PointF(100, 10), 1); EndUpdate; end; 这在 TMapView 上也不起作用
  • 这似乎与 [google-maps] 无关
  • @geocodezip TMapView 使用谷歌地图,但是是的,我明白了。标签被移除

标签: canvas line firemonkey delphi-10.3-rio


【解决方案1】:

尝试这样使用

var
A,B: TMapCoordinate;
AB: TMapPolylineDescriptor;
begin
  A := TMapCoordinate.Create(51.88,10.56);
  B := TMapCoordinate.Create(51.9,10.7);

  AB := TMapPolylineDescriptor.Create([A,B]);
  AB.StrokeWidth:=5;
  MapView1.AddPolyline(AB);
end;

【讨论】:

  • 非常感谢。这正是我想要的
猜你喜欢
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 2019-03-15
  • 1970-01-01
  • 2012-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多