本文整理汇总了C++中OGR_L_GetNextFeature函数的典型用法代码示例。如果您正苦于以下问题:C++ OGR_L_GetNextFeature函数的具体用法?C++ OGR_L_GetNextFeature怎么用?C++ OGR_L_GetNextFeature使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了OGR_L_GetNextFeature函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: tmp
void object::test<7>()
{
OGRErr err = OGRERR_NONE;
// Read feature without geometry
std::string tmp(data_tmp_);
tmp += SEP;
tmp += "tpoly.shp";
OGRDataSourceH ds = OGR_Dr_Open(drv_, tmp.c_str(), false);
ensure("Can't open layer", NULL != ds);
OGRLayerH lyr = OGR_DS_GetLayer(ds, 0);
ensure("Can't get layer", NULL != lyr);
err = OGR_L_SetAttributeFilter(lyr, "PRFEDEA = 'nulled'");
ensure_equals("Can't set attribute filter", OGRERR_NONE, err);
// Fetch feature without geometry
OGRFeatureH featNonSpatial = OGR_L_GetNextFeature(lyr);
ensure("Didnt get feature with null geometry back", NULL != featNonSpatial);
// Null geometry is expected
OGRGeometryH nonGeom = OGR_F_GetGeometryRef(featNonSpatial);
ensure("Didnt get null geometry as expected", NULL == nonGeom);
OGR_F_Destroy(featNonSpatial);
OGR_DS_Destroy(ds);
}
示例2: GDALWPrintRecords
void GDALWPrintRecords(GDALWConnection conn) {
char * wkt;
int i;
OGRFeatureH feature;
OGRGeometryH geometry;
OGRFeatureDefnH featureDefn;
featureDefn = OGR_L_GetLayerDefn(conn.layer);
OGR_L_ResetReading(conn.layer);
while( (feature = OGR_L_GetNextFeature(conn.layer)) != NULL ) {
for(i = 0; i < OGR_FD_GetFieldCount(featureDefn); i++ ) {
OGRFieldDefnH hFieldDefn = OGR_FD_GetFieldDefn( featureDefn, i );
if( OGR_Fld_GetType(hFieldDefn) == OFTInteger )
printf( "%d,", OGR_F_GetFieldAsInteger( feature, i ) );
else if( OGR_Fld_GetType(hFieldDefn) == OFTReal )
printf( "%.3f,", OGR_F_GetFieldAsDouble( feature, i) );
else
printf( "%s,", OGR_F_GetFieldAsString( feature, i) );
}
geometry = OGR_F_GetGeometryRef(feature);
OGR_G_ExportToWkt(geometry, &wkt);
printf("%s", wkt);
printf("\n");
CPLFree(wkt);
OGR_F_Destroy(feature);
}
}
示例3: orig
void object::test<5>()
{
// Original shapefile
std::string orig(data_);
orig += SEP;
orig += "poly.shp";
OGRDataSourceH dsOrig = OGR_Dr_Open(drv_, orig.c_str(), false);
ensure("Can't open layer", NULL != dsOrig);
OGRLayerH lyrOrig = OGR_DS_GetLayer(dsOrig, 0);
ensure("Can't get layer", NULL != lyrOrig);
// Copied shapefile
std::string tmp(data_tmp_);
tmp += SEP;
tmp += "tpoly.shp";
OGRDataSourceH dsTmp = OGR_Dr_Open(drv_, tmp.c_str(), false);
ensure("Can't open layer", NULL != dsTmp);
OGRLayerH lyrTmp = OGR_DS_GetLayer(dsTmp, 0);
ensure("Can't get layer", NULL != lyrTmp);
// Iterate through features and compare geometries
OGRFeatureH featOrig = OGR_L_GetNextFeature(lyrOrig);
OGRFeatureH featTmp = OGR_L_GetNextFeature(lyrTmp);
while (NULL != featOrig && NULL != featTmp)
{
OGRGeometryH lhs = OGR_F_GetGeometryRef(featOrig);
OGRGeometryH rhs = OGR_F_GetGeometryRef(featTmp);
ensure_equal_geometries(lhs, rhs, 0.000000001);
// TODO: add ensure_equal_attributes()
OGR_F_Destroy(featOrig);
OGR_F_Destroy(featTmp);
// Move to next feature
featOrig = OGR_L_GetNextFeature(lyrOrig);
featTmp = OGR_L_GetNextFeature(lyrTmp);
}
OGR_DS_Destroy(dsOrig);
OGR_DS_Destroy(dsTmp);
}
示例4: NinjaOGRContain
/**
* \brief Convenience function to check if a geometry is contained in a OGR
* datasource for a given layer.
*
* The passed geometry is a wkt representation of a geometry of type GeomType.
* pszFile is opened, and the passed geometry is queried against all
* geometries in pszLayer. If the passed geometry is contained in *any* of the
* geomtries in the layer, TRUE is returned. FALSE is returned otherwise,
* including errors. The SRS of all geometries is assumed to be the same.
*
* \param pszWkt Well-known text representation of a geometry.
* \param pszFile File to open
* \param pszLayer Layer to extract geometry from, if NULL, use layer 0.
* \return TRUE if pszWkt is contained in any geometry in pszLayer, FALSE
* otherwise, include errors
*/
int NinjaOGRContain(const char *pszWkt, const char *pszFile,
const char *pszLayer)
{
int bContains = FALSE;
if( pszWkt == NULL || pszFile == NULL )
{
return FALSE;
}
CPLDebug( "WINDNINJA", "Checking for containment of %s in %s:%s",
pszWkt, pszFile, pszLayer ? pszLayer : "" );
OGRGeometryH hTestGeometry = NULL;
int err = OGR_G_CreateFromWkt( (char**)&pszWkt, NULL, &hTestGeometry );
if( hTestGeometry == NULL || err != CE_None )
{
return FALSE;
}
OGRDataSourceH hDS = OGROpen( pszFile, 0, NULL );
if( hDS == NULL )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Failed to open datasource: %s", pszFile );
OGR_G_DestroyGeometry( hTestGeometry );
bContains = FALSE;
return bContains;
}
OGRLayerH hLayer;
if( pszLayer == NULL )
{
hLayer = OGR_DS_GetLayer( hDS, 0 );
}
else
{
hLayer = OGR_DS_GetLayerByName( hDS, pszLayer );
}
OGRFeatureH hFeature;
if( hLayer != NULL )
{
OGRGeometryH hGeometry;
OGR_L_ResetReading( hLayer );
while( ( hFeature = OGR_L_GetNextFeature( hLayer ) ) != NULL )
{
hGeometry = OGR_F_GetGeometryRef( hFeature );
if( OGR_G_Contains( hGeometry, hTestGeometry ) )
{
bContains = TRUE;
OGR_F_Destroy( hFeature );
break;
}
OGR_F_Destroy( hFeature );
}
}
OGR_G_DestroyGeometry( hTestGeometry );
OGR_DS_Destroy( hDS );
return bContains;
}
示例5: fetchFeatureWithId
bool QgsOgrFeatureIterator::fetchFeature( QgsFeature& feature )
{
feature.setValid( false );
if ( mClosed || !ogrLayer )
return false;
if ( mRequest.filterType() == QgsFeatureRequest::FilterFid )
{
bool result = fetchFeatureWithId( mRequest.filterFid(), feature );
close(); // the feature has been read or was not found: we have finished here
return result;
}
else if ( mRequest.filterType() == QgsFeatureRequest::FilterFids )
{
while ( mFilterFidsIt != mFilterFids.constEnd() )
{
QgsFeatureId nextId = *mFilterFidsIt;
mFilterFidsIt++;
if ( fetchFeatureWithId( nextId, feature ) )
return true;
}
close();
return false;
}
OGRFeatureH fet;
while (( fet = OGR_L_GetNextFeature( ogrLayer ) ) )
{
if ( !readFeature( fet, feature ) )
continue;
else
OGR_F_Destroy( fet );
if ( !mRequest.filterRect().isNull() && !feature.hasGeometry() )
continue;
// we have a feature, end this cycle
feature.setValid( true );
return true;
} // while
close();
return false;
}
示例6: ensureRelevantFields
bool QgsOgrFeatureIterator::fetchFeature( QgsFeature& feature )
{
feature.setValid( false );
if ( mClosed )
return false;
if ( !P->mRelevantFieldsForNextFeature )
ensureRelevantFields();
if ( mRequest.filterType() == QgsFeatureRequest::FilterFid )
{
OGRFeatureH fet = OGR_L_GetFeature( ogrLayer, FID_TO_NUMBER( mRequest.filterFid() ) );
if ( !fet )
{
close();
return false;
}
if ( readFeature( fet, feature ) )
OGR_F_Destroy( fet );
feature.setValid( true );
close(); // the feature has been read: we have finished here
return true;
}
OGRFeatureH fet;
while (( fet = OGR_L_GetNextFeature( ogrLayer ) ) )
{
if ( !readFeature( fet, feature ) )
continue;
// we have a feature, end this cycle
feature.setValid( true );
OGR_F_Destroy( fet );
return true;
} // while
QgsDebugMsg( "Feature is null" );
close();
return false;
}
示例7: OGR_L_GetFeature
bool QgsOgrFeatureIterator::fetchFeature( QgsFeature& feature )
{
feature.setValid( false );
if ( mClosed )
return false;
if ( mRequest.filterType() == QgsFeatureRequest::FilterFid )
{
OGRFeatureH fet = OGR_L_GetFeature( ogrLayer, FID_TO_NUMBER( mRequest.filterFid() ) );
if ( !fet )
{
close();
return false;
}
if ( readFeature( fet, feature ) )
OGR_F_Destroy( fet );
feature.setValid( true );
close(); // the feature has been read: we have finished here
return true;
}
OGRFeatureH fet;
while (( fet = OGR_L_GetNextFeature( ogrLayer ) ) )
{
if ( !readFeature( fet, feature ) )
continue;
if ( !mRequest.filterRect().isNull() && !feature.constGeometry() )
continue;
// we have a feature, end this cycle
feature.setValid( true );
OGR_F_Destroy( fet );
return true;
} // while
close();
return false;
}
示例8: QString
QgsFeatureList QgsOgrUtils::stringToFeatureList( const QString& string, const QgsFields& fields, QTextCodec* encoding )
{
QgsFeatureList features;
if ( string.isEmpty() )
return features;
QString randomFileName = QString( "/vsimem/%1" ).arg( QUuid::createUuid().toString() );
// create memory file system object from string buffer
QByteArray ba = string.toUtf8();
VSIFCloseL( VSIFileFromMemBuffer( TO8( randomFileName ), reinterpret_cast< GByte* >( ba.data() ),
static_cast< vsi_l_offset >( ba.size() ), FALSE ) );
OGRDataSourceH hDS = OGROpen( TO8( randomFileName ), false, nullptr );
if ( !hDS )
{
VSIUnlink( TO8( randomFileName ) );
return features;
}
OGRLayerH ogrLayer = OGR_DS_GetLayer( hDS, 0 );
if ( !ogrLayer )
{
OGR_DS_Destroy( hDS );
VSIUnlink( TO8( randomFileName ) );
return features;
}
OGRFeatureH oFeat;
while (( oFeat = OGR_L_GetNextFeature( ogrLayer ) ) )
{
QgsFeature feat = readOgrFeature( oFeat, fields, encoding );
if ( feat.isValid() )
features << feat;
OGR_F_Destroy( oFeat );
}
OGR_DS_Destroy( hDS );
VSIUnlink( TO8( randomFileName ) );
return features;
}
示例9: Q_ASSERT
void OgrFileImport::importLayer(MapPart* map_part, OGRLayerH layer)
{
Q_ASSERT(map_part);
auto feature_definition = OGR_L_GetLayerDefn(layer);
OGR_L_ResetReading(layer);
while (auto feature = ogr::unique_feature(OGR_L_GetNextFeature(layer)))
{
auto geometry = OGR_F_GetGeometryRef(feature.get());
if (!geometry || OGR_G_IsEmpty(geometry))
{
++empty_geometries;
continue;
}
OGR_G_FlattenTo2D(geometry);
importFeature(map_part, feature_definition, feature.get(), geometry);
}
}
示例10: QStringLiteral
QgsFeatureList QgsOgrUtils::stringToFeatureList( const QString &string, const QgsFields &fields, QTextCodec *encoding )
{
QgsFeatureList features;
if ( string.isEmpty() )
return features;
QString randomFileName = QStringLiteral( "/vsimem/%1" ).arg( QUuid::createUuid().toString() );
// create memory file system object from string buffer
QByteArray ba = string.toUtf8();
VSIFCloseL( VSIFileFromMemBuffer( randomFileName.toUtf8().constData(), reinterpret_cast< GByte * >( ba.data() ),
static_cast< vsi_l_offset >( ba.size() ), FALSE ) );
gdal::ogr_datasource_unique_ptr hDS( OGROpen( randomFileName.toUtf8().constData(), false, nullptr ) );
if ( !hDS )
{
VSIUnlink( randomFileName.toUtf8().constData() );
return features;
}
OGRLayerH ogrLayer = OGR_DS_GetLayer( hDS.get(), 0 );
if ( !ogrLayer )
{
hDS.reset();
VSIUnlink( randomFileName.toUtf8().constData() );
return features;
}
gdal::ogr_feature_unique_ptr oFeat;
while ( oFeat.reset( OGR_L_GetNextFeature( ogrLayer ) ), oFeat )
{
QgsFeature feat = readOgrFeature( oFeat.get(), fields, encoding );
if ( feat.isValid() )
features << feat;
}
hDS.reset();
VSIUnlink( randomFileName.toUtf8().constData() );
return features;
}
示例11: OGR_G_CreateGeometry
bool CUtils::insideInPolygons(OGRDataSourceH poDS, double x, double y)
{
bool res = false;
OGRGeometryH pt = OGR_G_CreateGeometry(wkbPoint);
OGR_G_AddPoint_2D(pt, x, y);
for(int iLayer = 0; iLayer < OGR_DS_GetLayerCount(poDS); iLayer++)
{
OGRLayerH poLayer = OGR_DS_GetLayer(poDS, iLayer);
if(poLayer!=NULL)
{
OGREnvelope layerBounds;
OGR_L_GetExtent(poLayer, &layerBounds, 1);
if( (layerBounds.MinX <= x) && (layerBounds.MinY <= y) &&
(layerBounds.MaxX >= x) && (layerBounds.MaxY >= y) )
{
OGR_L_ResetReading(poLayer);
if(OGR_FD_GetGeomType( OGR_L_GetLayerDefn(poLayer) ) == wkbPolygon)
{
OGRFeatureH poFeat;
while((poFeat = OGR_L_GetNextFeature(poLayer))!= NULL)
{
OGRGeometryH hGeom = OGR_F_GetGeometryRef(poFeat);
if(OGR_G_Within(pt, hGeom))
{
res = true;
break;
}
}
if(res) { OGR_L_ResetReading(poLayer); break; }
}
}
}
}
OGR_G_DestroyGeometry(pt);
return res;
}
示例12: OGR_Dr_Open
void object::test<9>()
{
// Open directory as a datasource
OGRDataSourceH ds = OGR_Dr_Open(drv_, data_tmp_ .c_str(), false);
ensure("Can't open datasource", NULL != ds);
std::string sql("select * from tpoly where prfedea = '35043413'");
OGRLayerH lyr = OGR_DS_ExecuteSQL(ds, sql.c_str(), NULL, NULL);
ensure("Can't create layer from query", NULL != lyr);
// Prepare tester collection
std::vector<std::string> list;
list.push_back("35043413");
// Test attributes
ensure_equal_attributes(lyr, "prfedea", list);
// Test geometry
const char* wkt = "POLYGON ((479750.688 4764702.000,479658.594 4764670.000,"
"479640.094 4764721.000,479735.906 4764752.000,"
"479750.688 4764702.000))";
OGRGeometryH testGeom = NULL;
OGRErr err = OGR_G_CreateFromWkt((char**) &wkt, NULL, &testGeom);
ensure_equals("Can't create geometry from WKT", OGRERR_NONE, err);
OGR_L_ResetReading(lyr);
OGRFeatureH feat = OGR_L_GetNextFeature(lyr);
ensure("Can't featch feature", NULL != feat);
ensure_equal_geometries(OGR_F_GetGeometryRef(feat), testGeom, 0.001);
OGR_F_Destroy(feat);
OGR_G_DestroyGeometry(testGeom);
OGR_DS_ReleaseResultSet(ds, lyr);
OGR_DS_Destroy(ds);
}
示例13: l_get_next_feature
/* OGRFeatureH OGR_L_GetNextFeature(OGRLayerH hLayer)
{ok, DataSource} = lgeo_ogr:open("test/polygon.shp"),
{ok, Layer} = lgeo_ogr:ds_get_layer(DataSource, 0),
{ok, Feature} = lgeo_ogr:l_get_next_feature(Layer).
*/
static ERL_NIF_TERM
l_get_next_feature(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
EnvLayer_t **layer;
ERL_NIF_TERM eterm;
if(argc != 1) {
return enif_make_badarg(env);
}
if(!enif_get_resource(env, argv[0], OGR_L_RESOURCE, (void**)&layer)) {
return enif_make_badarg(env);
}
OGRFeatureH feat = OGR_L_GetNextFeature((**layer).obj);
if(feat == NULL) {
eterm = enif_make_string(env, "No more features", ERL_NIF_LATIN1);
return enif_make_tuple2(env, enif_make_atom(env, "error"), eterm);
}
EnvFeature_t **feature = \
enif_alloc_resource(OGR_F_RESOURCE, sizeof(EnvFeature_t*));
ErlNifEnv *feature_env = enif_alloc_env();
*feature = (EnvFeature_t*) enif_alloc(sizeof(EnvFeature_t));
(**feature).env = feature_env;
(**feature).obj = feat;
// Save copy of layer so is not garbage collected
enif_make_copy(feature_env, argv[0]);
eterm = enif_make_resource(env, feature);
enif_release_resource(feature);
return enif_make_tuple2(env, enif_make_atom(env, "ok"), eterm);
}
示例14: main
//.........这里部分代码省略.........
const char *pszTmpFilename =CPLFormFilename( pszDataPath, "irs/FWA", ".dat" );
std::vector<CFWA>fwas = LoadFwas( pszTmpFilename );
int nFeatures = OGR_L_GetFeatureCount( hInputLayer, TRUE );
FILE *fout = fopen( pszOutputfile, "w" );
//CFWA *fwa;
Random random;
char pszDb[8192];
sprintf( pszDb, "%s/omffr.sqlite", pszDataPath );
IRSDataAccess *poDA = IRSDataAccess::Create( 0, pszDb );
int rc;
sqlite3 *db;
rc = sqlite3_open_v2( pszDb, &db, SQLITE_OPEN_READONLY, NULL );
rc = sqlite3_enable_load_extension( db, 1 );
rc = sqlite3_load_extension( db, "/usr/local/lib/libspatialite.so", 0, NULL );
sqlite3_stmt *stmt;
rc = sqlite3_prepare_v2( db, "SELECT * from fwa join fwa_bndry USING(fwa_gis_id) " \
"WHERE ST_Contains(fwa_bndry.geometry, MakePoint(?, ?, 4269))",
-1, &stmt, NULL );
if(rc)
{
CPLError( CE_Failure, CPLE_AppDefined, "Could not open DB");
}
GDALTermProgress( 0.0, NULL, NULL );
OGR_L_ResetReading( hInputLayer );
const char *pszFwaName;
int nDone = 0;
while( ( hInputFeature = OGR_L_GetNextFeature( hInputLayer ) ) != NULL )
{
/*
fwaid = OGR_F_GetFieldAsString( hInputFeature,
OGR_FD_GetFieldIndex( hInputFeatureDefn,
"fwa_name" ) );
abyFwa = CPLStrdup( fwaid );
LaunderFwaName( abyFwa );
fwa = FindFwa( fwas, abyFwa );
if( fwa == NULL )
{
CPLError( CE_Warning, CPLE_FileIO,
"Could not load fwa (%s)from file, missing\n", abyFwa );
continue;
}
*/
/* Get fwa by point */
hGeometry = OGR_F_GetGeometryRef( hInputFeature );
/* Try to handle non-geometry types (csv) */
if( hGeometry != NULL )
{
lat = OGR_G_GetY( hGeometry, 0 );
lon = OGR_G_GetX( hGeometry, 0 );
}
else
{
lat = OGR_F_GetFieldAsDouble( hInputFeature, OGR_FD_GetFieldIndex( hInputFeatureDefn,
"Y") );
lon = OGR_F_GetFieldAsDouble( hInputFeature, OGR_FD_GetFieldIndex( hInputFeatureDefn,
"X") );
}
std::string oFwaName = poDA->PointQuery( "fwa_bndry", "fwa_lndr_name",
示例15: RasterliteInsertSRID
static int RasterliteInsertSRID(OGRDataSourceH hDS, const char* pszWKT)
{
CPLString osSQL;
int nAuthorityCode = 0;
CPLString osAuthorityName, osProjCS, osProj4;
if (pszWKT != NULL && strlen(pszWKT) != 0)
{
OGRSpatialReferenceH hSRS = OSRNewSpatialReference(pszWKT);
if (hSRS)
{
const char* pszAuthorityName = OSRGetAuthorityName(hSRS, NULL);
if (pszAuthorityName) osAuthorityName = pszAuthorityName;
const char* pszProjCS = OSRGetAttrValue(hSRS, "PROJCS", 0);
if (pszProjCS) osProjCS = pszProjCS;
const char* pszAuthorityCode = OSRGetAuthorityCode(hSRS, NULL);
if (pszAuthorityCode) nAuthorityCode = atoi(pszAuthorityCode);
char *pszProj4 = NULL;
if( OSRExportToProj4( hSRS, &pszProj4 ) != OGRERR_NONE )
pszProj4 = CPLStrdup("");
osProj4 = pszProj4;
CPLFree(pszProj4);
}
OSRDestroySpatialReference(hSRS);
}
int nSRSId = -1;
if (nAuthorityCode != 0 && osAuthorityName.size() != 0)
{
osSQL.Printf ("SELECT srid FROM spatial_ref_sys WHERE auth_srid = %d", nAuthorityCode);
OGRLayerH hLyr = OGR_DS_ExecuteSQL(hDS, osSQL.c_str(), NULL, NULL);
if (hLyr == NULL)
{
nSRSId = nAuthorityCode;
if ( osProjCS.size() != 0 )
osSQL.Printf(
"INSERT INTO spatial_ref_sys "
"(srid, auth_name, auth_srid, ref_sys_name, proj4text) "
"VALUES (%d, '%s', '%d', '%s', '%s')",
nSRSId, osAuthorityName.c_str(),
nAuthorityCode, osProjCS.c_str(), osProj4.c_str() );
else
osSQL.Printf(
"INSERT INTO spatial_ref_sys "
"(srid, auth_name, auth_srid, proj4text) "
"VALUES (%d, '%s', '%d', '%s')",
nSRSId, osAuthorityName.c_str(),
nAuthorityCode, osProj4.c_str() );
OGR_DS_ExecuteSQL(hDS, osSQL.c_str(), NULL, NULL);
}
else
{
OGRFeatureH hFeat = OGR_L_GetNextFeature(hLyr);
if (hFeat)
{
nSRSId = OGR_F_GetFieldAsInteger(hFeat, 0);
OGR_F_Destroy(hFeat);
}
OGR_DS_ReleaseResultSet(hDS, hLyr);
}
}
return nSRSId;
}