无法在来自 Firebase 数据库的地图上插入图钉 - XAML

Cant insert pins on map from Firebase database - XAML

我正在使用 this 文章用图钉填充我的地图。

我有以下代码可以在 Xamarin.Forms.Maps

中显示我的 firebase 数据库中的图钉

PageMap.xaml.cs:

            public PageMap()
            {
                InitializeComponent();
    
                BindingContext = this;
    
                databaseLoad();
    
            }
    
            public ObservableCollection<MyDatabaseRecord> DatabaseItems { get; set; } = new
      ObservableCollection<MyDatabaseRecord>();
    
            FirebaseClient firebaseClient = new FirebaseClient("firebaselink");
    
    
            private void databaseLoad()
            {
                var collection = firebaseClient
                    .Child("Localizacoes")
                    .AsObservable<MyDatabaseRecord>()
                    .Subscribe((dbevent) =>
                    {
                        if (dbevent != null)
                        {
                            DatabaseItems.Add(dbevent.Object);
                        }
                    });
            }

PageMap.xaml:

<Grid>
        <maps:Map x:Name="map"
                  ItemsSource="{Binding DatabaseItems}">
            <maps:Map.ItemTemplate>
                <DataTemplate>
                    <maps:Pin Position="{Binding Position}"
                              Address="{Binding Address}"
                              Label="{Binding Description}" />
                </DataTemplate>
            </maps:Map.ItemTemplate>
        </maps:Map>
</Grid>

(编辑)MyDatabaseRecord.Cs:

public class MyDatabaseRecord
{
    public string Address { get; set; }
    public string Description { get; set; }
    public double Lat { get; set; }
    public double Long { get; set; }

}

我的数据库看起来 like this

我的问题是,生成的 pin 具有正确的地址和描述,但位置 returns 为 0,0 而不是数据库中存在的位置。

我可以进行哪些更改才能使其正常工作?提前致谢

你可以做这样的事情来从你的字符串动态创建位置对象

public class MyDatabaseRecord
{
    public string Address { get; set; }
    public string Description { get; set; }
    public string Position { get; set; }
    
    private Position parsedPosition;

    public Position ParsedPosition { 
      get {
         if (parsedPosition != null) return parsedPosition;

         var pos = Position.Split(',');
         double lat = double.Parse(pos[0]);
         double lng = double.Parse(pos[1]);
         parsedPosition = new Position(lat,lng);
         return parsedPosition;
      }
    }
}