1

Openlayers を使用して、単一のレイヤーに個別の線分を描画しようとしています。サイトはこちらからご覧いただけます(地図をクリックして拡大してください)。赤いボックスは、道路セグメントを含む四分木を表しています。緑色の線は単一のポリラインとして表示されます。これを個々のセグメントとして表示したいと思います。

ここに私の既存の機能があります

    function DrawSegments(response){
        var SegmentsData = eval( '(' + response.responseText + ')' );

        var line;
        var lineFeature;

        if(segmentsLayer)       
            segmentsLayer.destroy();

        segmentsLayer = new OpenLayers.Layer.Vector("Segments"); 

        var points = new Array();

        var style = { strokeColor: '#00ff00', 
                    strokeOpacity: 0.8,
                    strokeWidth: 2
        };  

        map.addLayer(segmentsLayer);                    
        map.addControl(new OpenLayers.Control.DrawFeature(segmentsLayer, OpenLayers.Handler.Path));                                     

        //Used this block as code example to possibly add lines using a WKT geometry collection
        //var feature = new OpenLayers.Feature.Vector(
            //OpenLayers.Geometry.fromWKT(
                //"POLYGON((28.828125 0.3515625, 132.1875 -13.0078125, -1.40625 -59.4140625, 28.828125 0.3515625))"
            //).transform(WGS,SMP)
        //);
        //segmentsLayer.addFeatures([feature]);

        for (var i = 0; i < SegmentsData.length; i++) {         
            points.push(new OpenLayers.Geometry.Point(SegmentsData[i][0], SegmentsData[i][1]).transform(WGS,SMP));
            points.push(new OpenLayers.Geometry.Point(SegmentsData[i][2], SegmentsData[i][3]).transform(WGS,SMP));
            line = new OpenLayers.Geometry.LineString(points);              
            lineFeature = new OpenLayers.Feature.Vector(line, null, style);                 
        }
        segmentsLayer.addFeatures([lineFeature]);           
    }   

私はもう試した:

の例を見つける

OpenLayers.Geometry.MultiLineStringOpenLayers.Geometry.Collection

lineFeature 変数を配列に変換し、各配列要素を個別に追加しようとしましたが、うまくいきませんでした。ドキュメンテーションは私を助けません。どんな助けでも大歓迎です。

4

1 に答える 1

3

とても簡単です。開いているコンソールをテストするには、次のスニペットを実行します。

features = [];
json = new OpenLayers.Format.JSON();
epsg4326 = new OpenLayers.Projection('EPSG:4326');
epsg900913 = new OpenLayers.Projection('EPSG:900913');

OpenLayers.Request.GET({
    url: "http://cs.mwsu.edu/MapMatching/ViewContainers/GetRoute.php?route=input_01.txt",
    async: false,
    success: function(r){
        coords = json.read(r.responseText);
    }
});

for (var i = 0; i < coords.length; i+=1) {
    var geometry = new OpenLayers.Geometry.Point(coords[i][0], coords[i][1]).transform(epsg4326, epsg900913);
    var feature = new OpenLayers.Feature.Vector(geometry);
    features.push(feature);
}

track_layer = new OpenLayers.Layer.PointTrack('Track', {style: {strokeColor: 'FF0000',  strokeWidth: 5}});
map.addLayer(track_layer);
track_layer.addNodes(features);
于 2012-05-26T17:10:45.340 に答える