code: public void projectGeometry(GeoPackageGeometryData geometryData, Projection projection) {
  
          if (geometryData.getGeometry() != null) {
  
              try {
                  SpatialReferenceSystemDao srsDao = DaoManager.createDao(featureDao.getDb().getConnectionSource(), SpatialReferenceSystem.class);
                  int srsId = geometryData.getSrsId();
                  SpatialReferenceSystem srs = srsDao.queryForId((long) srsId);
  
                  if (!projection.equals(srs.getOrganization(), srs.getOrganizationCoordsysId())) {
  
                      Projection geomProjection = srs.getProjection();
                      ProjectionTransform transform = geomProjection.getTransformation(projection);
  
                      Geometry projectedGeometry = transform.transform(geometryData.getGeometry());
                      geometryData.setGeometry(projectedGeometry);
                      SpatialReferenceSystem projectionSrs = srsDao.getOrCreateCode(projection.getAuthority(), Long.parseLong(projection.getCode()));
                      geometryData.setSrsId((int) projectionSrs.getSrsId());
                  }
              } catch (SQLException e) {
                  throw new GeoPackageException("Failed to project geometry to projection with Authority: "
                          + projection.getAuthority() + ", Code: " + projection.getCode(), e);
              }
          }
  
      }
docs: Project the geometry into the provided projection
  
  @param geometryData geometry data
  @param projection   projection