简要说明
在java开发中,利用geotools将gpkg格式数据转为图片
maven依赖
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-shapefile</artifactId>
<version>27.0</version>
</dependency>
<dependency>
<groupId>org.geotools.jdbc</groupId>
<artifactId>gt-jdbc-postgis</artifactId>
<version>27.0</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-referencing</artifactId>
<version>27.0</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-render</artifactId>
<version>27.0</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-coverage</artifactId>
<version>27.0</version>
</dependency>
<dependency>
<groupId>it.geosolutions.imageio-ext</groupId>
<artifactId>imageio-ext-utilities</artifactId>
<version>1.4.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.conversantmedia/disruptor -->
<dependency>
<groupId>com.conversantmedia</groupId>
<artifactId>disruptor</artifactId>
<version>1.2.15</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.geotools/gt-geojson -->
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-geojson</artifactId>
<version>27.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.geotools/gt-epsg-hsql -->
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-epsg-hsql</artifactId>
<version>27.0</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-main</artifactId>
<version>27.0</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-opengis</artifactId>
<version>27.0</version>
</dependency>
<dependency>
<groupId>si.uom</groupId>
<artifactId>si-quantity</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>si.uom</groupId>
<artifactId>si-units</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>tech.uom.lib</groupId>
<artifactId>uom-lib-common</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>systems.uom</groupId>
<artifactId>systems-common</artifactId>
<version>2.0.2</version>
</dependency>
样例代码
public static void main(String[] args) throws IOException {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
String gpkgPath = "D:\\tmp\\xxxx.gpkg";
Map<String, Object> params = new HashMap<String, Object>();
params.put("dbtype", "geopkg");
params.put("database", gpkgPath);
params.put("read-only", true);
DataStore dataStore = DataStoreFinder.getDataStore(params);
FeatureSource featureSource = dataStore.getFeatureSource(dataStore.getTypeNames()[0]);
// 为地图创建边界框
ReferencedEnvelope mapBounds = featureSource.getBounds();
// 创建地图上下文 定义样式
MapContent map = new MapContent();
Style style = SLD.createSimpleStyle(featureSource.getSchema());
FeatureLayer layer = new FeatureLayer(featureSource, style);
map.addLayer(layer);
// 创建渲染器
GTRenderer renderer = new StreamingRenderer();
renderer.setMapContent(map);
// 设置图片大小并创建缓冲图像
int imageWidth = 1024;
int imageHeight = 768;
BufferedImage image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
// 创建图形对象并设置背景色
Graphics2D graphics = image.createGraphics();
graphics.setBackground(Color.WHITE);
graphics.fillRect(0, 0, imageWidth, imageHeight);
// 设置地图区域并渲染地图
org.geotools.geometry.jts.ReferencedEnvelope envelope = new org.geotools.geometry.jts.ReferencedEnvelope(mapBounds);
envelope.expandBy(0.5 * envelope.getWidth(), 0.5 * envelope.getHeight());
renderer.setMapContent(map);
renderer.paint(graphics, image.getData().getBounds(), envelope);
// 保存图片进文件
File outputfile = new File("D:\\tmp\\output.png");
ImageIO.write(image, "png", outputfile);
// Clean up
graphics.dispose();
map.dispose();
dataStore.dispose();
stopWatch.stop();
System.out.println(stopWatch.getTotalTimeSeconds());
}