GDAL读写shp文件
来源:互联网 发布:telnet 端口失败解决 编辑:程序博客网 时间:2024/05/18 18:14
原文网址:http://www.189works.com/article-18614-1.html
GDAL读shp文件
(1) 注册所有的文件格式驱动
1 GDALAllRegister();
2 OGRRegisterAll();
(2)得到shp文件的处理器
1 OGRSFDriver* poDriver = Registrar::GetRegistrar()->GetDriverByName("ESRI Shapefile");
(3)打开shp文件
1 OGRDataSource* poDS = poDriver->Open( "D:\\lakes.shp", NULL );
(4)获取shp图层
1 OGRLayer* poLayer = poDS->GetLayer(0);
(5)读取几何和属性值
1 OGRFeature * pFeature;
2 while ((pFeature=poLayer->GetNextFeature())!=NULL)
3 {
4 OGRGeometry* pGeometry = pFeature->GetGeometryRef();
5 if (pGeometry == NULL)
6 {
7 AfxMessageBox("Geometry get failed.");
8 return FALSE;
9 }
10
11 OGRwkbGeometryType geoType = pGeometry->getGeometryType();
12 if (wkbPoint==geoType)
13 CString strNodeID = pFeature->GetFieldAsString("NodeID");
14 else if (wkbLineString==geoType)
15 {
16 OGRLineString* pLineGeo = (OGRLineString*)pGeometry;
17 double staX = pLineGeo->getX(0);
18 double staY = pLineGeo->getY(0);
19 }
20 }
(6)资源清理
1 OGRDataSource::DestroyDataSource( poDS );
2 OGRCleanupAll();
GDAL写shp文件
(1) 注册所有的文件格式驱动
1 GDALAllRegister();
2 OGRRegisterAll();
(2)得到shp文件的处理器
1 OGRSFDriver* poDriver = Registrar::GetRegistrar()->GetDriverByName("ESRI Shapefile");
(3)创建shp文件
1 OGRDataSource* poDS = poDriver->CreateDataSource( "D:\\lakes.shp", NULL );
(4)创建图层
OGRLayer* poLayer= poDS->CreateLayer( "tbLine", NULL, wkbLineString, NULL );
(5)创建字段
1 // 字符串
2 OGRFieldDefn oField1("GeoObjNum",OFTString);
3 oField1.SetWidth(8);
4 if( poLayer->CreateField( &oField1 ) != OGRERR_NONE ){
5 AfxMessageBox( "Creating Name field failed.\n" );return FALSE;}
6
7 // 浮点数
8 OGRFieldDefn oField2("LBTG",OFTReal);
9 oField2.SetPrecision(3);
10 if( poLayer->CreateField( &oField2 ) != OGRERR_NONE ){
11 AfxMessageBox( "Creating Name field failed.\n" );return FALSE;}
12
13 // 整型
14 OGRFieldDefn oField3("Number",OFTInteger);
15 if( poLayer->CreateField( &oField3 ) != OGRERR_NONE ){
16 AfxMessageBox( "Creating Name field failed.\n" );return FALSE;}
(6)创建几何和Feature
1 GRFeature *poFeature;
2 poFeature = new OGRFeature( poLayer->GetLayerDefn() );
3
4 poFeature->SetField( "GeoObjNum", strGeoObjNum );
5 poFeature->SetField( "LBTG", fLBTG );
6 poFeature->SetField( "Number", number );
7
8 OGRLineString *poLine = new OGRLineString();
9
10 poLine->setNumPoints(2);
11 poLine->setPoint(0,startX,startY, 0.0);
12 poLine->setPoint(1,endX,endY, 0.0);
13
14 poFeature->SetGeometryDirectly( poLine );
15 if( poLayer->CreateFeature( poFeature ) != OGRERR_NONE )
16 {
17 AfxMessageBox("Failed to create feature in shapefile.");
18 return FALSE;
19 }
(7)资源清理
1 OGRDataSource::DestroyDataSource( poDS );
2 OGRCleanupAll();
(1) 注册所有的文件格式驱动
1 GDALAllRegister();
2 OGRRegisterAll();
(2)得到shp文件的处理器
1 OGRSFDriver* poDriver = Registrar::GetRegistrar()->GetDriverByName("ESRI Shapefile");
(3)打开shp文件
1 OGRDataSource* poDS = poDriver->Open( "D:\\lakes.shp", NULL );
(4)获取shp图层
1 OGRLayer* poLayer = poDS->GetLayer(0);
(5)读取几何和属性值
1 OGRFeature * pFeature;
2 while ((pFeature=poLayer->GetNextFeature())!=NULL)
3 {
4 OGRGeometry* pGeometry = pFeature->GetGeometryRef();
5 if (pGeometry == NULL)
6 {
7 AfxMessageBox("Geometry get failed.");
8 return FALSE;
9 }
10
11 OGRwkbGeometryType geoType = pGeometry->getGeometryType();
12 if (wkbPoint==geoType)
13 CString strNodeID = pFeature->GetFieldAsString("NodeID");
14 else if (wkbLineString==geoType)
15 {
16 OGRLineString* pLineGeo = (OGRLineString*)pGeometry;
17 double staX = pLineGeo->getX(0);
18 double staY = pLineGeo->getY(0);
19 }
20 }
(6)资源清理
1 OGRDataSource::DestroyDataSource( poDS );
2 OGRCleanupAll();
GDAL写shp文件
(1) 注册所有的文件格式驱动
1 GDALAllRegister();
2 OGRRegisterAll();
(2)得到shp文件的处理器
1 OGRSFDriver* poDriver = Registrar::GetRegistrar()->GetDriverByName("ESRI Shapefile");
(3)创建shp文件
1 OGRDataSource* poDS = poDriver->CreateDataSource( "D:\\lakes.shp", NULL );
(4)创建图层
OGRLayer* poLayer= poDS->CreateLayer( "tbLine", NULL, wkbLineString, NULL );
(5)创建字段
1 // 字符串
2 OGRFieldDefn oField1("GeoObjNum",OFTString);
3 oField1.SetWidth(8);
4 if( poLayer->CreateField( &oField1 ) != OGRERR_NONE ){
5 AfxMessageBox( "Creating Name field failed.\n" );return FALSE;}
6
7 // 浮点数
8 OGRFieldDefn oField2("LBTG",OFTReal);
9 oField2.SetPrecision(3);
10 if( poLayer->CreateField( &oField2 ) != OGRERR_NONE ){
11 AfxMessageBox( "Creating Name field failed.\n" );return FALSE;}
12
13 // 整型
14 OGRFieldDefn oField3("Number",OFTInteger);
15 if( poLayer->CreateField( &oField3 ) != OGRERR_NONE ){
16 AfxMessageBox( "Creating Name field failed.\n" );return FALSE;}
(6)创建几何和Feature
1 GRFeature *poFeature;
2 poFeature = new OGRFeature( poLayer->GetLayerDefn() );
3
4 poFeature->SetField( "GeoObjNum", strGeoObjNum );
5 poFeature->SetField( "LBTG", fLBTG );
6 poFeature->SetField( "Number", number );
7
8 OGRLineString *poLine = new OGRLineString();
9
10 poLine->setNumPoints(2);
11 poLine->setPoint(0,startX,startY, 0.0);
12 poLine->setPoint(1,endX,endY, 0.0);
13
14 poFeature->SetGeometryDirectly( poLine );
15 if( poLayer->CreateFeature( poFeature ) != OGRERR_NONE )
16 {
17 AfxMessageBox("Failed to create feature in shapefile.");
18 return FALSE;
19 }
(7)资源清理
1 OGRDataSource::DestroyDataSource( poDS );
2 OGRCleanupAll();
- GDAL读写shp文件
- GDAL矢量(.shp)文件读写与创建
- C# Gdal 读取SHP文件
- node-gdal实践-读写shp数据
- C#、C++用GDAL读shp文件
- GDAL-OGR对shp文件的操作
- node-gdal实践-创建shp文件
- C#中Gdal读取SHP文件
- C#中Gdal读取SHP文件
- C#、C++用GDAL读shp文件
- GDAL读取shp文件VS2015+GDAL2.1
- 读取XML中的信息GDAL生成shp文件
- Android Arcgis(13)、Gdal简单写个shp文件
- 【GDAL/OGR】利用GDAL/OGR读取shp文件并转换为json文件(Java版)
- 请教如何读写shp字体文件
- GDAL读写矢量文件——Java
- GDAL读写矢量文件——C#
- GDAL读写矢量文件——Python
- Android OpenCV实现图片叠加,水印
- huffman 编码
- MAC and HMAC
- java运算符
- mrunit测试
- GDAL读写shp文件
- Android 4.3正式发布:四大新功能一览
- Webx源码研读心得
- http://www.blogjava.net/aoxj/archive/2009/09/22/295997.html
- CMAKE的使用
- ASIHTTPRequest系列(一):同步和异步请求
- USACO 1.1.4 Broken Necklace
- Codeforces 218B Airport
- 2013多校联合1部分题解(更新中)