2017-04-14 20 views
1

マップ(MapBox)にGPSトラックを描画し、そのポイントを速度または高度で色付けしたいと考えています。だから私はトラックのためのカスタム引き出しが必要です。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:私はC#の物事はJavaから少し異なっている使用したよう :

[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:それはアセンブリメタデータに見られるよう Function型の定義は以下の通りです。

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ファイルですか?データドリブンスタイリングでは、いくつかの機能が提供されていますが、私はあなたがそのカテゴリに興味があると考えています。

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

うまくいけば、これが正しい方向にあなたを指す:シングルにGeoJSONにスタイルデータのプロパティフィールド(1つの青と他の赤)に応じて、2つのライン以下のコードを使用して

+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

関連する問題