/********************** * CLASS: SpatialType * **********************/ SpatialType::SpatialType(const QString &type_name, int srid, unsigned variation_id) { QString name=type_name; if(name.endsWith(QString("ZM"))) { variation_id=var_zm; name.remove(QString("ZM")); } else if(name.endsWith(QString("M"))) { variation_id=var_m; name.remove(QString("M")); } else if(name.endsWith(QString("Z"))) { variation_id=var_z; name.remove(QString("Z")); } BaseType::setType(BaseType::getType(name, offset, types_count), offset, types_count); setVariation(variation_id); setSRID(srid); }
/********************** * CLASS: SpatialType * **********************/ SpatialType::SpatialType(const QString &type_name, int srid, unsigned variation_id) { BaseType::setType(BaseType::getType(type_name, offset, types_count), offset, types_count); setVariation(variation_id); setSRID(srid); }
std::shared_ptr<te::gm::Geometry> terrama2::core::ewktToGeom(const std::string& ewkt) { auto pos = ewkt.find(";")+1; auto wkt = ewkt.substr(pos); auto sridStr = ewkt.substr(0, pos-1); pos = sridStr.find("=")+1; try { int srid = std::stoi(sridStr.substr(pos)); auto geom = std::shared_ptr<te::gm::Geometry>(te::gm::WKTReader::read(wkt.c_str())); geom->setSRID(srid); return geom; } catch (const std::invalid_argument&) { QString msg(QObject::tr("Could not determine the SRID of the EWKT: %1").arg(QString::fromStdString(ewkt))); TERRAMA2_LOG_ERROR() << msg; throw InvalidSRIDException() << terrama2::ErrorDescription(msg); } }
SpatialType::SpatialType(unsigned type_id, int srid, unsigned var_id) { BaseType::setType(type_id,offset,types_count); setVariation(var_id); setSRID(srid); }
void terrama2::core::DataAccessorGDAL::addToCompleteDataSet(terrama2::core::DataSetPtr dataSet, std::shared_ptr<te::mem::DataSet> completeDataSet, std::shared_ptr<te::da::DataSet> teDataSet, std::shared_ptr< te::dt::TimeInstantTZ > fileTimestamp, const std::string& filename) const { completeDataSet->moveLast(); size_t rasterColumn = te::da::GetFirstPropertyPos(teDataSet.get(), te::dt::RASTER_TYPE); if(!isValidColumn(rasterColumn)) { QString errMsg = QObject::tr("No raster attribute."); TERRAMA2_LOG_ERROR() << errMsg; throw DataStoragerException() << ErrorDescription(errMsg); } size_t timestampColumn = te::da::GetFirstPropertyPos(completeDataSet.get(), te::dt::DATETIME_TYPE); int outputSrid = -1; try { outputSrid = getSrid(dataSet, false); verify::srid(outputSrid); } catch (const UndefinedTagException&) { //SRID is an optional parameter } teDataSet->moveBeforeFirst(); while(teDataSet->moveNext()) { std::unique_ptr<te::rst::Raster> raster(teDataSet->isNull(rasterColumn) ? nullptr : teDataSet->getRaster(rasterColumn).release()); if(outputSrid > 0 && outputSrid != raster->getSRID()) { try { verify::srid(raster->getSRID(), false); std::map<std::string, std::string> map{{"RTYPE", "EXPANSIBLE"}}; auto temp = raster->transform(outputSrid, map); if(!temp) { QString errMsg = QObject::tr("Null raster found.\nError during transform."); TERRAMA2_LOG_ERROR() << errMsg; continue; } else raster.reset(temp); } catch (...) { auto grid = raster->getGrid(); grid->setSRID(outputSrid); } } te::mem::DataSetItem* item = new te::mem::DataSetItem(completeDataSet.get()); item->setRaster(rasterColumn, raster.release()); if(isValidColumn(timestampColumn )) item->setDateTime(timestampColumn, fileTimestamp.get() ? static_cast<te::dt::DateTime*>(fileTimestamp->clone()) : nullptr); item->setString("filename", filename); completeDataSet->add(item); } }