1

次のようにturf.jsbezierを使用して呼び出される geoJSON ポリライン オブジェクトを作成します。

var linestring = turf.linestring(
        [[121.465, 31.233], [121.500634, 31.233499], [121.588107, 31.190172], [121.501545, 31.207394], [121.337514, 31.196079]]
        , {
            "stroke": "#25561F",
            "stroke-width": 5
        });

var bezier = turf.bezier(linestring, 50000, 0.85);

bezier.properties = {
    "stroke": "#6BC65F",
    "stroke-width": 5,
    "description": "Bezier line from polyline"
}

L.mapbox.featureLayer().setGeoJSON(bezier).addTo(map);

次に、bezier.geometry.coordinatesそのポイント配列にアクセスしていました..しかし、本当に必要なのはLatLngオブジェクトの配列です(このプラグインL.animatedMarkerではlatlngsが必要なので)、リーフレットオブジェクトでメソッドが行ったような配列を抽出する方法があるかどうか疑問に思っていました. .LatLnggetLatLngs

4

1 に答える 1

2

最初に、追加したレイヤーから実際のレイヤーへの参照を取得する必要があります。この例では、L.mapbox.featureLayer になります。それを取得したら、getLatLngsメソッドを使用するだけです。これは複数の方法で行うことができます。

layeradd最もクリーンな方法でイベントを使用します。

var featureLayer = L.mapbox.featureLayer().addTo(map);

featureLayer.on('layeradd', function (e) {
    var latLngs = e.layer.getLatLngs();
})

var featureLayer = L.mapbox.featureLayer().setGeoJSON(bezier).addTo(map);

今行っているようにレイヤーを 1 つだけ挿入する場合は、フィーチャレイヤーに含まれるレイヤー オブジェクトから直接取得することもできます。

var key = Object.keys(featureLayer._layers)[0];
var latLngs = featureLayer._layers[key].getLatLngs();

または、featureLayer に複数のレイヤーがあり、イベントを使用したくない場合は、featureLayer をループしてそこから取得できます。

featureLayer.eachLayer(function (layer) {
    var latLngs = layer.getLatLngs();
});
于 2015-03-19T03:08:07.177 に答える