GeoTools 读取 GeoPackage (`.gpkg`) 文件转为 GeoJSON
要使用 GeoTools 读取 GeoPackage (.gpkg
) 文件的第一个图层并将其转换为 GeoJSON 字符串,
可以按照以下步骤进行:
- 读取 GeoPackage 文件:使用 GeoTools 的
DataStore
类来访问 GeoPackage 文件。 - 获取第一个图层:从
DataStore
中获取图层信息。 - 将图层数据转换为 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();
}
}
}
}
主要步骤:
- 创建
File
对象:用指定路径创建File
对象,并检查文件是否存在。 - 配置
DataStore
参数:设置GeoPkgDataStoreFactory
参数,并创建DataStore
实例。 - 获取第一个图层:从
DataStore
中获取第一个图层名称,并获取SimpleFeatureSource
。 - 转换为 GeoJSON:使用
FeatureJSON
将SimpleFeatureCollection
转换为 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();
}
}
}
分类:
后端 / Java学习
, GIS / GeoTools
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用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三种查询方法比较