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() // 国の名前でフィルタリング ff = FilterFactoryFinder.createFilterFactory() filter = ff.createCompareFilter(FilterType.COMPARE_EQUALS) filter.addLeftValue(ff.createAttributeExpression("NAME")) filter.addRightValue(ff.createLiteralExpression("JAPAN")) fs = fs.getFeatures(filter) schema = fs.getSchema() crs = schema.getGeometryDescriptor().getCoordinateReferenceSystem() map = new DefaultMapContext([] as MapLayer[], crs) // 線の色を水色にするスタイルを作成 sf = CommonFactoryFinder.getStyleFactory() stroke = sf.createStroke( ff.literal(new Color(0x77, 0x99, 0xdd)), ff.literal(2) ) sym = sf.createLineSymbolizer(stroke, null) rule = sf.createRule() rule.symbolizers().add(sym) fts = sf.createFeatureTypeStyle([rule] 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("linecolor.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 件のコメント:
コメントを投稿