All Downloads are FREE. Search and download functionalities are using the official Maven repository.

mil.nga.geopackage.extension.CrsWktExtension Maven / Gradle / Ivy

package mil.nga.geopackage.extension;

import java.sql.SQLException;

import mil.nga.geopackage.GeoPackageConstants;
import mil.nga.geopackage.GeoPackageCore;
import mil.nga.geopackage.GeoPackageException;
import mil.nga.geopackage.db.AlterTable;
import mil.nga.geopackage.db.GeoPackageCoreConnection;
import mil.nga.geopackage.property.GeoPackageProperties;
import mil.nga.geopackage.property.PropertyConstants;
import mil.nga.geopackage.srs.SpatialReferenceSystem;

/**
 * OGC Well known text representation of Coordinate Reference Systems extension
 * 

* http://www.geopackage.org/spec/#extension_crs_wkt * * @author osbornb * @since 1.1.8 */ public class CrsWktExtension extends BaseExtension { /** * Name */ public static final String NAME = "crs_wkt"; /** * Extension name */ public static final String EXTENSION_NAME = GeoPackageConstants.EXTENSION_AUTHOR + Extensions.EXTENSION_NAME_DIVIDER + NAME; /** * Extension definition URL */ public static final String DEFINITION = GeoPackageProperties .getProperty(PropertyConstants.EXTENSIONS, NAME); /** * Extension new column name */ public static final String COLUMN_NAME = GeoPackageProperties .getProperty(PropertyConstants.EXTENSIONS, NAME, "column_name"); /** * Extension new column definition */ public static final String COLUMN_DEF = GeoPackageProperties .getProperty(PropertyConstants.EXTENSIONS, NAME, "column_def"); /** * Connection */ private GeoPackageCoreConnection connection = null; /** * Constructor * * @param geoPackage * GeoPackage * */ public CrsWktExtension(GeoPackageCore geoPackage) { super(geoPackage); connection = geoPackage.getDatabase(); } /** * Get or create the extension * * @return extension */ public Extensions getOrCreate() { Extensions extension = getOrCreate(EXTENSION_NAME, null, null, DEFINITION, ExtensionScopeType.READ_WRITE); if (!hasColumn()) { createColumn(); } return extension; } /** * Determine if the GeoPackage has the extension * * @return true if has extension */ public boolean has() { boolean exists = has(EXTENSION_NAME, null, null); if (exists) { exists = hasColumn(); } return exists; } /** * Update the extension definition * * @param srsId * srs id * @param definition * definition */ public void updateDefinition(long srsId, String definition) { connection.execSQL("UPDATE " + SpatialReferenceSystem.TABLE_NAME + " SET " + COLUMN_NAME + " = '" + definition + "' WHERE " + SpatialReferenceSystem.COLUMN_SRS_ID + " = " + srsId); } /** * Get the extension definition * * @param srsId * srs id * @return definition */ public String getDefinition(long srsId) { String definition = connection.querySingleTypedResult( "SELECT " + COLUMN_NAME + " FROM " + SpatialReferenceSystem.TABLE_NAME + " WHERE " + SpatialReferenceSystem.COLUMN_SRS_ID + " = ?", new String[] { String.valueOf(srsId) }); return definition; } /** * Create the extension column */ private void createColumn() { AlterTable.addColumn(connection, SpatialReferenceSystem.TABLE_NAME, COLUMN_NAME, COLUMN_DEF); // Update the existing known SRS values updateDefinition( GeoPackageProperties.getIntegerProperty( PropertyConstants.WGS_84, PropertyConstants.SRS_ID), GeoPackageProperties.getProperty(PropertyConstants.WGS_84, PropertyConstants.DEFINITION_12_063)); updateDefinition( GeoPackageProperties.getIntegerProperty( PropertyConstants.UNDEFINED_CARTESIAN, PropertyConstants.SRS_ID), GeoPackageProperties.getProperty( PropertyConstants.UNDEFINED_CARTESIAN, PropertyConstants.DEFINITION_12_063)); updateDefinition( GeoPackageProperties.getIntegerProperty( PropertyConstants.UNDEFINED_GEOGRAPHIC, PropertyConstants.SRS_ID), GeoPackageProperties.getProperty( PropertyConstants.UNDEFINED_GEOGRAPHIC, PropertyConstants.DEFINITION_12_063)); updateDefinition(GeoPackageProperties.getIntegerProperty( PropertyConstants.WEB_MERCATOR, PropertyConstants.SRS_ID), GeoPackageProperties.getProperty(PropertyConstants.WEB_MERCATOR, PropertyConstants.DEFINITION_12_063)); } /** * Determine if the GeoPackage SRS table has the extension column * * @return */ private boolean hasColumn() { boolean exists = connection .columnExists(SpatialReferenceSystem.TABLE_NAME, COLUMN_NAME); return exists; } /** * Remove the extension. Leaves the column and values. * * @since 3.2.0 */ public void removeExtension() { try { if (extensionsDao.isTableExists()) { extensionsDao.deleteByExtension(EXTENSION_NAME); } } catch (SQLException e) { throw new GeoPackageException( "Failed to delete CRS WKT extension. GeoPackage: " + geoPackage.getName(), e); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy