首页 > 其他分享 >GeoTools 读取 GeoPackage (`.gpkg`) 文件转为 GeoJSON

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

时间:2024-07-25 22:39:46浏览次数:15  
标签:GeoTools GeoJSON gpkg path import 图层 GeoPackage DataStore

要使用 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();
        }
    }
}

标签:GeoTools,GeoJSON,gpkg,path,import,图层,GeoPackage,DataStore
From: https://www.cnblogs.com/echohye/p/18324291

相关文章

  • Maven中GeoTools的引入及Maven中央仓库地址大全
    Maven官方https://mvnrepository.com/repos/centralMaven中央仓库地址大全https://blog.csdn.net/chinawangfei/article/details/122049810Maven中GeoTools的引入-Maven的repository与mirrorhttps://blog.csdn.net/Sky_Tree_Delivery/article/details/105415048pom.xm......
  • 【GeoJSON】Java 使用 GeoTools 将 SHP 文件转成 GeoJSON 文件
    文章目录引言Mavensettings.xml配置配置项目中的pom.xml引入GeoToolsJar包使用引言在使用GeoTools时,我们没办法直接使用Maven中央库的GeoTools,所以就需要我们配置一下关于GeoTools自己的镜像,所以我们才需要以下这几个步骤:1、检查一下自己本机maven的......
  • .NET|--杂类|--将Shp文件转为GeoJson-通过GDAL
    前言真实需求是将Shp转为pbf文件,不过我现在已经实现了,将GeoJson格式数据转换为pbf文件,所以需要实现将Shp文件转换为GeoJson格式即可.1.下载GDAL的程序集下载地址→https://www.gisinternals.com/development.php下载完成,解压zip文件,可以看到这些dll文件(路......
  • 获取Echarts的geoJson文件(省市/区县)
    1.获取市的级别直接使用阿里云提供的工具直接获取: https://datav.aliyun.com/portal/school/atlas/area_selector#&lat=32.62087018318113&lng=118.43261718749999&zoom=4和 https://map.easyv.cloud/和 https://geojson.hxkj.vip/  2.获取县和区的细到街道的geoJson,需......
  • Cesium 中 GeoJsonDataSource 贴地不生效的问题
    Cesium中GeoJsonDataSource可以设置clampToGround为true来确保其贴地,但有时会出现不生效的情况。可能有以下几个原因:数据源不是地理坐标系(WGS84):如果数据源不是基于WGS84坐标系的,则可能无法正确地将图形贴到地球表面。确保你的数据源使用正确的坐标系。数据源中的图形高......
  • GeoJSON数据转shp文件
        利用QGis工具,使用GeoJSON数据转换生成shp文件,用于GeoServer发布shp图层服务。首先准备一份GeoJSON文件,文件格式为“.json”,文件接入如下:详细操作如下:1、启动QGis工具2、从左上角找到按钮“opendatasourcemanager”,点击打开数据源3、选择数据源,显示如下......
  • 【2024最新】获取街道、镇级的地图geoJson数据方法
    一、目的1、在echarts上绘制市级以下的区、县的区域地图。2、在市级下很多都是有区、县的区域,而少部分是不存在区、县的,是直接市下面一级就是街道、镇级别的区域。3、统一管理区域数据,有区县的市直接拿区县的geoJson数据,没有区县的市级直接拿街道、镇级的geoJson数据来绘制区......
  • java + geotools 读写shp时,中文属性乱码问题
    创建时要注意 :  newDataStore.setCharset(Charset.forName("GBK"));代码如下:FilenewFile=newFile(filepath);Map<String,Serializable>params=newHashMap<>();params.put("url",newFile.toURI().toURL());params.put("createspati......
  • 上传第三方jar包至maven私服,以geotools为例
    上传jar包(模块打包方式为jar)mvndeploy:deploy-file-DgroupId=org.geotools-DartifactId=gt-api-Dversion=10.3-Dpackaging=jar-Dfile=C:\Users\Nihaorz\Desktop\geotools\gt-api\10.3\gt-api-10.3.jar-Durl=http://192.168.100.154:8081/repository/geostack-releases......
  • 「GIS数据」下载全国的GeoJSON、shp格式数据(精确到乡镇街道级)-2024年4月更新
    发现个可以免费下载全国 geojson 数据的网站,推荐一下。支持全国、省级、市级、区/县级、街道/乡镇级以及各级的联动数据,支持导入矢量地图渲染框架中使用,例如:D3、Echarts等geojson数据下载地址:https://geojson.hxkj.vip该项目github地址:https://github.com/TangSY/echarts-m......