OpenLayersの点や線などのGeometryを作成時と違う場所に移動させると、作成時の場所が画面に入っていない場合、描画されなくなる。これは、Geometryオブジェクトのboundsの範囲が更新されないことが原因。boundsが画面内に入っているかで描画するかを決めるため、Geometryの位置を変更して再描画する場合は、合わせてboudnsの範囲も更新する。
大きさの関係は以下の通り。topとbottomがディスプレイと違うので注意。
- left <= right
- bottom <= top
線の場所を移動させる例。
var dt = vecTempLayer.features[0]; // 座標を更新 dt.geometry.components[0].x = newlonlat.lon; dt.geometry.components[0].y = newlonlat.lat; // boundsを更新 dt.geometry.bounds.left = Math.min(dt.geometry.components[0].x,dt.geometry.components[1].x); dt.geometry.bounds.right = Math.max(dt.geometry.components[0].x,dt.geometry.components[1].x); dt.geometry.bounds.bottom = Math.min(dt.geometry.components[0].y,dt.geometry.components[1].y); dt.geometry.bounds.top = Math.max(dt.geometry.components[0].y,dt.geometry.components[1].y); // 描画 vecTempLayer.drawFeature(vecTempLayer.features[0]);