GeoTools 读取 GeoPackage (`.gpkg`) 文件转为 GeoJSON

要使用 GeoTools 读取 GeoPackage (.gpkg) 文件的第一个图层并将其转换为 GeoJSON 字符串,

可以按照以下步骤进行:

  1. 读取 GeoPackage 文件:使用 GeoTools 的 DataStore 类来访问 GeoPackage 文件。
  2. 获取第一个图层:从 DataStore 中获取图层信息。
  3. 将图层数据转换为 GeoJSON:使用 FeatureJSON 类将图层数据转换为 GeoJSON 格式的字符串。

下面是一个完整的示例代码:

import org.geotools.data.DataStore;
import org.geotools.data.DataStoreFinder;
import org.geotools.data.FeatureStore;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.geojson.feature.FeatureJSON;
import org.geotools.data.geopkg.GeoPkgDataStoreFactory;

import java.io.File;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;

public final class GeoPackageUtil {

    private GeoPackageUtil() {
        throw new UnsupportedOperationException("Utility class cannot be instantiated");
    }

    /**
     * 读取GeoPackage文件的第一个图层并将其转换为GeoJSON字符串
     *
     * @param path GeoPackage文件路径
     * @return GeoJSON字符串
     * @throws Exception 如果文件不存在或数据存储创建失败
     */
    public static String geoPackageLayerToGeoJSON(String path) throws Exception {
        File file = new File(path);

        if (!file.exists()) {
            throw new IllegalArgumentException("GeoPackage file does not exist at path: " + path);
        }

        // 配置参数
        Map<String, Object> params = new HashMap<>();
        params.put(GeoPkgDataStoreFactory.DBTYPE.key, "geopkg");
        params.put(GeoPkgDataStoreFactory.DATABASE.key, file);

        DataStore dataStore = null;
        try {
            // 创建数据存储
            dataStore = DataStoreFinder.getDataStore(params);
            if (dataStore == null) {
                throw new RuntimeException("Failed to create DataStore from GeoPackage file at path: " + path);
            }

            // 获取第一个图层
            String typeName = dataStore.getTypeNames()[0];
            SimpleFeatureSource featureSource = dataStore.getFeatureSource(typeName);
            SimpleFeatureCollection featureCollection = featureSource.getFeatures();

            // 将图层数据转换为GeoJSON
            FeatureJSON featureJSON = new FeatureJSON();
            StringWriter stringWriter = new StringWriter();
            featureJSON.writeFeatureCollection(featureCollection, stringWriter);

            return stringWriter.toString();
        } finally {
            // 关闭数据存储以释放资源
            if (dataStore != null) {
                dataStore.dispose();
            }
        }
    }
}

主要步骤:

  1. 创建 File 对象:用指定路径创建 File 对象,并检查文件是否存在。
  2. 配置 DataStore 参数:设置 GeoPkgDataStoreFactory 参数,并创建 DataStore 实例。
  3. 获取第一个图层:从 DataStore 中获取第一个图层名称,并获取 SimpleFeatureSource
  4. 转换为 GeoJSON:使用 FeatureJSONSimpleFeatureCollection 转换为 GeoJSON 格式的字符串,并返回。

使用示例:

public class Main {
    public static void main(String[] args) {
        try {
            String geoJson = GeoPackageUtil.geoPackageLayerToGeoJSON("path/to/your/file.gpkg");
            System.out.println(geoJson);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
posted @   槑孒  阅读(120)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
历史上的今天:
2023-07-25 Ubuntu20.04 文件管理器无法打开
2023-07-25 Ubuntu编译安装GDAL
2023-07-25 CMake Error at CMakeLists.txt: No CMAKE_CXX_COMPILER could be found.
2023-07-25 docker停止所有容器并删除
2023-07-25 ubuntu安装OpenJDK 17,并配置环境变量
2023-07-25 Ubuntu输入su提示认证失败的解决方法
2022-07-25 ArcGIS api for JS三种查询方法比较
点击右上角即可分享
微信分享提示