2017-04-14 43 views
1

我想在地圖上繪製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) 
     }); 

回答

0

您能否提供更多關於如何存儲數據的信息?它是一個GeoJSON文件嗎? Data Driven Styling提供了幾種不同的功能,但我相信您可能對分類樣式感興趣。

使用單一GeoJSON的下方風格取決於數據的屬性字段兩行的代碼片段(一個藍色和其他紅色):

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); 

希望這點你在正確的方向!

+0

數據格式不正確。我可以將其轉換爲所需的形式。因爲我使用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

+0

可否請你用這個例子的適當C#代碼來幫助我? – Zidar

+0

對不起,我不熟悉在C#中使用運行時樣式來提供一個片段。 – cammace