void cvct2gdal::CVCT2GDALLayer( VCTLayer * poVCTLayer, OGRLayer * poOGRLayer ) { OGRFeatureDefn * poOGRFeatDefn = cvct2gdal::CVCT2GDALFeatureDefn ( & (poVCTLayer->featuredefn ) ); for ( int ifield = 0; ifield < poOGRFeatDefn->GetFieldCount(); ++ifield ) { poOGRLayer->CreateField ( poOGRFeatDefn->GetFieldDefn ( ifield ) ); } for (auto ifeat = 0; ifeat != poVCTLayer->GetFeatureCount(); ++ifeat) { VCTFeature * poVCTFeat = poVCTLayer->GetFeatureByIndex(ifeat); //注意:feature在析构时,会将featuredefn也析构 //将featuredefn复制后传入 OGRFeature * poOGRFeat = cvct2gdal::CVCT2GDALFeature ( poVCTFeat, poOGRFeatDefn->Clone()); poOGRLayer->CreateFeature ( poOGRFeat ); //在window下,释放内存会报错 #ifndef WIN32 OGRFeature::DestroyFeature(poOGRFeat); #endif } //在window下,释放内存会报错 #ifndef WIN32 poOGRFeatDefn->Release(); #endif }
JNIEXPORT jlong JNICALL Java_es_gva_cit_jogr_OGRFeatureDefn_cloneFeatureDefnNat (JNIEnv *env, jobject obj, jlong cPtr){ OGRFeatureDefn *fd = (OGRFeatureDefn *) 0 ; OGRFeatureDefn *return_fd; long ptr_fd=-1; fd = *(OGRFeatureDefn **)&cPtr; if(fd!=NULL){ return_fd = fd->Clone(); if(return_fd!=NULL) ptr_fd = (long)&(*return_fd); } return (jlong)ptr_fd; }
OGRFeatureDefn *OGRLayerWithTransaction::GetLayerDefn() { if( !m_poDecoratedLayer ) { if( m_poFeatureDefn == NULL ) { m_poFeatureDefn = new OGRFeatureDefn(GetDescription()); m_poFeatureDefn->Reference(); } return m_poFeatureDefn; } else if( m_poFeatureDefn == NULL ) { OGRFeatureDefn* poSrcFeatureDefn = m_poDecoratedLayer->GetLayerDefn(); m_poFeatureDefn = poSrcFeatureDefn->Clone(); m_poFeatureDefn->Reference(); } return m_poFeatureDefn; }