import java.awt.* import java.awt.image.* import javax.imageio.* import org.geotools.data.shapefile.* import org.geotools.factory.* import org.geotools.filter.* import org.geotools.map.* import org.geotools.renderer.lite.* import org.geotools.styling.* url = new URL("file://C:/share/geotools/world.shp") shapefile = new ShapefileDataStore(url) fs = shapefile.getFeatureSource() schema = fs.getSchema() crs = schema.getGeometryDescriptor().getCoordinateReferenceSystem() map = new DefaultMapContext([] as MapLayer[], crs) ff = FilterFactoryFinder.createFilterFactory() sf = CommonFactoryFinder.getStyleFactory() // ポリゴンの線の色1 stroke1 = sf.createStroke( ff.literal(new Color(10, 20, 207)), ff.literal(1) ) // ポリゴンの線の色2 stroke2 = sf.createStroke( ff.literal(new Color(47, 184, 27)), ff.literal(1) ) // ポリゴンの塗りつぶし色1 fill1 = sf.createFill( ff.literal(new Color(65, 195, 224)) ) // ポリゴンの塗りつぶし色2 fill2 = sf.createFill( ff.literal(new Color(133, 255, 7)) ) sym1 = sf.createPolygonSymbolizer(stroke1, fill1, null) sym2 = sf.createPolygonSymbolizer(stroke2, fill2, null) // フィルタを作成 filter = ff.createCompareFilter(FilterType.COMPARE_EQUALS) filter.addLeftValue(ff.createAttributeExpression("NAME")) filter.addRightValue(ff.createLiteralExpression("AUSTRALIA")) // フィルタに一致する場合のルールを作成 rule1 = sf.createRule() rule1.symbolizers().add(sym1) rule1.setFilter(filter) rule2 = sf.createRule() rule2.symbolizers().add(sym2) rule2.setElseFilter(true) fts = sf.createFeatureTypeStyle([rule1, rule2] as Rule[]) style = sf.createStyle() style.featureTypeStyles().add(fts) map.addLayer(new FeatureLayer(fs, style)) // レンダリング renderer = new StreamingRenderer() renderer.setContext(map) width = 400 bounds = map.getMaxBounds() rect = new Rectangle(0, 0, width, (int)(width * bounds.getHeight() / bounds.getWidth())) image = new BufferedImage((int)rect.width, (int)rect.height, BufferedImage.TYPE_INT_RGB) gr = image.createGraphics() gr.setPaint(Color.WHITE) gr.fill(rect) renderer.paint(gr, rect, bounds) ImageIO.write(image, "jpeg", new File("fill_with_rule.jpg"))出力画像
※世界地図のシェイプファイルは以下からダウンロード
World map for APRS
http://aprsworld.net/gisdata/world/
※.groovy/libからGROOVY_HOME/libにgeotools-2.7.3-bin.zipに
含まれるjarをコピーする
動作環境
groovy 1.8.2, JDK6 Update27, GeoTools 2.7.3
関連情報
・GeoToolsのウェブサイト
http://geotools.org/
0 件のコメント:
コメントを投稿