shp文件

这里根据属性设置样式,将ENG_NAME=Guanshanhu的要素设置为红色,其他的要素默认为灰色
渲染结果

实现代码
import org.geotools.data.FileDataStore;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.map.FeatureLayer;
import org.geotools.map.Layer;
import org.geotools.renderer.GTRenderer;
import org.geotools.renderer.lite.StreamingRenderer;
import org.geotools.styling.*;
import org.geotools.styling.Stroke;
import org.opengis.filter.FilterFactory;
import org.opengis.filter.expression.Expression;
import org.geotools.data.FileDataStoreFinder;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.map.MapContent;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class ShpRenderer {
public static void main(String[] args) {
String shpPath = "C:\\Users\\ww\\Desktop\\clipPolygon.shp"; // 替换为你的SHP文件路径
String outputPath = "C:\\Users\\ww\\Desktop\\image.png"; // 输出图片路径
try {
exportShpToImage(shpPath, outputPath, 800, 600);
System.out.println("导出成功: " + outputPath);
} catch (Exception e) {
System.err.println("导出失败: " + e.getMessage());
e.printStackTrace();
}
}
public static void exportShpToImage(String shpPath, String outputPath, int width, int height) throws IOException, IOException {
// 1. 加载SHP文件
FileDataStore store = FileDataStoreFinder.getDataStore(new File(shpPath));
SimpleFeatureSource featureSource = store.getFeatureSource();
// 2. 创建地图内容
MapContent map = new MapContent();
map.setTitle("SHP Export");
// 3. 创建样式
Style style = createPolygonStyle();
// 4. 创建图层并添加到地图
Layer layer = new FeatureLayer(featureSource, style);
map.addLayer(layer);
// 5. 创建渲染器
GTRenderer renderer = new StreamingRenderer();
renderer.setMapContent(map);
// 6. 创建图像
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D graphics = image.createGraphics();
// 设置背景为白色
graphics.setColor(new Color(0, 0, 0, 0));
graphics.fillRect(0, 0, width, height);
// 7. 设置渲染区域
Rectangle imageBounds = new Rectangle(0, 0, width, height);
ReferencedEnvelope mapBounds = featureSource.getBounds();
// 8. 渲染地图到图像
renderer.paint(graphics, imageBounds, mapBounds);
// 9. 保存图像
ImageIO.write(image, "png", new File(outputPath));
// 10. 清理资源
graphics.dispose();
map.dispose();
store.dispose();
}
public static Style createPolygonStyle() {
StyleFactory styleFactory = CommonFactoryFinder.getStyleFactory();
FilterFactory filterFactory = CommonFactoryFinder.getFilterFactory();
// 创建要素类型样式
FeatureTypeStyle fts = styleFactory.createFeatureTypeStyle();
// 创建颜色表达式
Expression colorExpr = filterFactory.literal(Color.RED);
// 创建填充
Fill fill = styleFactory.createFill(
colorExpr,
filterFactory.literal(0.8) // 透明度
);
// 创建描边
Stroke stroke = styleFactory.createStroke(
filterFactory.literal(Color.BLACK),
filterFactory.literal(0.5)
);
// 创建多边形符号
PolygonSymbolizer polygonSymbolizer = styleFactory.createPolygonSymbolizer(stroke, fill, null);
// 创建规则,过滤要素
Rule rule = styleFactory.createRule();
rule.setFilter(filterFactory.equals(filterFactory.property("ENG_NAME"), filterFactory.literal("Guanshanhu")));
rule.symbolizers().add(polygonSymbolizer);
fts.rules().add(rule);
// 设置默认样式
Rule defaultRule = styleFactory.createRule();
defaultRule.setElseFilter(true);
// 默认填充
Fill defaultFill = styleFactory.createFill(
filterFactory.literal(Color.LIGHT_GRAY),
filterFactory.literal(0.5)
);
Stroke defaultStroke = styleFactory.createStroke(
filterFactory.literal(Color.DARK_GRAY),
filterFactory.literal(0.5)
);
PolygonSymbolizer defaultSymbolizer = styleFactory.createPolygonSymbolizer(defaultStroke, defaultFill, null);
defaultRule.symbolizers().add(defaultSymbolizer);
fts.rules().add(defaultRule);
// 创建样式
Style style = styleFactory.createStyle();
style.featureTypeStyles().add(fts);
return style;
}
}
1137

被折叠的 条评论
为什么被折叠?



