Esempio n. 1
0
QDebug operator<<(QDebug dbg, OGRLayer* layer)
{
    layer->ResetReading();
    OGRFeatureDefn* def = layer->GetLayerDefn();
    FeaturePtr feat;
    while ((feat = FeaturePtr(layer->GetNextFeature())) != nullptr)
    {
        for (int i = 0; i < def->GetFieldCount(); ++i)
        {
            OGRFieldDefn* fdef = def->GetFieldDefn(i);
            switch (fdef->GetType())
            {
            case OFTInteger:
                dbg << fdef->GetNameRef() << feat->GetFieldAsInteger(i);
                break;
            case OFTReal:
                dbg << fdef->GetNameRef() << feat->GetFieldAsDouble(i);
                break;
            case OFTString:
                dbg << fdef->GetNameRef() << feat->GetFieldAsString(i);
                break;
            default:
                dbg << "Unknown type:" << fdef->GetType();
            }
        }
        dbg << "-----";
    }

    return dbg;
}
Esempio n. 2
0
std::tuple<size_t, size_t> countGeometry(OGRLayer* layer)
{
    FeaturePtr feat;
    size_t numVerts = 0, numObj = 0;
    while ((feat = FeaturePtr(layer->GetNextFeature())) != nullptr)
    {
        countGeometry(feat->GetGeometryRef(), numVerts, numObj);
    }
    return std::tuple<size_t, size_t>{numVerts, numObj};
}
Esempio n. 3
0
void extractGeometry(OGRLayer *layer, OGRCoordinateTransformation* trans,
                     FeatureInfo& info)
{
    FeaturePtr feat;
    while ((feat = FeaturePtr(layer->GetNextFeature())) != nullptr)
    {
        auto geom = feat->GetGeometryRef();
        geom->transform(trans);
        extractGeometry(geom, info);
    }
}
Esempio n. 4
0
VmbErrorType FeatureContainer::GetFeatureByName( const char *name, FeaturePtr &rFeature )
{
    VmbError_t res;

    if ( NULL == name )
    {
        return VmbErrorBadParameter;
    }

    if ( NULL == m_pImpl->m_handle )
    {
        return VmbErrorDeviceNotOpen;
    }

    FeaturePtrMap::iterator iter = m_pImpl->m_features.find( name );
    if ( iter != m_pImpl->m_features.end() )
    {
        rFeature = iter->second;
        return VmbErrorSuccess;
    }

    VmbFeatureInfo_t featureInfo;
        
    res = VmbFeatureInfoQuery( m_pImpl->m_handle, name, &featureInfo, sizeof( VmbFeatureInfo_t ));

    if ( VmbErrorSuccess == res )
    {
        rFeature = FeaturePtr( new Feature( &featureInfo, this ));
        // Only add visible features to the feature list
        if ( VmbFeatureVisibilityInvisible != featureInfo.visibility )
        {
            m_pImpl->m_features[name] = rFeature;
        }
    }

    return (VmbErrorType)res;
}
Esempio n. 5
0
VmbErrorType FeatureContainer::GetFeatures( FeaturePtr *pFeatures, VmbUint32_t &rnSize )
{
    VmbError_t res;

    if ( NULL == m_pImpl->m_handle )
    {
        return VmbErrorDeviceNotOpen;
    }

    // Feature list is static and therefore needs to be fetched only once per lifetime
    if ( false == m_pImpl->m_bAllFeaturesFetched )
    {
        std::vector<VmbFeatureInfo_t> featureInfoList;

        res = VmbFeaturesList( m_pImpl->m_handle, NULL, 0, &rnSize, sizeof(VmbFeatureInfo_t) );
        if ( 0 == rnSize || VmbErrorSuccess != res )
        {
            return (VmbErrorType)res;
        }

        featureInfoList.resize( rnSize );
        res = VmbFeaturesList( m_pImpl->m_handle, &featureInfoList[0], rnSize, &rnSize, sizeof(VmbFeatureInfo_t) );
        if ( VmbErrorSuccess != res )
        {
            return (VmbErrorType)res;
        }

        for (   std::vector<VmbFeatureInfo_t>::iterator iter = featureInfoList.begin();
                featureInfoList.end() != iter;
                ++iter )
        {
            std::string strName = iter->name;
            if ( 0 != strName.length() )
            {
                if ( SP_ISNULL( m_pImpl->m_features[strName] ))
                {
                    m_pImpl->m_features[strName] = FeaturePtr( new Feature( &(*iter), this ));
                }
            }
        }

        m_pImpl->m_bAllFeaturesFetched = true;
    }
    else // Features have been fetched before
    {
        res = VmbErrorSuccess;
    }

    if ( VmbErrorSuccess == res )
    {
        if ( NULL == pFeatures )
        {
            rnSize = (VmbUint32_t)m_pImpl->m_features.size();
            return VmbErrorSuccess;
        }
        else if ( m_pImpl->m_features.size() <= rnSize )
        {
            VmbUint32_t i = 0;
            for (   FeaturePtrMap::iterator iter = m_pImpl->m_features.begin();
                    m_pImpl->m_features.end() != iter;
                    ++iter, ++i )
            {
                pFeatures[i] = iter->second;
            }
            rnSize = (VmbUint32_t)m_pImpl->m_features.size();
            return VmbErrorSuccess;
        }
        else
        {
            return VmbErrorMoreData;
        }
    }
    else
    {
        return (VmbErrorType)res;
    }
}