A C++ GeoPackage API.
GeoPackageCpp is written in C++ using SQLiteCPP and CLI11. The Google Test library is used to write unit tests. The project is built with CMake and dependencies are managed with conan.
const std::string fileName = "data.gpkg";
geopackage::GeoPackage geopackage { fileName };
std::string name = "basemap";
geopackage.createTileTable(name);
geopackage.addTile(name, geopackage::Tile(0,0,0,"data/tms/0/0/0.jpeg"));
geopackage.addTile(name, geopackage::Tile(1,0,0,"data/tms/1/0/0.jpeg"));
geopackage.addTile(name, geopackage::Tile(1,0,1,"data/tms/1/0/1.jpeg"));
geopackage.addTile(name, geopackage::Tile(1,1,0,"data/tms/1/1/0.jpeg"));
geopackage.addTile(name, geopackage::Tile(1,1,1,"data/tms/1/1/1.jpeg"));
geopackage.tiles(name, 1, [&](geopackage::Tile& t) {
std::cout << t << "\n";
});
mkdir build
cd build
conan install ..
cmake -g "Unix Makefiles" .
cmake --build .
ctest --verbose
List all commands.
% geopackage-cli list
list
create
Get help for a command
% geopackage-cli create --help
Create a blank GeoPackage
Usage: app/geopackage-cli create [OPTIONS]
Options:
-h,--help Print this help message and exit
-f TEXT REQUIRED File
Create an new GeoPackage file.
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
% geopackage-cli create -f data.gpkg
Spatial Reference Commands
List spatial references.
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
% geopackage-cli spatialref-list -f data.gpkg
Get spatial references by SRS ID
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-s | SRS ID | Yes |
% geopackage-cli spatialref-get -f data.gpkg -s 4326
Create a new spatial reference
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | SRS Name | Yes |
-s | SRS ID | Yes |
-o | Organization Name | Yes |
-i | Organization ID | Yes |
-c | Description | Yes |
-d | Definition | Yes |
geopackage-cli spatialref-create -f data.gpkg -n "EPSG:2927" -s 2927 -o EPSG -i 2927 -c "Washington State Plane South" -d 'PROJCS["NAD83(HARN) / Washington South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Reference_Network",SPHEROID["GRS 1980",6378137,298.257222101],TOWGS84[-0.991,1.9072,0.5129,-1.25033E-07,-4.6785E-08,-5.6529E-08,0]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["latitude_of_origin",45.3333333333333],PARAMETER["central_meridian",-120.5],PARAMETER["standard_parallel_1",47.3333333333333],PARAMETER["standard_parallel_2",45.8333333333333],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],UNIT["US survey foot",0.304800609601219],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","2927"]]'
Delete spatial references by SRS ID
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-s | SRS ID | Yes |
% geopackage-cli spatialref-delete -f data.gpkg -s 4326
Content Commands
List contents
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
% geopackage-cli content-list -f data.gpkg
Name: states
Data Type: features
Identifier: states
Description: states
Bounds: BOUNDS (0, 0, 0, 0)
SRS ID: 4326
Name: world
Data Type: tiles
Identifier: world
Description: world
Bounds: BOUNDS (-179.99, -89.99, 179.99, 89.99)
SRS ID: 4326
Get contents
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Name | Yes |
% geopackage-cli content-get -f data.gpkg -n states
Name: states
Data Type: features
Identifier: states
Description: states
Bounds: BOUNDS (0, 0, 0, 0)
SRS ID: 4326
Delete contents
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Name | Yes |
% geopackage-cli content-delete -f data.gpkg -n states
Create contents
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Name | Yes |
-t | Type (Features or Tiles) | Yes |
-d | Identifier | Yes |
-b | Bounds | Yes |
-s | SRS ID | Yes |
% geopackage-cli content-create -f data.gpkg -n cities -i cities -t features -d Cities -b "-180,-90,180,90" -s 4326
Geometry Columns Commands
List Geometry Columns
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
% geopackage-cli geometrycolumn-list -f data.gpkg
Name: rivers
Column: the_geom
Geometry Type: MultiLineString
SRS ID: 4326
Has Z: false
Has M: false
Name: states
Column: the_geom
Geometry Type: MultiPolygon
SRS ID: 4326
Has Z: false
Has M: false
Get a Geometry Column
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Name | Yes |
% geopackage-cli geometrycolumn-get -f data.gpkg -n cities
Name: cities
Column: geom
Geometry Type: Point
SRS ID: 4326
Has Z: false
Has M: false
Delete a Geometry Column
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Name | Yes |
% geopackage-cli geometrycolumn-delete -f data.gpkg -n cities
Create a Geometry Column
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Table Name | Yes |
-c | Column Name | Yes |
-g | Geometry Type | Yes |
-s | SRS ID | Yes |
-z | Has Z | Yes |
-m | Has M | Yes |
@ geopackage-cli geometrycolumn-create -f data.gpkg -n cities -c geometry -g Point -s 4326 -z false -m false
Extension
List Extensions
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
@ geopackage-cli extension-list -f data.gpkg
Name: line_index
Column Name: index
Extension Name: Line Index
Definition: R-TREE
Scope: read-write
Name: point_index
Column Name: index
Extension Name: Point Index
Definition: R-TREE
Scope: read-write
Get an Extension
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Name | Yes |
@ geopackage-cli extension-get -f data.gpkg -n "Line Index"
Name: line_index
Column Name: index
Extension Name: Line Index
Definition: R-TREE
Scope: read-write
Delete an Extension
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Name | Yes |
@ geopackage-cli extension-delete -f data.gpkg -n "Line Index"
Create an Extension
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Table Name | Yes |
-e | Extension Name | Yes |
-c | Column Name | Yes |
-d | Definition | Yes |
-s | Scope (read-write, write-only) | Yes |
@ geopackage-cli extension-create -f data.gpkg -e "Line Index" -n "index" -c "r_tree" -d "Spatial Index" -s "read-write"
Tile Matrix Set
List Tile Matrix Sets
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
@ geopackage-cli tilematrixset-list -f data.gpkg
Name: world
SRS ID: 4326
Bounds: BOUNDS (-179.99, -89.99, 179.99, 89.99)
Name: world_mercator
SRS ID: 3857
Bounds: BOUNDS (-2.00364e+07, -2.00375e+07, 2.00364e+07, 2.00375e+07)
Get a Tile Matrix Set
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Name | Yes |
@ geopackage-cli tilematrixset-get -f data.gpkg -n world
Name: world
SRS ID: 4326
Bounds: BOUNDS (-179.99, -89.99, 179.99, 89.99)
Create a Tile Matrix Set
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Name | Yes |
-s | SRS ID | Yes |
-b | Bounds | Yes |
@ geopackage-cli tilematrixset-create -f data.gpkg -n world -s 4326 -b -180,-90,180,90
Delete a Tile Matrix Set
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Name | Yes |
@ geopackage-cli tilematrixset-delete -f data.gpkg -n world
Tile Matrix
List Tile Matrix entries
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
@ geopackage-cli tilematrix-list -f data.gpkg
Table Name: world
Zoom Level: 0
Matrix Size: SIZE (2, 1)
Tile Size: SIZE (256, 256)
Pixel Size: SIZE (0.703125, 0.703125)
Table Name: world
Zoom Level: 1
Matrix Size: SIZE (4, 2)
Tile Size: SIZE (256, 256)
Pixel Size: SIZE (0.351562, 0.351562)
Table Name: world
Zoom Level: 2
Matrix Size: SIZE (8, 4)
Tile Size: SIZE (256, 256)
Pixel Size: SIZE (0.175781, 0.175781)
Get Tile Matrix
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Name | Yes |
-z | Zoom Level | Yes |
@ geopackage-cli tilematrix-get -f data.gpkg -n world -z 2
Table Name: world
Zoom Level: 2
Matrix Size: SIZE (8, 4)
Tile Size: SIZE (256, 256)
Pixel Size: SIZE (0.175781, 0.175781)
Create a Tile Matrix
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Name | Yes |
-z | Zoom Level | Yes |
-m | Matrix Size | Yes |
-t | Tile Size | Yes |
-p | Pixel Size | Yes |
@ geopackage-cli tilematrix-create -f data.gpkg -n world -z 2 -m 2,1 -t 256,256 -p 0.703125,0.703125
Delete a Tile Matrix
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Name | Yes |
-z | Zoom Level | No |
By table name and zoom level
@ geopackage-cli tilematrix-delete -f data.gpkg -n basemap -z 1
By table name
@ geopackage-cli tilematrix-delete -f data.gpkg -n basemap
Tile
Create a Tile table.
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Tile layer name | Yes |
@ geopackage-cli tiletable-create -f data.gpkg -n world
Create a Geodetic Tile Layer.
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Tile layer name | Yes |
-s | Tile Size (256,512) | Yes |
-z | Max Zoom Level | Yes |
@ geopackage-cli tile-geodetic-create -f data.gpkg -n world -s 256 -z 12
Create a Mercator Tile Layer.
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Tile layer name | Yes |
-s | Tile Size (256,512) | Yes |
-z | Max Zoom Level | Yes |
@ geopackage-cli tile-mercator-create -f data.gpkg -n world -s 256 -z 19
Add or Update a Tile.
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Tile layer name | Yes |
-z | Zoom Level | Yes |
-c | Column | Yes |
-r | Row | Yes |
-i | Input file | Yes |
@ geopackage-cli tile-set -f data.gpkg -n world -z 0 -c 0 -r 0 -i 0.jpeg
Delete a Tile.
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Tile layer name | Yes |
-z | Zoom Level | Yes |
-c | Column | Yes |
-r | Row | Yes |
@ geopackage-cli tile-delete -f data.gpkg -n world -z 0 -c 0 -r 0
Get a Tile.
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Tile layer name | Yes |
-z | Zoom Level | Yes |
-c | Column | Yes |
-r | Row | Yes |
-o | Output file | Yes |
@ geopackage-cli tile-get -f data.gpkg -n world -z 0 -c 0 -r 0 -o 0.jpeg
Export Tiles to a Directory
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Tile layer name | Yes |
-d | Output directory | Yes |
-m | Image format (jpeg, png) | Yes |
@ geopackage-cli tiles-export -f data.gpkg -n world -d world -m jpeg
Import Tiles from a Directory
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Tile layer name | Yes |
-d | Input directory | Yes |
@ geopackage-cli tiles-import -f data.gpkg -n world -d tiles
Tile Information
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Tile layer name | Yes |
@ geopackage-cli tile-info -f data.gpkg -n world
Information
Name: world
Description: world
SRS ID: 4326
Bounds: BOUNDS (-179.99, -89.99, 179.99, 89.99)
Tiles
0 = 2
1 = 8
2 = 32
3 = 128
List Tile Layers
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
@ geopackage-cli tile-list -f data.gpkg
world
tiles
Feature Commands
Create a Feature layer.
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Feature layer name | Yes |
-i | ID Field Name | Yes |
-c | Geometry Field Name | Yes |
-g | Geometry Type | Yes |
-d | Geometry Dimension | Yes |
-s | SRS ID | Yes |
-e | Field (name and type) | Yes |
% geopackage-cli feature-create -f data.gpkg -n cities -i id -c geom -g point -d 2d -s 4326 -e name string -e population double
Create a Feature layer with Random Points.
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-l | Feature layer name | Yes |
-n | Number of points | Yes |
% geopackage-cli random-features -f data.gpkg -l points -n 100
List all feature layers
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
% geopackage-cli feature-list -f data.gpkg
countries
cities
rivers
Count features
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Feature layer name | Yes |
% geopackage-cli feature-count -f data.gpkg -n countries
10
Feature Info
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Feature layer name | Yes |
% geopackage-cli feature-info -f ~/Projects/geoc/src/test/resources/data.gpkg -n rivers
Information
-----------
Name: rivers
Description: rivers
SRS ID: 4326
Bounds: BOUNDS (0, 0, 0, 0)
# Features: 13
Geometry Column
---------------
Name: the_geom
Type: MultiLineString
Dimension: 2D
Fields
------
Key Field: fid
scalerank Integer
featurecla String
name String
name_alt String
Feature Add
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Feature layer name | Yes |
-g | Geometry | Yes |
-v | Attribute Value | Yes |
% geopackage-cli feature-add -f ~/Projects/geoc/src/test/resources/data.gpkg -n cities -g "POINT(-122.3204, 47.6024)" -v name Seattle -v population 733919
Feature Update
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Feature layer name | Yes |
-i | Layer ID | Yes |
-g | Geometry | Yes |
-v | Attribute Value | Yes |
% geopackage-cli feature-update -f ~/Projects/geoc/src/test/resources/data.gpkg -n cities -i 12 -g "POINT(-122.3204, 47.6024)" -v name Seattle -v population 733919
Feature Delete All
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Feature layer name | Yes |
% geopackage-cli feature-delete-all -f ~/Projects/geoc/src/test/resources/data.gpkg -n cities
Feature Delete
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Feature layer name | Yes |
-i | Layer ID | Yes |
% geopackage-cli feature-delete -f ~/Projects/geoc/src/test/resources/data.gpkg -n cities -i 12
Feature Get
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Feature layer name | Yes |
-i | Layer ID | Yes |
% geopackage-cli feature-get -f ~/Projects/geoc/src/test/resources/data.gpkg -n cities -i 12
Geometry: POINT (46.8163175 -100.7634965)
name: Bismarck
population: 73,622
List Features
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Feature layer name | Yes |
% geopackage-cli features -f ~/Projects/geoc/src/test/resources/data.gpkg -n cities
"geometry","id","name","population"
"POINT (-122 47)","1","One","737000"
"POINT (-123 48)","2","Two","123"
Layer Style Commands
List Layer Styles
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | Layer name | Yes |
List all Layer Styles:
% geopackage-cli layerstyle-list -f ~/Projects/geoc/src/test/resources/data.gpkg
Name: cities
Style Name: cities_default
Description: The default cities style
Name: cities
Style Name: cities_red
Description: The red cities style
Name: rivers
Style Name: blue_rivers
Description: The default rivers style
List all Layer Styles for a Layer:
% geopackage-cli layerstyle-list -f ~/Projects/geoc/src/test/resources/data.gpkg -n cities
Name: cities
Style Name: cities_default
Description: The default cities style
Name: cities
Style Name: cities_red
Description: The red cities style
Get a Layer Style by ID
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-i | ID | Yes |
% geopackage-cli layerstyle-get -f ~/Projects/geoc/src/test/resources/data.gpkg -i 2
ID: 2
Name: cities
Style Name: cities_red
Description: The red cities style
SLD:
<?xml version="1.0" encoding="UTF-8"?><sld:StyledLayerDescriptor xmlns:sld="http://www.opengis.net/sld" xmlns="http://www.opengis.net/sld" xmlns:gml="http://www. opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" version="1.0.0">
<sld:UserLayer>
<sld:LayerFeatureConstraints>
<sld:FeatureTypeConstraint/>
</sld:LayerFeatureConstraints>
<sld:UserStyle>
<sld:Name>Default Styler</sld:Name>
<sld:FeatureTypeStyle>
<sld:Name>name</sld:Name>
<sld:Rule>
<sld:PolygonSymbolizer>
<sld:Fill>
<sld:CssParameter name="fill">#ffffff</sld:CssParameter>
</sld:Fill>
</sld:PolygonSymbolizer>
<sld:LineSymbolizer>
<sld:Stroke>
<sld:CssParameter name="stroke-width">0.5</sld:CssParameter>
</sld:Stroke>
</sld:LineSymbolizer>
</sld:Rule>
</sld:FeatureTypeStyle>
</sld:UserStyle>
</sld:UserLayer>
</sld:StyledLayerDescriptor>
Create a Layer Style
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-c | Catalog | No |
-a | Schema | No |
-n | Name | Yes |
-g | Geometry Column | Yes |
-t | Style Name | Yes |
-q | Style QML | No |
-s | Style SLD | No |
-l | Is Default | No |
-d | Description | No |
-o | Owner | No |
-u | UI | No |
% geopackage-cli layerstyle-create -f ~/Projects/geoc/src/test/resources/data.gpkg -n cities -g geom -t cities_default -d "The default cities style"
Delete a Layer Style by ID
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-i | ID | Yes |
% geopackage-cli layerstyle-delete -f ~/Projects/geoc/src/test/resources/data.gpkg -i 1
Load a Style File (SLD or QML) into a Layer Style by ID
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-i | ID | Yes |
-s | SLD or QML file name | Yes |
% geopackage-cli layerstyle-load -f ~/Projects/geoc/src/test/resources/data.gpkg -i 1 -s points.sld
Export a Layer Style's SLD or QML to a file.
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-i | ID | Yes |
-s | SLD or QML file name | Yes |
% geopackage-cli layerstyle-export -f ~/Projects/geoc/src/test/resources/data.gpkg -i 1 -s points.sld
** Index **
Create a RTree Index.
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | The Table Name | Yes |
% geopackage-cli index-create -f data.gpkg -n cities
Delete a RTree Index.
Flag | Description | Required |
---|---|---|
-f | GeoPackage file name | Yes |
-n | The Table Name | Yes |
% geopackage-cli index-delete -f data.gpkg -n cities