Commit cfeb29d1 authored by Jeff Yutzler's avatar Jeff Yutzler
Browse files

first

parent 079a0168
[[im_semantic_annotations_extension]]
=== GeoPackage Semantic Annotations Extension
[WARNING]
====
This subsection is under discussion and may change radically.
====
[float]
==== Extension Title
Semantic Annotations Extension
[float]
==== Introduction
A semantic annotation is a semantically grounded term that can be applied to another concept.
Use of this extension enables semantic annotations to be applied to any business object in the current GeoPackage.
[float]
==== Extension Author
Image Matters LLC, in collaboration with the participants of OGC Testbed-15 and Testbed-16.
[float]
==== Extension Name or Template
`im_semantic_annotations` (will become `gpkg_semantic_annotations` if adopted by the OGC)
[float]
==== Extension Type
New requirement optionally dependent on the link:http://www.geopackage.org/spec121/#extension_schema[GeoPackage Schema Extension].
[float]
==== Applicability
This extension can be applied to any GeoPackage business object (layers, features, tiles, styles, etc.).
[float]
==== Scope
read-write
[float]
==== Specification
[float]
===== `gpkg_extensions`
To use this extension, add the following rows to this table in addition to the rows required for the Schema Extension (if used).
[[im_semantic_annotations_ger_table]]
.gpkg_extensions table row
[cols=",,,,",options="header",]
|====
| table_name | column_name | extension_name | definition | scope
|`gpkgext_semantic_annotations` |null |`im_semantic_annotations` |_a reference to this file_ |`read-write`
|`gpkgext_sa_reference` |null |`im_semantic_annotations` |_a reference to this file_ |`read-write`
|====
[NOTE]
==========
The values in the `definition` column SHOULD refer in some human-readable way to this extension specification. If the extension is adopted by OGC, it will gain the "gpkg_" prefix and get a different definition permalink.
==========
[float]
===== New Table Definitions
Following are definitions of the tables for this extension.
As with other GeoPackage tables, this extension takes no position on how either of these tables are to be used by a client.
[[gpkgext_semantic_annotations]]
[float]
====== `gpkgext_semantic_annotations`
When this extension is in use, add a table with this name and the following columns:
* `id` is a primary key
* `type` is a semantically grounded type (category) for the annotationfootnote:[If the semantic annotation represents a metadata profile, then the extension name for the metadata profile should be used as the type.]
* `title` is a human-readable title for the annotation
* `description` is an optional human-readable text description for the annotation
* `uri` is the resolvable URI for the semantic concept
[[gpkgext_sa_reference]]
[float]
====== `gpkgext_sa_reference`
When this extension is in use, add a table with this name and the following columns:
* `table_name` is the name of the table containing the business object
* `key_column_name` is the name of the integer column in the specified table that acts as a key
** _null_ indicates that the semantic annotation refers to the entire table
** if no such column exists, `rowid` can be used
* `key_value` is the value of the key column that uniquely identifies the row
** _null_ indicates that the semantic annotation refers to the entire table
* `sa_id` is a foreign key to `gpkgext_semantic_annotations`
[WARNING]
====
Use of `rowid` should be avoided in references because rowids that are not backed by an integer primary key are not guaranteed to be maintained by SQLite after vacuum operations.
====
[float]
==== Using Semantic Annotations
To use semantic annotations, do the following:
. Add rows to `gpkgext_semantic_annotations` for every annotation you want to use.
.. Optionally, use the Schema Extension to establish an enumeration for the types and further describe those types. See http://www.geopackage.org/guidance/extensions/schema.html for more details.
. Add a row to `gpkgext_sa_reference` for every row of every table requiring the annotation. There can be a many-to-many mapping between business object rows and semantic annotations.
This diff is collapsed.
[[metadata_dp_owcg_extension]]
=== GeoPackage Dataset Provenance Metadata Profile
[WARNING]
====
This subsection is under discussion and may change radically.
====
[float]
==== Extension Title
Dataset Provenance Encoding Metadata Profile
[float]
==== Introduction
A metadata profile establishes rules for using the link:http://www.geopackage.org/spec121/#extension_metadata[Metadata Extension] to meet a specific purpose.
This profile indicates how to present the metadata describing the provenance of a GeoPackage and/or its datasets.
The metadata document itself is a GeoJSON-encoded OWS Context as per the link:https://portal.opengeospatial.org/files/?artifact_id=68826[OWS Context GeoJSON Encoding Standard].
The FeatureCollection in this document will have citation information in the properties object and a single Feature object that indicates where the dataset was derived from.
This profile supports hierarchical metadata.
There may be additional metadata entries describing the datasets that were sources for the GeoPackage.
These entries will be linked to the parent metadata object and all of the contents tables using that source.
[float]
==== Extension Author
Image Matters LLC, in collaboration with the participants of OGC Testbed-16.
[float]
==== Extension Name or Template
`im_metadata_dp_owc_geojson` (will become `gpkg_metadata_dp_owc_geojson` if adopted by OGC)
[float]
==== Extension Type
New requirement dependent on link:http://www.geopackage.org/spec121/#extension_metadata[GeoPackage Metadata Extension]
and link:7-metadata-profiles.adoc[Metadata Profiles].
[float]
==== Applicability
This metadata profile allows for the storage of metadata pertaining to the provenance of a GeoPackage and/or its datasets.
[float]
==== Scope
metadata
[float]
==== Specification
[float]
===== `gpkg_extensions`
To use this extension, add the following row to this table.
[[im_metadata_dataset_provenance_ger_table]]
.gpkg_extensions Table Rows
[cols=",,,,",options="header",]
|====
| table_name | column_name | extension_name | definition | scope
|`gpkg_metadata` |`metadata` |`im_metadata_dp_owc_geojson` |_a reference to this file_ |`metadata`
|====
[NOTE]
====
The values in the `definition` column SHOULD refer in some human-readable way to this extension specification. If the extension is adopted by OGC, it will gain the "gpkg_" prefix and get a different definition permalink.
====
[float]
[[im_metadata_dataset_provenance_metadata]]
===== `gpkg_metadata`
This profile requires two separate sets of entries in this table.
[float]
====== GeoPackage
For the GeoPackage, add a row to the `gpkg_metadata` table with the following values:
* `id` is a primary key
* `md_scope` "undefined"
* `md_standard_uri` "https://portal.opengeospatial.org/files/?artifact_id=68826"
* `mime_type` "application/geo+json"
* `metadata` the actual OWS Context (FeatureCollection) document as described by the <<DP_GeoJSON_schema>>,
minus any Feature instances that directly describe datasets (see the next subsection for those)
The GeoJSON Encoding is described by the <<DP_GeoJSON_schema>>.
The geometries of the features in the FeatureCollection do not need to be populated.
In addition, some elements are required in a way that is not currently expressed in the schema:
* In the FeatureCollection `properties.links` array, there must be an element with a `rel` of "profiles" and an `href` of "http://www.opengis.net/spec/owcgeojson/1.0/req/core"
* If the GeoPackage was produced via a WPS, then in the FeatureCollection `properties.links` array, there should be an element with a `rel` of "via"
* If the GeoPackage was produced via a WPS, then there must be a Feature element describing that WPS instance, including the WPS request and response objects in an Offering
[float]
====== Dataset
For every dataset, add a row to the `gpkg_metadata` table with the following values:
* `id` is a primary key
* `md_scope` "dataset"
* `md_standard_uri` "https://portal.opengeospatial.org/files/?artifact_id=68826"
* `mime_type` "application/geo+json"
* `metadata` the actual OWS Context (Feature) document as described by the <<DP_GeoJSON_schema>>
that describes that dataset
The GeoJSON Encoding is described by the <<DP_GeoJSON_schema>>.
The geometries of the features in the FeatureCollection do not need to be populated.
In addition, some elements are required in a way that is not currently expressed in the schema:
* In the FeatureCollection `properties.links` array, there must be an element with a `rel` of "profiles" and an `href` of "http://www.opengis.net/spec/owcgeojson/1.0/req/core"
* If the Context file is derived from a known resource, then in the FeatureCollection `properties.links` array, there should be an element with a `rel` of "via"
* If a feature resource data is derived from a known data repository with a known URL, then in the corresponding Feature `properties.links` array, there should be an element with a `rel` of "data"
[float]
[[im_metadata_dataset_provenance_metadata_reference]]
===== `gpkg_metadata_reference`
[float]
====== GeoPackage
For the GeoPackage, add a row to the `gpkg_metadata_reference` table with the following values:
* `reference_scope` "geopackage"
* `table_name` _null_
* `column_name` _null_
* `row_id_value` _null_
* `timestamp` strftime(\'%Y-%m-%dT%H:%M:%fZ', \'now')
* `md_file_id` the `gpkg_metadata.id` for that metadata document
* `md_parent_id` _null_
[float]
====== Dataset
For every dataset that was derived from the source identified in the metadata document,
add a row to the `gpkg_metadata_reference` table with the following values:
* `reference_scope` "table"
* `table_name` the `gpkg_contents.table_name` for that dataset
* `column_name` _null_
* `row_id_value` _null_
* `timestamp` strftime(\'%Y-%m-%dT%H:%M:%fZ', \'now')
* `md_file_id` the `gpkg_metadata.id` for that metadata document
* `md_parent_id` the `gpkg_metadata.id` for the parent document
[[metadata_gemini_extension]]
=== GeoPackage Gemini Metadata Profile
[WARNING]
====
This subsection is under discussion and may change radically.
====
[float]
==== Extension Title
GEMINI Metadata Profile
[float]
==== Introduction
UK GEMINI (GEo-spatial Metadata INteroperability Initiative) is a specification for a set of metadata elements for describing geospatial data resources.
A metadata profile establishes rules for using the link:http://www.geopackage.org/spec121/#extension_metadata[Metadata Extension] to meet a specific purpose.
This profile indicates how to use ISO 19139-compliant GEMINI metadata to describe datasets in a GeoPackage.
[float]
==== Extension Author
Image Matters LLC, in collaboration with the participants of OGC Testbed-16.
[float]
==== Extension Name or Template
`im_metadata_gemini` (will become `gpkg_metadata_gemini` if adopted by OGC)
[float]
==== Extension Type
New requirement dependent on link:http://www.geopackage.org/spec121/#extension_metadata[GeoPackage Metadata Extension]
and link:7-metadata-profiles.adoc[Metadata Profiles].
[float]
==== Applicability
This metadata profile allows for the storage of metadata describing a specific dataset.
[float]
==== Scope
metadata
[float]
==== Specification
[float]
===== `gpkg_extensions`
To use this extension, add the following row to this table.
[[im_metadata_gemini_ger_table]]
.gpkg_extensions Table Rows
[cols=",,,,",options="header",]
|====
| table_name | column_name | extension_name | definition | scope
|`gpkg_metadata` |`metadata` |`im_metadata_gemini` |_a reference to this file_ |`metadata`
|====
[NOTE]
==========
The values in the `definition` column SHOULD refer in some human-readable way to this extension specification. If the extension is adopted by OGC, it will gain the "gpkg_" prefix and get a different definition permalink.
==========
[[im_metadata_gemini_metadata]]
[float]
===== `gpkg_metadata`
For every dataset, add a row to the `gpkg_metadata` table with the following values:
* `id` is a primary key
* `md_scope` "dataset"
* `md_standard_uri` "https://www.agi.org.uk/agi-groups/standards-committee/uk-gemini/40-gemini/1062-gemini-datasets-and-data-series"
* `mime_type` "application/xml" IS THIS RIGHT?
* `metadata` the actual metadata document
[[im_metadata_gemini_metadata_reference]]
[float]
===== `gpkg_metadata_reference`
For every dataset, add a row to the `gpkg_metadata_reference` table with the following values:
* `reference_scope` "table"
* `table_name` the `gpkg_contents.table_name` for that dataset
* `column_name` null
* `row_id_value` null
* `timestamp` strftime(\'%Y-%m-%dT%H:%M:%fZ', \'now')
* `md_file_id` the `gpkg_metadata.id` for that metadata document
* `md_parent_id` null
[[metadata_cop_owcg_extension]]
=== GeoPackage Common Operational Picture Metadata Profile
[WARNING]
====
This subsection is under discussion and may change radically.
====
[float]
==== Extension Title
Common Operational Picture Encoding Metadata Profile
[float]
==== Introduction
A metadata profile establishes rules for using the link:http://www.geopackage.org/spec121/#extension_metadata[Metadata Extension] to meet a specific purpose.
This profile indicates how to present the metadata describing a Common Operational Picture (COP).
The metadata document itself is a GeoJSON-encoded OWS Context as per the link:https://portal.opengeospatial.org/files/?artifact_id=68826[OWS Context GeoJSON Encoding Standard].
The FeatureCollection in this document will resources representing the individual layers for the COP along with all of the ancillary information required to render the layers.
[float]
==== Extension Author
Image Matters LLC, in collaboration with the participants of OGC Testbed-16.
[float]
==== Extension Name or Template
`im_metadata_cop_owc_geojson` (will become `gpkg_metadata_cop_owc_geojson` if adopted by OGC)
[float]
==== Extension Type
New requirement dependent on link:http://www.geopackage.org/spec121/#extension_metadata[GeoPackage Metadata Extension]
and link:7-metadata-profiles.adoc[Metadata Profiles].
[float]
==== Applicability
This metadata profile allows for the storage of a COP.
[float]
==== Scope
metadata
[float]
==== Specification
[float]
===== `gpkg_extensions`
To use this extension, add the following row to this table.
[[im_metadata_cop_ger_table]]
.gpkg_extensions Table Rows
[cols=",,,,",options="header",]
|====
| table_name | column_name | extension_name | definition | scope
|`gpkg_metadata` |`metadata` |`im_metadata_cop_owc_geojson` |_a reference to this file_ |`metadata`
|====
[NOTE]
====
The values in the `definition` column SHOULD refer in some human-readable way to this extension specification. If the extension is adopted by OGC, it will gain the "gpkg_" prefix and get a different definition permalink.
====
[float]
[[im_metadata_cop_metadata]]
===== `gpkg_metadata`
For the COP, add a row to the `gpkg_metadata` table with the following values:
* `id` is a primary key
* `md_scope` "undefined"
* `md_standard_uri` "https://portal.opengeospatial.org/files/?artifact_id=68826"
* `mime_type` "application/geo+json"
* `metadata` the actual OWS Context (FeatureCollection) document as described by the <<DP_GeoJSON_schema>>,
minus any Feature instances that directly describe datasets (see the next subsection for those)
The GeoJSON Encoding is described by the <<DP_GeoJSON_schema>> as modified by the <<owscontext_geopackage_extension>>.
The geometries of the features in the FeatureCollection do not need to be populated.
However, if the client is expected to start at a particular area of interest, then the `bbox` of the FeatureCollection should be populated accordingly.
[float]
[[im_metadata_cop_metadata_references]]
===== `gpkg_metadata_reference`
For the COP, add a row to the `gpkg_metadata_reference` table with the following values:
* `reference_scope` "geopackage"
* `table_name` _null_
* `column_name` _null_
* `row_id_value` _null_
* `timestamp` strftime(\'%Y-%m-%dT%H:%M:%fZ', \'now')
* `md_file_id` the `gpkg_metadata.id` for that metadata document
* `md_parent_id` _null_
[[owscontext_geopackage_extension]]
=== OWS Context GeoPackage Extension
This extension to OWS Context defines the rules for encoding GeoPackage content in an OWS Context document.
[float]
==== OWC:Resource
<<owc_resource_table>> shows the properties that are constrained when GeoPackage content is used as an OWC Resource.
Other elements are optional and have no further constraints other than what is presented in OWS Context.
It is common to populate the "`active`", "`minscaledenominator`", and "`maxscaledenominator`" properties when creating a COP.
If the OWS Context document is to be stored in the same GeoPackage as the content, then its URL is conventionally "`.`".
[#owc_resource_table,reftext='{table-caption} {counter:table-num}']
.Datatype owc:Resource for GeoPackage Content Extension
[cols=",,,,",options="header",]
|=======================================================================
|Name |GeoJSON location|Definition | Data Type and Values |Multiplicity and Use
|ID|`<xz>.features[i].id`|Unambiguous reference to the identification of the Context Resource (IRI)| {URL}/{`gpkg_contents.table_name`}| One (mandatory)
|Title |`<xz>.features[i].properties.title`|Title given to the Context resource | `gpkg_contents.identifier` | One (mandatory)
|Update Date |`<xz>.features[i].properties.updated`|Date of the last update of the Context resource |`gpkg_contents.last_change` | One (mandatory)
|Offering |`<xz>.features[i].properties.offering` | Service or inline content offering for the resource target at OGC compliant clients |_see <<owc_offering>>_ | One (mandatory) |
|=======================================================================
[[owc_offering]]
[float]
==== OWC:Offering
<<owc_offering_table>> shows the properties that are constrained when GeoPackage content is used as an OWC Offering.
[#owc_offering_table,reftext='{table-caption} {counter:table-num}']
.Datatype owc:Offering for GeoPackage Content Extension
[cols=",,,,",options="header",]
|=======================================================================
|Name |GeoJSON location|Definition | Data Type and Values |Multiplicity and Use
|Code|`<off>.code`|Code identifying the type of offering| "http://www.opengis.net/spec/owc-geojson/1.1/req/gpkg/{`gpkg_contents.data_type`}"| One (mandatory)
|Operation |`<off>.operations[k]` | Array of operations used to invoke the service |_see <<owc_operation>>_ | One (mandatory)
|Content |`<off>.contents[k]` | Array of contents (inline or byRef) |N/A | Zero (prohibited)
|Style Set |`<off>.styles[k]` | Array of style sets |_see <<owc_styleSet>>_ | Zero or more (optional)
|=======================================================================
[[owc_operation]]
[float]
==== OWC:Operation
<<owc_operation_table>> shows the properties that are constrained when GeoPackage content is used as an OWC Operation.
If the OWS Context document is to be stored in the same GeoPackage as the content, then its URL is conventionally "`.`".
[#owc_operation_table,reftext='{table-caption} {counter:table-num}']
.Datatype owc:Operation for GeoPackage Content Extension
[cols=",,,,",options="header",]
|=======================================================================
|Name |GeoJSON location|Definition | Data Type and Values |Multiplicity and Use
|Code|`<op>.code`|Code identifying the type of operation| `GPKG`| One (mandatory)
|Method |`<op>.method` | Code identifying the HTTP verb type of Operation |`SELECT` | One (mandatory)
|Type |`<op>.type` | MIME type of the expected results |N/A | Zero (prohibited)
|Request URL |`<op>.href` | Service Request URL |{URL} | One (mandatory)
|Request |`<op>.request` | Optional request body content |N/A | Zero (prohibited)
|Result |`<op>.result` | Result payload of the operation |N/A | Zero (prohibited)
|=======================================================================
[[owc_styleSet]]
[float]
==== OWC:styleSet
<<owc_styleset_table>> shows the properties that are constrained when GeoPackage content is used as an OWC Style Set.
Other elements are optional and have no further constraints other than what is presented in OWS Context.
[#owc_styleset_table,reftext='{table-caption} {counter:table-num}']
.Datatype owc:styleSet for GeoPackage Content Extension
[cols=",,,,",options="header",]
|=======================================================================
|Name |GeoJSON location|Definition | Data Type and Values |Multiplicity and Use
|Name|`<style>.name`|Unique name of the style set within a given offering| `gpkgext_styles.uri`| One (mandatory)
|Title |`<style>.title` | Human-readable title of the style set within a given offering | `gpkgext_styles.style` | One (mandatory)
|Abstract |`<style>.abstract` | Description of the style set | `gpkgext_styles.description` | Zero or one (optional)
|Default |`<style>.default` | Whether this style set is the one to be defined by default | "`true`" or "`false`" (default) | Zero or one (optional)
|legend URL |`<style>.legendURL` | URL of a legend image for the style set | {URL} | Zero or one (optional)
|Content |`<style>.content` | The inline or an external reference to the style set definition |N/A | Zero (prohibited)
|=======================================================================
[NOTE]
====
If there is more than one style set element for a particular offering, the "`default`" property should be populated with "true" or "false".
====
[[im_generalized_tables_extension]]
=== GeoPackage Generalized Tables Extension
[float]
==== Extension Title
Generalized tables extension
[float]
==== Introduction
A generalized table is a feature table that is designed for faster display at lower scales than the base table.
A generalized table contains a filtered set of features which can be used without potentially expensive join operations.
It also contains simplified geometries designed.
This approach is designed to improve client performance at the expense of a small increase of GeoPackage size.
This extension defines the relationship between base tables and generalized tables.
[float]
==== Extension Author
The participants of OGC Testbed-16.
[float]
==== Extension Name or Template
`tb16_generalized` (will become `gpkg_generalized` if adopted by the OGC)
[float]
==== Extension Type
New requirement dependent on the link:http://www.geopackage.org/spec/#features[GeoPackage Features clause].
[float]
==== Applicability
This extension can be applied to GeoPackage feature entries (tiles entries already embed a notion of multi-resolution representation)
[float]
==== Scope
read-write
[float]
==== Specification
[float]
===== `gpkg_extensions`
To use this extension, add the following rows to this table in addition to the rows required for the Schema Extension (if used).
[[t16_generalized_tables_ger_table]]
.gpkg_extensions table row
[cols=",,,,",options="header",]
|====
| table_name | column_name | extension_name | definition | scope
|`gpkgext_generalized` |null |`tb16_generalized` |_a reference to this file_ |`read-write`
|====
[NOTE]
==========
The values in the `definition` column SHOULD refer in some human-readable way to this extension specification. If the extension is adopted by OGC, it will gain the "gpkg_" prefix and get a different definition permalink.
==========
[float]
===== New Table Definitions
Following are definitions of the tables for this extension.
As with other GeoPackage tables, this extension takes no position on how either of these tables are to be used by a client.
[[gpkgext_generalized]]
[float]
====== `gpkgext_generalized`
When this extension is in use, add a table with this name and the following columns:
* `primary_table` is the primary table to which a generalized table refers to,
* `generalized_table`, name of the generalized table text,
* `distance`, the generalization distance used to create the simplified geometries, expressed in the native unit of measure of the data itself
* `scale_denominator`, the scale denominator at which the generalized table should be used
* `provenance`, a human readable description of how the generalized table was created
[float]
==== Using Generalized Tables
In order to use the generalized tables extension, on the write side:
* Look at the set of styles that will be used to render the data.
* Check for significant data filtering associated to scale dependencies (record reduction is where the main performance boost is obtained).
* Create one or more generalized tables based on the scale dependencies and the filters, with the target of significantly reducing the record count of the table (2 or more times at each step).
* As a secondary goal, use the generalized tables to simply reduce the size of geometries, in case the geometries prove to be particularly complex.
* Register each generalized table in the ``gpkext_generalized`` table.
On the read side, instead:
* For each base table, look-up the associated generalized tables.
* Sort the generalized table by scale denominator, ascending.
* The previous sorting generates a set of scale intervals:
- The main table is meant to be used from 1:1 to the scale denominator of the first generalized table
- The first generalized table, from its scale denominator, to the one of the next table
- Repeat until the last generalized table, which should be use for all scale denominators above the scale denominator found in ``gpkext_generalized``.
To avoid issues with mis-aligned scale calculations between server and client, the generalization distance can also be used for the purpose.
For the same reason, it is warmly advised to setup generalized tables so that each new generalized table contains a strict subset of the features in the previous generalized table, or base table. With this setup, at worst the client will keep on reading a higher resolution table, but will not lose contents in the map.
[[tb16_index]]
### GeoPackage Index extension
[float]
#### Introduction
Since the performance of GeoPackage _features_ data degrades with GeoPackage size, it is often prudent to split GeoPackages into well-defined partitions.
This approach is useful in scenarios that require opening and processing _features_ data over a small geographic area.
The purpose of this extension is to allow for the creation of an index GeoPackage that can point to a set of segment GeoPackages, each containing a partition.
A client of the GeoPackage Index extension should be able to inspect the index GeoPackage to find all the metadata information about a feature entry in the main GeoPackage, including attribute information, geometry, schema, proper metadata, styles, and the overall bounding box of the layer.
Then the client can determine which GeoPackages contain features of a particular feature type and bounding box.
This extension describes an index table which establishes the partitions, including the bounding boxes, for various _features_ entries that comprise the full dataset.
There should be separate information for each entry because not all features will be present in each partition.
(Entries might not necessarily even have the same SRS.)
Bounding boxes for separate partitions should be set up in such a way that features shared among packages are found at least once.
However, there is no benefit for them to overlap.
Once the partition pattern is established, the features are then inserted into the corresponding segment GeoPackage.
If a particular geometry spans multiple GeoPackages as illustrated in <<img_feature_span_2>>, it should be encoded in all of them.
In most cases, the required data will be present in a single GeoPackage.
In the worst case, the maximum number of GeoPackages that will have to be opened is four.
Use of a key column will allow clients to identify duplicates.
[#img_feature_span_2,reftext='{figure-caption} {counter:figure-num}']
.Features that span multiple partitions
image::{imagesdir}/images/d40a217eb5d7cc47de687ba0e1bc06ea/gpkg_index_shared_feature.png[]
[NOTE]
====
The idea is borrowed from link:https://mapserver.org/optimization/tileindex.html[MapServer's ogrtindex tool].
====
[float]
#### Extension authors
Testbed-16 participants
[float]
#### Extension Name or Template
tb16_index
[float]
#### Extension type