0

データベースからいくつかの分離されたポリゴン (建物) を描画しようとしています。データベースから取得したデータは次のようになります。

<buildings>
    <building build_id="94" build_gebaeude="A"
        build_geoX="49.26173942769648" build_geoY="7.350542675857582"
    />
    <building build_id="95" build_gebaeude="A"
        build_geoX="49.26173942769648" build_geoY="7.3524094933319475"
    />
    <building build_id="96" build_gebaeude="A"
        build_geoX="49.26019903253632" build_geoY="7.35234512031559"
    />
    <building build_id="97" build_gebaeude="A"
        build_geoX="49.26032506667364" build_geoY="7.350692879562416"
    />
    <building build_id="98" build_gebaeude="B"
        build_geoX="49.26155738350112" build_geoY="7.362129818801918"
    />
    <building build_id="99" build_gebaeude="B"
        build_geoX="49.26157138692462" build_geoY="7.364275586013832"
    />
    <building build_id="100" build_gebaeude="B"
        build_geoX="49.260255047748224" build_geoY="7.364361416702309"
    />
    <building build_id="101" build_gebaeude="B"
        build_geoX="49.260311062896506" build_geoY="7.362065445785561"
    />
</buildings>

次のコードは、建物を描画するために何をしているのかを示しています。

for (var i = 0; i < building.length-1; i++) {
    var point = new google.maps.LatLng(
        parseFloat(building[i].getAttribute("build_geoX")),
        parseFloat(building[i].getAttribute("build_geoY"))
    );

    latlngbounds.extend(point);

    if( building[i].getAttribute("build_gebaeude") == 
        building[i+1].getAttribute("build_gebaeude") )
    {
        path.push(point);
    }
    else {
        path.push(point);
        poly = new google.maps.Polygon({
            paths: path,
            strokeWeight: 5,
            strokeOpacity: 1,
            fillOpacity: 0.30,
            strokeColor:'#FFFFFF',
            fillColor: '#a3141d'
        }); 
        polygons.push(poly);
        path.clear();
    }
}   
polygons[0].setMap(map);
polygons[1].setMap(map);

問題は、すべての点が描かれていないことですか? 問題がどこにあるのかわかりませんか?

4

1 に答える 1

0

paths配列に問題があるようです。含まれているコードからはpathsJavaScriptArrayなのか配列のようなオブジェクトなのかは明確ではありませんがpaths、ループ内で作業してからforループ内をクリアしようとしているので、次のことをおpaths勧めします。

  • paths Array必要に応じてループ内に新しいを作成します
  • 配列ループの状態を管理するコードを追加します
  • 建物の属性をチェックし、同等性をテストするために使用するコードを変更します
  • パス配列を Polygon コンストラクターに渡すため、配列をクリアしないでください

var paths = null;
var aNewPathIsNeeded = true;
for ( var i = 0; i < building.length-1; i++) {
    //Create your point
    //Extend your bounds
    //Since you always add the point to the paths array, move it out of the if
    //check and perform some array state management:

    if ( aNewPathIsNeeded ) {
        paths = new Array( point );
        aNewPathIsNeeded = false;
    }
    else { paths.push( point ); }

    //Change the if condition to deal with just the specific case of interest:

    var currentBldgAttr = building[i].getAttribute("build_gebaeude");
    var nextBldgAttr = building[i+1].getAttribute("build_gebaeude");
    if ( !( currentBldgAttr === nextBldgAttr ) ) { //Change to use: '==='
        //Create your polygon
        //Add the polygon to the polygons array
        //New code to manage paths state:
        aNewPathIsNeeded = true;
    }
}

あなたの問題が何であるか正確にはわかりませんが、このコードはあなたが前進するのに役立つと信じています. 補足として、clear()JavaScriptArrayメソッドではありません。を空にしたい場合は、次のようArrayに使用します: JavaScript の array.clear() は関数ではありませんか?array.length = 0で説明されています。

于 2012-05-23T13:08:35.037 に答える