読者です 読者をやめる 読者になる 読者になる

tanaka's Programming Memo

プログラミングについてのメモ。

OpenLayersのGeometryを変更した際に画面に描画されない

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]);