GeoPackage - 一个简便轻量的本地地理数据库

GeoPackage是一种基于SQLite实现的单文件地理数据库,最大数据量可达140TB,支持矢量、栅格和属性数据。与shp文件相比,GeoPackage在加载、平移和缩放时更快,且软件支持广泛,如QGIS和ArcGIS。尽管仍存在一些局限性,但因其轻量化特性,适合小规模和移动场景。
摘要由CSDN通过智能技术生成

GeoPackage(以下简称gpkg),内部使用SQLite实现的一种单文件、与操作系统无关的地理数据库。

当前标准是1.2.1,该版本的html版说明书:https://www.geopackage.org/spec121/index.html

本文简单介绍一些最需要关注的特点,因为笔者也是菜鸡(刚开始学)

版权没有,盗版随你。本文原文地址:https://www.cnblogs.com/onsummer/p/11223618.html

小专栏连接:https://xiaozhuanlan.com/topic/6573102849 (内附更多GIS相关技术介绍)

作者:博客园 @秋意正寒

1. 简介

1.1 扩展名与数据库识别方法

它在非编辑、非连接状态时,扩展名是*.gpkg;在数据连接或编辑状态时,会多出来两个同名不同拓展名的文件:*.gpkg-wal、*.gpkg-shm。

如果不确定获得的gpkg文件是否是SQLite数据库,可以用二进制查看器看最开始的字节信息,前16个字节应为以null结尾的ASCII字符串“SQLite format 3”。有关更多二进制信息,请到OGC官网上查看说明书。

1.2 数据存储上限与支持的数据

gpkg最大数据量为140TB(应该没多少项目用得到吧...)

它能存储的数据有:

  • 矢量数据
  • 栅格数据
  • 属性数据(非空间数据)
  • 其他

“其他”意味着可以扩展gpkg数据库,但是目前笔者没有这个能力。

1.3 与其他类似的本地数据库比较

因为单文件的特点,与ArcGIS家族中的Geodatabase模型的实现——mdb和gdb很像。它们同为本地数据库。

gpkg没有类似ArcGIS中要素数据集的概念,也没有PostGIS中模式的概念(可能我没发现,暂时做狗头处理)

1.4 创建gpkg和打开gpkg的方法

  • 如果想直接用SQL访问gpkg,请使用DB Browser for SQLite
  • 如果要在网络端访问gpkg,推荐用
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java GeoPackage是在OGC OWS-10测试平台下开发的一个Java库和客户端,用于创建、插入、查询和更新SQLite数据库中的记录。它可以通过直接编写代码或使用SimpleFeature和SimpleFeatureType接口来操作数据库。Java GeoPackage客户端适用于各种地理空间应用,并且可以在其上进行扩展和定制。 以下是一个使用Java GeoPackage库创建和查询记录的示例: ```java import org.geotools.data.DataStore; import org.geotools.data.DataStoreFinder; import org.geotools.data.simple.SimpleFeatureSource; import org.geotools.feature.simple.SimpleFeatureTypeBuilder; import org.geotools.feature.simple.SimpleFeatureBuilder; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; public class GeoPackageExample { public static void main(String[] args) { // 创建GeoPackage文件 File file = new File("example.gpkg"); // 设置GeoPackage参数 Map<String, Object> params = new HashMap<>(); params.put("dbtype", "geopkg"); params.put("database", file); try { // 创建GeoPackage数据存储 DataStore dataStore = DataStoreFinder.getDataStore(params); // 创建要素类型 SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder(); typeBuilder.setName("Example"); typeBuilder.add("name", String.class); typeBuilder.add("population", Integer.class); SimpleFeatureType featureType = typeBuilder.buildFeatureType(); // 创建要素 SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder(featureType); featureBuilder.add("City A"); featureBuilder.add(1000000); SimpleFeature feature = featureBuilder.buildFeature(null); // 插入要素 dataStore.createSchema(featureType); dataStore.getFeatureSource("Example").addFeatures(DataUtilities.collection(feature)); // 查询要素 SimpleFeatureSource featureSource = dataStore.getFeatureSource("Example"); Filter filter = CQL.toFilter("population > 500000"); FeatureCollection<SimpleFeatureType, SimpleFeature> features = featureSource.getFeatures(filter); try (FeatureIterator<SimpleFeature> iterator = features.features()) { while (iterator.hasNext()) { SimpleFeature resultFeature = iterator.next(); System.out.println(resultFeature.getAttribute("name")); } } // 关闭数据存储 dataStore.dispose(); } catch (IOException e) { e.printStackTrace(); } } } ``` 这个示例演示了如何使用Java GeoPackage库创建一个名为"Example"的要素类型,并向其中插入一条记录。然后,通过查询获取人口超过500,000的城市名称。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值