我想在地图上绘制GPS轨迹(MapBox)并按速度或高度对它的点进行着色。所以我需要一个自定义的抽屉。如何在MapBox中按照速度/高度为多段线/ GeoJSON线着色?
MapBox Android SDK提供绘制折线与定制式的例子: https://www.mapbox.com/android-sdk/examples/add-a-geojson-line/ 但仍是静态的风格,这不是由数据驱动的。
实例的这一部分的兴趣点:
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
方法具有实现与Function
参数。我怀疑它可能正是我所寻找的。但是没有找到使用该实现的手册或示例。
有关自定义抽屉的任何想法?
我使用从Java移植的MapBox Android SDK在C#中开发Xamarin.Android应用程序。
UPD:因为它是在集元数据看出 Function
类型定义如下:
[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)
});
数据格式不正确。我可以将其转换为所需的形式。因为我使用API的C#端口,所以它与Java中的有点不同。你的例子转换成这样:'LineLayer lineLayer = new LineLayer(“linelayer”,“line-source”); lineLayer.SetProperties(新地产[] { PropertyFactory.LineColor( “什么是这里吗?”), PropertyFactory.Visibility(Property.Visible), PropertyFactory.LineWidth((java.lang.Float)来3F) }) ;'应该在'LineColor'参数中放置什么? – Zidar
可否请你用这个例子的适当C#代码来帮助我? – Zidar
对不起,我不熟悉在C#中使用运行时样式来提供一个片段。 – cammace