void CShapefileLayer::OpenShapefile(const std::string& filename) { m_FileName_ = filename; OGRRegisterAll(); std::string pszDriverName = "ESRI Shapefile"; //CPLSetConfigOption("SHAPE_ENCODING", ""); //支持中文 OGRSFDriver* poDriver = OGRSFDriverRegistrar::GetRegistrar()->GetDriverByName(pszDriverName.c_str()); m_pDataSource_ = poDriver->Open(m_FileName_.c_str(), false); //打开shapefile文件,获取数据源 if(m_pDataSource_ == NULL) { m_bExistFile_ = false; return; } m_pLayer_ = m_pDataSource_->GetLayer(0); //获取shapefile第0层 if(m_pLayer_ == NULL) { m_bExistFile_ = false; return ; } int theFeatureCount = m_pLayer_->GetFeatureCount(); //层里面的数据数量 OGRFeature *poFeature = NULL; //读取的数据指针 m_pLayer_->ResetReading(); //重新读取 m_ShapefileType_ = m_pLayer_->GetLayerDefn()->GetGeomType(); //类型 m_bExistFile_ = true; }
JNIEXPORT jlong JNICALL Java_es_gva_cit_jogr_OGRSFDriver_openNat (JNIEnv *env, jobject obj, jlong cPtr, jstring pszName, jboolean bUpdate){ OGRSFDriver *drv = (OGRSFDriver *) 0 ; OGRDataSource *ds; long ptr_ds; drv = *(OGRSFDriver **)&cPtr; const char *name = env->GetStringUTFChars( pszName, 0); if(bUpdate==true) ds=drv->Open(name,1); else ds=drv->Open(name,0); env->ReleaseStringUTFChars( pszName, name); if(ds==NULL)return -1; ptr_ds = (long)&(*ds); return (jlong)ptr_ds; }