0

请评论,当区域更改时,如何获取地图中心(Xamarin.Forms.Maps)的经纬度?在 C# 中,检索属性“Map.VisibleRegion”( https://docs.microsoft.com/en-us/dotnet/api/xamarin.forms.maps.map.visibleregion?view=xamarin-forms ) 并找到相关的属性“MapSpan.Center”。但是,它与 F# 的 fabulous 不同,我不知道如何从 view.map 中检索属性。谢谢你。

let view (model : Model) dispatch =
    let paris = Position(48.8566, 2.3522)
    let london = Position(51.5074, -0.1278)
    let calais = Position(50.9513, 1.8587)

    let map =
        View.Map
            (hasZoomEnabled = true, hasScrollEnabled = true,
             pins = [ View.Pin(paris, label = "Paris", pinType = PinType.Place)
                      View.Pin(london, label = "London", pinType = PinType.Place) ],
             requestedRegion = MapSpan.FromCenterAndRadius(calais, Distance.FromKilometers(300.0)))
    // View
    View.ContentPage(content = map)
    -- e.g map.visibleRegion
4

1 回答 1

0

根据 Tim Lariviere的评论 ( https://github.com/fsprojects/Fabulous/issues/635 ),问题已经解决。谢谢你。

let mapRef = ViewRef<Map>()

......
let tryGetCameraPosition() =
        match mapRef.TryValue with 
                          | None -> Some (0.0, 0.0) |> Option.map (fun l -> CameraPositionRetrieved(l))
                          | Some obj -> 
                                let map = obj :?> Xamarin.Forms.Maps.Map
                                let c = map.VisibleRegion.Center
                                Some (c.Latitude, c.Longitude) |> Option.map (fun l -> CameraPositionRetrieved(l))
......
let update msg model =
    match msg with
    | UpdateCameraPosition  -> 
        let msg = tryGetCameraPosition()
        model, Cmd.ofMsgOption msg
    | CameraPositionRetrieved location -> { model with CameraPosition = Some location }, Cmd.none

......
let view (model : Model) dispatch =
......
View.Map(hasZoomEnabled = true, hasScrollEnabled = true, ref = mapRef,
于 2019-12-10T09:19:00.450 回答