GeoPackage¶
- 作者
杰夫麦克纳
- 联系
jmckenna在gatewaygeomatics.com
- 最后更新
2022-04-25
GeoPackage,也写成“GPKG”,是基于标准的包装器,用于基于文件的SQLite数据库。GPKG是开放地理空间联盟在2014年采用的编码标准,自那以后因为在一个紧凑的文件中同时分发矢量和栅格数据而广受欢迎。

更多信息¶
有关GPKG的更多信息,请访问:
OGC的GeoPackage编码标准:https://www.ogc.org/standards/geopackage
文件列表¶
与其他数据库格式类似, .gpkg 文件由几个表组成。几何图形保存在BLOB表列中。
备注
想要跟随的Windows用户可以转换 MS4W 包括在内 demo.db 将SpatiaLite数据库转换为GPKG文件(用于 国家 表)和命令(在内部执行 /ms4w/apps/local-demo/data/ )::
ogr2ogr -f GPKG countries.gpkg demo.db countries
数据访问/连接方法¶
可通过OGR在MapServer中访问GPKG GPKG driver 。建议使用GDAL/OGR版本2.2或更高版本访问GPKG。
OGR使用GPKG数据库中的空间表的名称(在GEOMETRY_COLUMNS表中注册的具有几何列的表)作为层。
连接参数必须包括 .gpkg 扩展名,数据参数应该是空间表(或OGR层)的名称。
CONNECTIONTYPE OGR
CONNECTION "name.gpkg"
DATA "layername"
小技巧
MapServer 7.4.x系列包含用于GPKG访问的几个关键修复程序,因此,至少建议使用MapServer 7.6.0。
步骤1:使用ogrinfo检查¶
首先,您应该确保您的本地GDAL/OGR版本包含“GPKG”驱动程序和“SQLite/Spatialite”驱动程序,方法是使用 --formats 命令:
ogrinfo --formats
Supported Formats:
...
GPKG -raster,vector- (rw+vs): GeoPackage
SQLite -vector- (rw+v): SQLite / Spatialite
...
一旦确认拥有GPKG驱动程序,就可以在数据库上尝试ogrinfo命令以获取空间表的列表:
ogrinfo countries.gpkg
INFO: Open of `countries.gpkg'
using driver `GPKG' successful.
1: countries (Multi Polygon)
现在使用ogrinfo获取有关空间‘Country’表的结构的信息:
ogrinfo countries.gpkg countries -summary
INFO: Open of `countries.gpkg'
using driver `GPKG' successful.
Layer name: countries
Geometry: Multi Polygon
Feature Count: 177
Extent: (-180.000000, -90.000000) - (180.000000, 83.645130)
Layer SRS WKT:
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",6378137,298.257223563,
AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],
UNIT["degree",0.0174532925199433,
AUTHORITY["EPSG","9122"]],
AUTHORITY["EPSG","4326"]]
FID Column = ogc_fid
Geometry Column = GEOMETRY
featurecla: String (0.0)
scalerank: Integer (0.0)
labelrank: Integer (0.0)
sovereignt: String (0.0)
sov_a3: String (0.0)
adm0_dif: Integer (0.0)
...
您还可以使用ogrinfo来验证GPKG表的几何是否具有空间索引,这对性能非常重要(请查看 HasSpatialIndex (Integer) = 1 确认空间索引存在):
ogrinfo -sql "SELECT HasSpatialIndex('countries', 'GEOMETRY')" countries.gpkg
Layer name: SELECT
Geometry: Unknown (any)
Feature Count: 1
Layer SRS WKT:
(unknown)
HasSpatialIndex: Integer (0.0)
OGRFeature(SELECT):0
HasSpatialIndex (Integer) = 1
如果您需要为您的GPKG创建添加空间索引,您还可以使用ogrinfo:
ogrinfo -sql "SELECT CreateSpatialIndex('parcelle_graphique', 'geom')" PARCELLES_GRAPHIQUES.gpkg
如果要让MapServer筛选或查询GPKG中的特定字段,还应考虑为该字段添加属性索引:
ogrinfo -sql "CREATE INDEX IDXnewindexname ON yourtable (yourcolumn)" file.gpkg
步骤2:在 Mapfile 中添加图层¶
对于OGR连接,始终建议设置CONNECTIONTYPE、CONNECTIONTYPE和DATA,如下所示:
/* Countries */
LAYER
NAME "countries"
TYPE POLYGON
STATUS ON
CONNECTIONTYPE OGR
CONNECTION "countries.gpkg"
DATA "countries" # the OGR layername, found through ogrinfo
EXTENT -180.000000 -90.000000 180.000000 83.645130 # for maximum performance
PROCESSING "CLOSE_CONNECTION=DEFER" # for maximum performance
CLASS
NAME "World Countries"
STYLE
COLOR 200 200 200
OUTLINECOLOR 0 0 0
WIDTH 0.1
END #style
END #class
END #layer
步骤3:使用shp2img测试您的映射文件¶
使用MapServer命令行实用程序 Sp2IMG 要验证 Mapfile 是否创建了有效的地图图像,并显示绘制时间,例如:
shp2img -m geopackage.map -o ttt.png -map_debug 3
msDrawMap(): rendering using outputformat named png (AGG/PNG).
msDrawMap(): WMS/WFS set-up and query, 0.000s
msDrawMap(): Layer 0 (countries), 0.078s
msDrawMap(): Drawing Label Cache, 0.000s
msDrawMap() total time: 0.079s
msSaveImage(ttt.png) total time: 0.008s
