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に付けたら反映されました。