GeoPackage

作者

杰夫麦克纳

联系

jmckenna在gatewaygeomatics.com

最后更新

2022-04-25

GeoPackage,也写成“GPKG”,是基于标准的包装器,用于基于文件的SQLite数据库。GPKG是开放地理空间联盟在2014年采用的编码标准,自那以后因为在一个紧凑的文件中同时分发矢量和栅格数据而广受欢迎。

../../_images/gpkg.png

更多信息

有关GPKG的更多信息,请访问:

文件列表

与其他数据库格式类似, .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
../../_images/countries-shp2img.png