//#include "gdal_priv.h"
//#include "ogrsf_frmts.h"
#include "ogr_feature.h"
#include "ogr_geometry.h"
#include "gdal_priv.h"
#include "ogrsf_frmts.h"
int main()
{
//GDALALLRegister();
//const char* filepath="jdbc:oracle:thin:@127.0.0.1:1521:HeSD";
//const char* drivename ="oracle.jdbc.driver.OracleDriver";
//GDALDataset *poDS;
//OGRDataSource *poDS = NULL;
//poDS = OGRSFDriverRegistrar::Open(inFileName, FALSE );
/*if( poDS == NULL )
{
MessageBox( _T("转换文件失败!"),_T("提示") );
exit(1);
}*/
//OGRRegisterALL();
//GDALALLRegister();
//OGRRegisterAll();
//const char* filepath ="OCI:dbname=test host=127.0.0.1 port=1521 user=Test password=1";
//const char* filepath2 ="OCI: system/123 @mytest";
//const char* drivename = "OCI";
//const char* ptablename = "Table1";
//GDALDriver* pdriver = NULL;
//OGRSFDriver* pdriver1 = NULL;
//OGRLayer* player = NULL;
//OGRDataSource* pDS =NULL;
//pdriver = OGRSFDriverRegistrar::GetRegistrar()->GetDriverByName(drivename);
/*if(pdriver == NULL)
{
printf("failed");
}
*/
//pDS=pdriver1->Open(filepath,0);
//poDS->ExecuteSQL()
//poDS->ExecuteSQL("SELECT ")
//pDS = pdriver->Open(filepath,0);
//OGRRegisterALL();
//GDALALLRegister();
/*GetGDALDriverManager()->AutoLoadDrivers();
GDALDataset *poDS;
poDS=(GDALDataset*) GDALOpenEx("F:\\Desktop\Test.txt",GDAL_OF_VECTOR,NULL,NULL,NULL);
if(poDS == NULL)
{
printf("Open failed\n");
}*/
//OGRDataSource *poDS;
//poDS = OGRSFDriverRegistrar::OpenWithDriverArg(,"F:\Desktop\A.dbf");
//poDSOut = poDriverOut->Create("OCI: Test/1 @HeSD:Table1",NULL);
//poDSOut = poDriverOut->CreateDataSource(outFileName, NULL );
int m_all_fea_count=0;//总的要素个数
int m_fea_done_count=0;//已处理的要素个数
int m_fea_null_count=0;//空要素的个数
int m_geo_null_count=0;//空类型个数
int m_fea_fail_count=0;//创建失败要素个数
int m_fea_create_count=0;//创建成功要素个数
int m_geo_done=0;//已处理的非空geometry个数
int m_geo_point_count=0;//点类型个数
int m_geo_ori_error_count=0;//原始geometry错误
int m_geo_line_count=0;//线类型个数
int m_geo_multi_point_count=0;//多点类型个数
int m_geo_multi_line_count=0;//多线类型个数
int m_geo_polygon_count=0;//面类型个数
int m_error_count=0;//错误数量
int m_geo_multi_polygon_count=0;//多面类型个数
GDALAllRegister();//注册驱动
CPLSetConfigOption("GDAL_FILENAME_IS_UTF8","NO");//必须设置中文路径
const char* filepath_oracle ="OCI: system/123 @mytest";//OCI: 用户名/密码 @SID
const char* filepath_shp ="E:\\桌面\\例子\\Chinadata\\Lambert\\中国湖泊.shp";
GDALDataset *poDS_oracle;
GDALDataset *poDS_shp;
poDS_oracle = (GDALDataset*) GDALOpenEx(filepath_oracle,GDAL_OF_VECTOR,NULL,NULL,NULL);
poDS_shp = (GDALDataset*) GDALOpenEx(filepath_shp,GDAL_OF_VECTOR,NULL,NULL,NULL);
if(poDS_shp==NULL)
{
printf("Open SHP failed");
}
if(poDS_oracle==NULL)
{
printf("Open Oracle failed");
}
/////////////获取shp文件图层名字
OGRLayer* player =NULL;
/*player = poDS_shp->GetLayer(0);
if(player==NULL)
{
printf("failed");
}
const char* a=player->GetName();
printf(a);
*/
int lyrCount=poDS_shp->GetLayerCount();//获得shp文件图层数量
OGRLayer* tempLayer;//临时图层 用来存取获得的shp图层 来统计总的要素个数。
for (int i=0;i<lyrCount;i++)
{
tempLayer=poDS_shp->GetLayer(i);//输出shape文件获取输入文件图层(空的)
unsigned int _fea_count=tempLayer->GetFeatureCount();//获取Feature数量
m_all_fea_count+=_fea_count;
}
//////////遍历shp文件
OGRLayer *poLayer;
for(int i=0;i<lyrCount;i++)
{
poLayer=poDS_shp->GetLayer(i);
//获得图层坐标
OGREnvelope extent;
poLayer->GetExtent(&extent);
OGRLayer *poLayerOut;
OGRFeatureDefn * poFeaDef=poLayer->GetLayerDefn();
//获取图层名称
const char* szlyrname=poFeaDef->GetName();
const char* res_lyrname;
res_lyrname=szlyrname;
//获取几何类型
OGRwkbGeometryType type=poLayer->GetLayerDefn()->GetGeomType();
//输入数据进输出的图层
poLayerOut=poDS_oracle->CreateLayer("hb",NULL,type);
//创建shape输出图层字段
int _field_count= poFeaDef->GetFieldCount(); //获得每行字段总数 不包含前两个字段(FID、shaape类型)
for (int i=0;i<_field_count;i++)
{
OGRFieldDefn *poField=poFeaDef->GetFieldDefn(i);
//创建shape输出图层字段
poLayerOut->CreateField(poField);
}
if(poLayerOut == NULL)
{
exit(1);
}
OGRFeature *poFeature;
//OGRFeature *poFeatureOut;
unsigned int _this_fea_count=poLayer->GetFeatureCount();
poLayer->ResetReading();
/////////遍历所有字段
for (unsigned long i=0;i<_this_fea_count;i++)
{
m_fea_done_count++;
poFeature = poLayer->GetNextFeature();
if (poFeature ==NULL)
{
m_fea_null_count++;
continue;
}
int fea_FID=poFeature->GetFID();
OGRGeometry *poGeometry=NULL;//几何拓扑关系
OGRLineString *poLine=NULL;
OGRPoint *poPoint=NULL;
OGRMultiPoint *poMultiPoint=NULL;
OGRMultiLineString *poMultiLineString=NULL;
OGRPolygon *poPolygon=NULL;
OGRMultiPolygon *poMultiPolygon=NULL;
poGeometry = poFeature->GetGeometryRef();//获取几何拓扑关系
//each geometry trans its coordinate
if(poGeometry == NULL)
{
m_geo_null_count++;
OGRErr _error =poLayerOut->CreateFeature( poFeature ) ;
if( _error!= OGRERR_NONE )
{
//LOGSTR( "error:Failed to create feature in shapefile." );
//return S_FALSE;
m_fea_fail_count++;
}
m_fea_create_count++;
OGRFeature::DestroyFeature( poFeature );
continue;
}
OGRwkbGeometryType type=poGeometry->getGeometryType();//获取几何类型
double _oldX;
double _oldY;
double _oldZ;
// double _oldX;
// double _oldY;
// double _oldZ;
int _pt_count=0;
int _ex_count;
OGRLinearRing* _ex_ring=NULL;
int _in_ring_count=0;
int _geo_count=0;
m_geo_done++;
//判别shape
switch (type)
{
//点
case wkbPoint:
case wkbPoint25D:
m_geo_point_count++;
poPoint=(OGRPoint*)poGeometry;
_oldX=poPoint->getX();//经度或东方向
_oldY=poPoint->getY();//纬度或北方向
_oldZ=poPoint->getZ();
if(_oldX>extent.MaxX||_oldX<extent.MinX||_oldY>extent.MaxY||_oldY<extent.MinY)
{
m_geo_ori_error_count++;
char *geo_Ori_Error=(char*)malloc(100);
int fea_FID=poFeature->GetFID();
itoa(fea_FID,geo_Ori_Error,10);
}
//_coordtransf( fea_FID , 1,&_oldX,&_oldY,&_oldZ,&_oldX,&_oldY,&_oldZ);
//TransLate(_oldX,_oldY,_oldZ,_oldX,_oldY,_oldZ);
if(poPoint->getDimension()==0)
{
poPoint->setX(_oldX);
poPoint->setY(_oldY);
}
else if(poPoint->getDimension()==1)
{
poPoint->setX(_oldX);
poPoint->setY(_oldY);
poPoint->setZ(_oldZ);
}
break;
//线
case wkbLineString:
case wkbLineString25D:
m_geo_line_count++;
poLine=(OGRLineString *) poGeometry;
_pt_count=poLine->getNumPoints();
for (int i=0;i<_pt_count;i++)
{
_oldX=poLine->getX(i);//经度或东方向
_oldY=poLine->getY(i);//纬度或北方向
_oldZ=poLine->getZ(i);
if(_oldX>extent.MaxX||_oldX<extent.MinX||_oldY>extent.MaxY||_oldY<extent.MinY)
{
m_geo_ori_error_count++;
char *geo_Ori_Error=(char*)malloc(100);
int fea_FID=poFeature->GetFID();
itoa(fea_FID,geo_Ori_Error,10);
}
//_coordtransf( fea_FID , 1,&_oldX,&_oldY,&_oldZ,&_oldX,&_oldY,&_oldZ);
//TransLate(_oldX,_oldY,_oldZ,_oldX,_oldY,_oldZ);
if (poLine->getDimension()==0)
{
poLine->setPoint(i,_oldX,_oldY);
}
else if(poLine->getDimension()==1)
{
poLine->setPoint(i,_oldX,_oldY);
}
else if(poLine->getDimension()==2)
{
poLine->setPoint(i,_oldX,_oldY,_oldZ);
}
}
//_coordtransf(_pt_count,ori_x,ori_y,ori_z,Newx,New
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
运用GDAL导入SHP数据到数据库示例.rar (34个子文件)
GDALTest
GDALTest.suo 15KB
GDALTest.sln 1KB
x64
Debug
GDALTest.lib 185KB
gdal201.dll 11.58MB
GDALTest.exp 112KB
GDALTest.ilk 1.26MB
GDALTest.pdb 1.35MB
GDALTest.exe 267KB
ipch
gdaltest-56b82090
gdaltest-7149b5c2.ipch 26.94MB
GDALTest.sdf 11.89MB
GDALTest
GDALTest.aps 17KB
x64
Debug
vc100.idb 347KB
Test.obj 1.3MB
rc.write.1.tlog 2B
GDALTest.lastbuildstate 64B
GDALTest.exe.intermediate.manifest 381B
GDALTest.res 32B
rc.read.1.tlog 2B
cl.read.1.tlog 2B
cl.write.1.tlog 234B
cl.command.1.tlog 602B
link.command.1.tlog 1KB
rc.command.1.tlog 436B
GDALTest.vcxprojResolveAssemblyReference.cache 713B
GDALTest.write.1.tlog 4KB
GDALTest.Build.CppClean.log 1KB
GDALTest.log 5KB
vc100.pdb 428KB
resource.h 387B
GDALTest.vcxproj 6KB
Test.cpp 16KB
GDALTest.rc 2KB
GDALTest.vcxproj.filters 1KB
GDALTest.vcxproj.user 385B
共 34 条
- 1
资源评论
为何为肖
- 粉丝: 16
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功