Android 如何在MapBox中按速度/高度为多段线/GeoJSON线着色?

Android 如何在MapBox中按速度/高度为多段线/GeoJSON线着色?,android,xamarin.android,mapbox,Android,Xamarin.android,Mapbox,我想在地图(MapBox)上画一条GPS轨迹,并根据速度或高度给它的点上色。所以我需要一个定制的抽屉 MapBox Android SDK提供了一个使用自定义样式绘制多段线的示例: 但它仍然是一种静态风格,不受数据驱动 示例的这一部分是重点: lineLayer.setProperties( PropertyFactory.lineDasharray(new Float[]{0.01f, 2f}), PropertyFactory.lineCap(Property.LIN

我想在地图(MapBox)上画一条GPS轨迹,并根据速度或高度给它的点上色。所以我需要一个定制的抽屉

MapBox Android SDK提供了一个使用自定义样式绘制多段线的示例: 但它仍然是一种静态风格,不受数据驱动

示例的这一部分是重点:

lineLayer.setProperties(
      PropertyFactory.lineDasharray(new Float[]{0.01f, 2f}),
      PropertyFactory.lineCap(Property.LINE_CAP_ROUND),
      PropertyFactory.lineJoin(Property.LINE_JOIN_ROUND),
      PropertyFactory.lineWidth(5f),
      PropertyFactory.lineColor(Color.parseColor("#e55e5e"))
    );
PropertyFactory
方法具有带有
函数
参数的实现。我怀疑这可能正是我要找的。但是找不到使用该实现的手册或示例

关于定制抽屉有什么想法吗

我使用从Java移植的MapBox Android SDK在C#中开发了一个Xamarin.Android应用程序

UPD:
函数
在程序集元数据中看到的类型定义如下:

[JavaTypeParameters(new[] { "T" })]
[Register("com/mapbox/mapboxsdk/style/layers/Function", DoNotGenerateAcw = true)]
public class Function : Java.Lang.Object
{
    protected Function(IntPtr javaReference, JniHandleOwnership transfer);

    public virtual Float Base { get; }
    protected override IntPtr ThresholdClass { get; }
    protected override Type ThresholdType { get; }

    [JavaTypeParameters(new[] { "T" })]
    [Register("stop", "(FLcom/mapbox/mapboxsdk/style/layers/Property;)Lcom/mapbox/mapboxsdk/style/layers/Function$Stop;", "")]
    public static Stop InvokeStop(float @in, Property output);

    [JavaTypeParameters(new[] { "I", "O" })]
    [Register("com/mapbox/mapboxsdk/style/layers/Function$Stop", DoNotGenerateAcw = true)]
    public class Stop : Java.Lang.Object
    {
        protected Stop(IntPtr javaReference, JniHandleOwnership transfer);

        [Register("in")]
        public Java.Lang.Object In { get; set; }
        [Register("out")]
        public Java.Lang.Object Out { get; set; }
        protected override IntPtr ThresholdClass { get; }
        protected override Type ThresholdType { get; }
    }
}
UPD2: 当我使用C#时,事情与Java有点不同。下面是我将要使用的代码:

LineLayer lineLayer = new LineLayer("linelayer", "line-source");
        lineLayer.SetProperties(new Property[] {
           PropertyFactory.LineColor("**What should be here?**"),
           PropertyFactory.Visibility(Property.Visible),
           PropertyFactory.LineWidth((Java.Lang.Float)3f)
        });

您能否提供更多关于您如何存储数据的信息?它是一个GeoJSON文件吗?数据驱动样式提供了一些不同的功能,但我相信您可能会对分类功能感兴趣

使用单个GeoJSON,下面的代码片段根据数据的属性字段(一个蓝色,另一个红色)设置两行样式:


希望这能为你指明正确的方向

您能提供更多关于如何存储数据的信息吗?它是一个GeoJSON文件吗?数据驱动样式提供了一些不同的功能,但我相信您可能会对分类功能感兴趣

使用单个GeoJSON,下面的代码片段根据数据的属性字段(一个蓝色,另一个红色)设置两行样式:


希望这能为你指明正确的方向

数据格式是任意的。我可以把它转换成所需的格式。当我使用API的C#端口时,事情与Java中的有些不同。您的示例转换为:
LineLayer LineLayer=newlinelayer(“LineLayer”、“线源”);lineLayer.SetProperties(新属性[]{PropertyFactory.LineColor(“这里是什么?”)、PropertyFactory.Visibility(Property.Visible)、PropertyFactory.LineWidth((Java.Lang.Float)3f)})应该在
LineColor
参数中放置什么?您能帮我为这个例子提供正确的C代码吗?很抱歉,我不太熟悉在C中使用运行时样式来提供代码片段。数据格式是易读的。我可以把它转换成所需的格式。当我使用API的C#端口时,事情与Java中的有些不同。您的示例转换为:
LineLayer LineLayer=newlinelayer(“LineLayer”、“线源”);lineLayer.SetProperties(新属性[]{PropertyFactory.LineColor(“这里是什么?”)、PropertyFactory.Visibility(Property.Visible)、PropertyFactory.LineWidth((Java.Lang.Float)3f)})应该在
LineColor
参数中放置什么?您能帮我为这个例子提供正确的C代码吗?很抱歉,我对在C中使用运行时样式不太熟悉,无法提供代码片段。
LineLayer linesLayer = new LineLayer(Constants.LINE_LAYER, Constants.LINE_SOURCE).withProperties(
      PropertyFactory.lineColor(
        property(
          "color",
          categorical(
            stop("red", PropertyFactory.lineColor(Color.parseColor("#F7455D"))),
            stop("blue", PropertyFactory.lineColor(Color.parseColor("#33C9EB")))
          ))
      ),
      PropertyFactory.visibility(Property.VISIBLE),
      PropertyFactory.lineWidth(3f)
    );

    // Add LineLayer to map
    mapboxMap.addLayer(linesLayer);