関空をぐるぐる回す

関空を塗りつぶしてみる

 今回のお題の関空をぐるぐる回すために、緯度経度データを平面に変換して表示しました。
今回は、その関空の沿岸データから、陸地部分を塗りつぶしてみます。

海岸線は、g2.draw(new Line2D.Double というプログラムで線を描いています。
この線の内側を塗りつぶして、陸地を表現しようと思います。塗りつぶしを行うためにポリゴンを使います。


			for(int j=0;j<vtnum-1;j++){
				g2.draw(new Line2D.Double(Center_x+line[j][0]*Factor,Center_y-line[j][1]*Factor,Center_x+line[j+1][0]*Factor,Center_y-line[j+1][1]*Factor));
//			}

 このようにして線を描いていましたが、この部分を以下のように変更しています。


			BasicStroke basicStroke = new BasicStroke(stroke,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER);;
		    g2.setStroke(basicStroke);
		    Polygon pol = new Polygon();
			for(int j=0;j&lvtnum;j++){
		         if((line[j][0]==0)&(line[j][1]==0)){
		             if(pol.npoints != 0){  // 既にpolygonがある
		               if(isFill()){
		                 g2.fillPolygon(pol);
		               }
		             else {
		                 g2.drawPolygon(pol);
		               }
		               pol = new Polygon();
		             }
		           }else{
		             pol.addPoint((int)Math.round(Center_x+line[j][0]*Factor), (int)Math.round(Center_y-line[j][1]*Factor));
		           }
	    
			}
			if(pol.npoints != 0){ // polygonが形成されている
				if(isFill()){
					g2.fillPolygon(pol);
				}
	        else {
	          g2.drawPolygon(pol);
	        }
	      }
			}
 そして塗りつぶすかどうかの判断のメソッドも追加しました。
csvデータの頭のところに、塗りつぶし判断のフラグを設けています。

	private boolean isFill() {
		   if(fillSwitch == 1){
			      return true;
			    }
			     else{
			      return false;
			    }
	}

plane

 ポリゴンは整数でしか書けないみたいだから、doubleの座標データをintでキャストしています。
そのせいか関空の島の輪郭が荒く表現されます。







今回はDrawGraphi.javaを変更しただけです。