GDAL读取shp文件VS2015+GDAL2.1
来源:互联网 发布:金工网络课程 编辑:程序博客网 时间:2024/06/02 09:35
因为项目需要,我们想从SHP文件中,读取给定的某个区域内的所有建筑物信息。
本来想用QGIS来实现,但是很不巧,我们的一个服务器和我的工作电脑先后驾崩,没有QGIS的环境了。
所以我想用别的办法解决,然后想到了GDAL开源库,前面我已经写了一篇关于GDAL的编译方法了,再在正好派上用场。
一、编译GDAL
编译方法我就不说了,请查看我的博客。
http://blog.csdn.net/octdream/article/details/71106474
二、GDAL环境配置
我使用的是VS2015开发环境
1.配置附加包含目录
右击项目->属性->配置属性->C/C++->常规->附加包含目录
2.配置附加库目录
右击项目->属性->配置属性->链接器->常规->附加库目录
3.添加附加依赖项
右击项目->属性->配置属性->链接器->输入->附加依赖项
三、使用GDAL读取shp文件数据
在网上找了很多种版本,但是有的编译通不过,要不就是打开文件出错,后面总结出方法,不多说了直接上代码:
#include "ogrsf_frmts.h"#include <iostream>#include <list>using namespace std;int main(){GDALAllRegister();//OGRRegisterAll();GDALDataset *poDS;//poDS = (GDALDataset*)GDALOpenEx("E:\\Qt\\maps\\cs_map\\school_point.shp", GDAL_OF_VECTOR, NULL, NULL, NULL);poDS = (GDALDataset*)GDALOpenEx("E:\\Qt\\maps\\bj_map\\Building_surface.shp", GDAL_OF_VECTOR, NULL, NULL, NULL);if (poDS == NULL){printf("Open failed.\n");exit(1);}OGRLayer *poLayer;poLayer = poDS->GetLayerByName("Building_surface");OGRFeature *poFeature;poLayer->ResetReading();while ((poFeature = poLayer->GetNextFeature()) != NULL){OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();int iField;int i = poFDefn->GetFieldCount(); //获得字段的数目,本实例返回5,不包括前两个字段(FID,Shape),这两个字段在arcgis里也不能被修改;for (iField = 0; iField < poFDefn->GetFieldCount(); iField++){OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn(iField);//根据字段值得类型,选择对应的输出if (poFieldDefn->GetType() == OFTInteger)printf("%d,", poFeature->GetFieldAsInteger(iField));else if (poFieldDefn->GetType() == OFTReal)printf("%.3f,", poFeature->GetFieldAsDouble(iField));else if (poFieldDefn->GetType() == OFTString)printf("%s,", poFeature->GetFieldAsString(iField));elseprintf("%s,", poFeature->GetFieldAsString(iField));}OGRGeometry *poGeometry;poGeometry = poFeature->GetGeometryRef();if (poGeometry != NULL){OGRwkbGeometryType pGeoType = poGeometry->getGeometryType();if (pGeoType == wkbPoint){OGRPoint *poPoint = (OGRPoint *)poGeometry;printf("%.3f,%.3f\n", poPoint->getX(), poPoint->getY());}else if (pGeoType == wkbPolygon){OGRPolygon *pPolygon = (OGRPolygon*)poGeometry->clone();OGRLinearRing * poLR = pPolygon->getExteriorRing();//int Num = poLR->getNumPoints()}else if (pGeoType == wkbMultiPolygon) //这里就是带空洞多边形判断{OGRMultiPolygon *pMulPolygon = (OGRMultiPolygon*)poGeometry;OGRPolygon *pPolygon = NULL;for (int i = 0; i < pMulPolygon->getNumGeometries(); i++){pPolygon = (OGRPolygon*)pMulPolygon->getGeometryRef(i);}}else{printf("no point geometry\n");}}OGRFeature::DestroyFeature(poFeature);}//system("pause");getchar(); return 0;}
只上了大概的代码,后面的功能大学自己拓展吧!
阅读全文
0 0
- GDAL读取shp文件VS2015+GDAL2.1
- GDAL2.x读取shp文件
- C# Gdal 读取SHP文件
- C#中Gdal读取SHP文件
- C#中Gdal读取SHP文件
- GDAL读写shp文件
- 读取XML中的信息GDAL生成shp文件
- 【GDAL/OGR】利用GDAL/OGR读取shp文件并转换为json文件(Java版)
- C#、C++用GDAL读shp文件
- GDAL-OGR对shp文件的操作
- node-gdal实践-创建shp文件
- C#、C++用GDAL读shp文件
- GDAL矢量(.shp)文件读写与创建
- shp文件的读取
- shp文件的读取
- Gdal读取矢量文件
- GDAL C#读取shp中文属性值乱码问题
- C++底层读取Shp文件
- HTML中的<UL>标签中li横向排列
- 深度解析mysql优化手段,轻松解决千万级数据量操作
- ijkplayer视频播放器源码分析
- 【java泛型】类型变量和通配符
- linux-文件内容查阅、选取
- GDAL读取shp文件VS2015+GDAL2.1
- 上拉电阻与下拉电阻的作用和区别
- QtCreator介绍
- 纯js制作图片轮播效果
- StartIo历程_IRP串行执行_自定义_处理3个请求
- Qt之自定义提示框(类似QMessageBox)
- WebDriver开启firefox时带用户配置
- 我的第一个HBulider项目
- Mac上使用命令行安装brew,并通过brew安装Ant等工具