java geotools 将 gpkg 转为图片

简要说明

在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());
    }
GeoTools是一个开源的Java空间分析库,它提供了一组用于处理地理数据的工具和API。如果你想将一个GDB(地理数据库,通常指的是Esri的文件格式)转换为GeoJSON格式,GeoTools可以帮助你完成这个过程。GeoJSON是一种轻量级的数据交换格式,常用于Web地图应用中。 以下是使用GeoTools将GDB转换为GeoJSON的基本步骤: 1. **添加依赖**:确保你的项目中包含了GeoTools库。如果你使用Maven,可以在pom.xml中添加如下依赖: ```xml <dependency> <groupId>org.geotools</groupId> <artifactId>gt-main</artifactId> <version>最新版本号</version> </dependency> ``` 2. **加载GDB数据**:创建一个`FileDataStoreFinder`实例,用来找到并打开GDB文件: ```java FileDataStoreFactory factory = FileDataStoreFinder.getDataStoreFinder(); DataStore dataStore = factory.open(new File("path_to_your_gdb_file gdb")); ``` 3. **获取内容**:从数据存储中获取数据集(FeatureSource): ```java // 假设数据集名为"features" FeatureSource featureSource = dataStore.getFeatureSource("features"); ``` 4. **读取和转换**:遍历FeatureSource,将每一项Feature转换为GeoJSON Feature对象: ```java SimpleFeatureCollection featuresCollection = featureSource.getFeatures(); List<SimpleFeature> simpleFeatures = featuresCollection.features(); List<GeoJSONFeature> geoJsonFeatures = new ArrayList<>(); for (SimpleFeature feature : simpleFeatures) { SimpleFeatureType featureType = feature.getFeatureType(); GeoJSONFeature geoJsonFeature = new GeoJSONFeature(featureType, feature.getDefaultGeometry(), feature.getUserData()); geoJsonFeatures.add(geoJsonFeature); } ``` 5. **写入GeoJSON**:将GeoJSONFeature对象序列化为GeoJSON字符串或保存到文件中: ```java String geoJsonString = new ObjectMapper().writeValueAsString(geoJsonFeatures); // 或者保存到文件 FileWriter writer = new FileWriter("output.geojson"); writer.write(geoJsonString); writer.close(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值