OpenLayers 2.11のセグメントの長さを測定する

測定ライン上の各セグメントの長さを表示してOpenLayers 2.11に変更すると、小さな問題に陥ることがあります。

Previously after placing points A --> B, B --> C. The length of segment A to B would show up between those points, likewise with B to C and after ending the line the total would be displayed.

私のスクリプトはOpenLayers 2.10で正常に動作しましたが、OpenLayers 2.11に変更した後は、線分を終了するとセグメント値だけがベクトルレイヤーから消えます。

私は問題を理解していますが、ロジックの作業に問題があります...

以下は私が使用しているスクリプトです:

    line: new OpenLayers.Control.Measure(OpenLayers.Handler.Path, {
    persist: true,
    handlerOptions: {
        layerOptions: {
            renderers: renderer,
            styleMap: styleMap
        }
    },
    textNodes: null,
    callbacks:{
        create:
        function(){
            this.textNodes = [];
            vlayer.destroyFeatures(vlayer.features); /*-- figured this area is the problem */
            mouseMovements = 0;
        },
        modify:
        function(point, line){
            if(mouseMovements++ < 5){
                return;
            }
            var len = line.geometry.components.length;
            var from = line.geometry.components[len -2];
            var to = line.geometry.components[len -1];
            var ls = new OpenLayers.Geometry.LineString([from, to]);
            var dist = this.getBestLength(ls);
            if(!dist[0]){
                return;
            }
            var total = this.getBestLength(line.geometry);
            var label = dist[0].toFixed(3) + " " + dist[1];
            var textNode = this.textNodes[len -2] || null;
            if(textNode && !textNode.layer){
                this.textNodes.pop();
                textNode = null;
            }
            if(!textNode){
                var c = ls.getCentroid();
                textNode = new OpenLayers.Feature.Vector(
                new OpenLayers.Geometry.Point(c.x, c.y), {}, {
                    label: "",
                    fontColor: "#800517",
                    fontSize: "12px",
                    fontFamily: "Tahoma",
                    fontWeight: "bold",
                    labelAlign: "cm"
                });
                this.textNodes.push(textNode);
                vlayer.addFeatures([textNode]);
            }
            textNode.geometry.x = (from.x + to.x)/2;
            textNode.geometry.y = (from.y + to.y)/2;
            textNode.style.label = label;
            textNode.layer.drawFeature(textNode);
            this.events.triggerEvent("measuredynamic", {
                measure: dist[0],
                total: total[0],
                units: dist[1],
                order: 1,
                geometry: ls
            });
        }
    }

2011-11-28

ちょっと調べてみたら、OpenLayers 2.11では、ボタンをクリックするとすぐに小節コントロールが有効になっているという結論に達しました。以前のOpenLayers 2.10では、マップがクリックされてパスが終了したときに測定値の部分制御が有効になりました。以前に働いた理由は、textnodes配列が新しい行の開始時にのみ空になります2.11では、小節の部分制御はパスの終わりで一度非アクティブ化されないので、空の配列に戻って、行を終了するときにレイヤーのフィーチャーを消去します。

Source: http://trac.osgeo.org/openlayers/ticket/3315

誰もこれについてもう少し詳しく説明できますか?

0

1 答え

Just in case anyone wants to know the answer. https://github.com/jorix/OL-DynamicMeasure

1
追加された
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript