如何在.net maui (Android/iOS) 中获取地图图钉屏幕位置

问题描述 投票:0回答:1

我希望在地图图钉旁边打开一个弹出窗口(按下时),但无法弄清楚如何获取图钉的屏幕位置。

将图钉添加到地图效果很好:

  map.Pins.Add(nameOfPin);

..创建事件处理程序也很简单:

  nameOfPin.MarkerClicked += OnPinClickedAsync;

下面的事件处理程序应该打开 Pin 图旁边的弹出窗口,但我无法获取 Pin 图屏幕位置。地图位置包含在发送者对象中,但据我所知,屏幕位置不包含在发送者对象中。

async void OnPinClickedAsync(对象?发送者,PinClickedEventArgs args) { var selectedPin = (Pin)发送者; 。 。 。然后什么??如何获取 Pin 图屏幕位置 (Android/iOS) }

有人可以帮忙吗?

PS。我尝试提取事件创建的 Pin 对象的所有信息,但无法找到 Pin 屏幕位置

.net dictionary position maui
1个回答
0
投票

您可以使用MKMapView.ConvertCooperative方法,可以将地图坐标转换为点。

要使用它,您可以调用平台代码

假设下面是图钉的点击事件处理程序,

private void BoardwalkPin1_MarkerClicked(object? sender, PinClickedEventArgs e)
{
    var mypin = sender as Pin;
    float xPos;
    float yPos;

#if IOS
    var vc = UIApplication.SharedApplication.KeyWindow?.RootViewController;
    while(vc.PresentedViewController != null)
    {
        vc = vc.PresentedViewController;
    }

    CLLocationCoordinate2D Coordinate = new CLLocationCoordinate2D(mypin.Location.Latitude, mypin.Location.Longitude);

    var myPoint = (mymap.Handler.PlatformView as MKMapView).ConvertCoordinate(Coordinate,vc.View);
    xPos = (float)myPoint.X;
    yPos = (float)myPoint.Y;
#endif
    Console.WriteLine(xPos);
    Console.WriteLine(yPos);
}
我们得到的

xPos
yPos
是相对于当前视图的位置。

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.