如何在Xamarin Forms应用程序中正确实现Mapbox

时间:2019-06-08 15:59:11

标签: xamarin maps mapbox

我刚刚下载了naxam mapbox,却完全失去了github页面的帮助,而且似乎没有其他人可以在xamarin.forms应用程序中实现地图视图的任何有用的东西,谢谢。

1 个答案:

答案 0 :(得分:0)

短弓箭手:

2018年9月12日以来,尚未更新 Xamarin.Forms 的 Naxam.Mapbox 和所有相关的Forms软件包,以及从那时起,适用于 Android / iOS 的Mapbox SDK 发生了变化,我尝试了此程序包,但它有点笨拙,我设法显示了地图,但未插入Geojson源/标记令人愉快的经历。值得一提的是(对于我在LinkedIn中搜索到的内容), Naxam不再存在,这就是GitHub存储库中所有未解决问题的原因。


长答案:

如果您确实要在Xamarin项目中使用 Mapbox ,则AndroidiOS的Naxam绑定库今天仍在工作( 18/06 / 2019 ),因此让它用于Xamarin Forms项目的一种方法是在各自的项目中实现两个sdk,并在 Custom View Renderer 中使用它们(要小心,因为这些项目仍然需要其他Nuget软件包才能运行,并且在安装它们时不会警告您,请确保在我上面给出的链接中看到依赖项。

在项目中拥有地图的其他方法是使用MapsUi(请记住,MapsUi是 TileBased ,而Mapbox是 VectorBased ,因此您可能会看到较少的地图使用MapsUi时的流动性)。我将在此处为iOS中的自定义渲染保留一些相关代码,以开始实施MapsUi:

MapViewRenderer.cs

public class MapViewRenderer : ViewRenderer<MapsUIView, Mapsui.UI.iOS.MapControl>
{
    Mapsui.UI.iOS.MapControl mapNativeControl;
    MapsUIView mapViewControl;

    protected override void OnElementChanged(ElementChangedEventArgs<MapsUIView> e)
    {
        base.OnElementChanged(e);

        if (mapViewControl == null && e.NewElement != null)
            mapViewControl = e.NewElement;

        if (mapNativeControl == null && mapViewControl != null)
        {
            var rectangle = mapViewControl.Bounds;
            var rect = new CGRect(rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height);

            mapNativeControl = new Mapsui.UI.iOS.MapControl(rect)
            {
                Map = mapViewControl.NativeMap,
                Frame = rect
            };

            SetNativeControl(mapNativeControl);
        }
    }
}

这是基于如何在iOS的Custom View Render中实现MapView的基础,Android需要类似的代码,当然还有Custom Renderer本身,其中有大量的相关教程,例如这个:Source 1 Source 2