MapScriptまつり#2 - 四角形を描いてみよう

id:kokogikoさんからブックマークを付けていただいたので、もうちょっとMapScriptをやってみました。
昨日のスクリプトに差し込みます。位置は $mapObj 生成した後から $mapObj->draw() 実行より前ならどこでもいいと思います。

# ======== 35.65,139.74 - 35.66,139.75 まで0.001刻みでメッシュを描く ==== ここから
# レイヤ作成(名前は'TEST', タイプはMS_LAYER_POLYGON, 不透明度は50(%)とする
$layerObj = new mapscript::layerObj($mapObj); # 引数を指定すると自動追加
$layerObj->STORE('name','TEST');
$layerObj->STORE('status',$mapscript::MS_ON);
$layerObj->STORE('type',$mapscript::MS_LAYER_POLYGON); # MS_SHAPE_POLYGON とは違う
$layerObj->STORE('opacity',50); # styleに付けない

# CLASS,STYLE作成
$classObj = new mapscript::classObj($layerObj);
$styleObj = new mapscript::styleObj($classObj);
# STYLEに色情報追加(塗りつぶし#00FF00, 枠線 #009900
$styleObj->STORE('color',new mapscript::colorObj(0,255,0));
$styleObj->STORE('outlinecolor',new mapscript::colorObj(0,153,0));

# フィーチャー作成(POLYGONで四角形作成)
$shapeObj = new mapscript::shapeObj($mapscript::MS_SHAPE_POLYGON);
for( $i = 0; $i < 10; $i++ ) {
  for( $j = 0; $j < 10; $j++ ) {
    $x1 = 139.74+$j*0.001;
    $y1 = 35.65+$i*0.001;
    $x2 = $x1+0.001;
    $y2 = $y1+0.001;
    $lineObj = new mapscript::lineObj();
    $lineObj->add(new mapscript::pointObj($x1,$y1));
    $lineObj->add(new mapscript::pointObj($x2,$y1));
    $lineObj->add(new mapscript::pointObj($x2,$y2));
    $lineObj->add(new mapscript::pointObj($x1,$y2));
    $lineObj->add(new mapscript::pointObj($x1,$y1));
    $shapeObj->add($lineObj);
    $layerObj->addFeature($shapeObj);
    $ix++;
  }
}
# ======== 35.65,139.74 - 35.66,139.75 まで0.001刻みでメッシュを描く ==== ここまで

なお、上の例では layerObj を生成する際に引数として $mapObj を指定していますが、この指定で$mapObjにレイヤオブジェクトが自動追加されます。指定しない場合は $mapObj->insertLayer($layerObj);で、追加できます。
ハマった点は二つ。

  • $layerObj の type を MS_SHAPE_POLYGON にしててはまりました。MULTIPOINT扱いになるようで、四隅に点だけが描かれました。
  • opacityを$styleObjに付けても反映されませんでした。$layerObjに付けたら反映されました。