Android 如何在MapBox中按速度/高度为多段线/GeoJSON线着色?
我想在地图(MapBox)上画一条GPS轨迹,并根据速度或高度给它的点上色。所以我需要一个定制的抽屉 MapBox Android SDK提供了一个使用自定义样式绘制多段线的示例: 但它仍然是一种静态风格,不受数据驱动 示例的这一部分是重点: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
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);