提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
gdal访问标准OGC的WFS服务获取数据的访问方式
提示:以下是本篇文章正文内容,下面案例可供参考
使用步骤
#include "gdal.h"
#include "gdal_priv.h"
#include "ogrsf_frmts.h"
#include "ogr_feature.h"
#include "ogr_core.h"
#pragma comment(lib,"gdal.lib")
CPLSetConfigOption("SHAPE_ENCODING",0);
CPLSetConfigOption("GDAL_DATA","../data");
CPLSetConfigOption("GML_PARSER","XERCES");
CPLSetConfigOption("GML_PARSER","EXPAT");
CPLSetConfigOption("GML_FIELDTYPES","ALWAYS_STRING");
GDALAllRegister();
char* surl = "http://127.0.0.1:8080/geoserver/resafety/wfs";
surl = "http://127.0.0.1:8080/geoserver/resafety/wfs?service=WFS&version=1.0.0&request=GetFeature&typeName=resafety:POI";
GDALDataset* poDS = static_cast<GDALDataset*>(GDALOpenEx(surl,GDAL_OF_VECTOR, NULL, NULL, NULL));
if(NULL == poDS)
{
const char* s_error = CPLGetLastErrorMsg();
printf(s_error);
}
int n_layer = poDS->GetLayerCount();
OGRLayer* pLayer = NULL;
OGRFeatureDefn* pDef = NULL;
OGRFeature* pFeature = NULL;
for(int i = 0; i < n_layer; i++)
{
pLayer = poDS->GetLayer(i);
if(pLayer == NULL)
continue;
pDef = pLayer->GetLayerDefn();
if(pDef == NULL)
continue;
pLayer->ResetReading();
while((pFeature = pLayer->GetNextFeature()) != NULL)
{
int f_id = pFeature->GetFID();
printf("%d\n",f_id);
for(int def = 0; def != pDef->GetFieldCount(); def++)
{
OGRFieldDefn* pfielddef = pDef->GetFieldDefn(def);
const char* s_name = pfielddef->GetNameRef();
switch(pfielddef->GetType())
{
case OFTInteger:
{
int value = pFeature->GetFieldAsInteger(def);
printf("%d\n",value);
}
case OFTInteger64:
{
unsigned int value = pFeature->GetFieldAsInteger64(def);
printf("%ud\n",value);
}
case OFTString:
{
const char* value = pFeature->GetFieldAsString(def);
printf("%s\n",value);
}
}
}
OGRFeature::DestroyFeature(pFeature);
}
}
GDALClose(poDS);
总结
以上代码仅是对于gdal读取wfs服务数据的示例