GDAL线面互转换
来源:互联网 发布:淘宝买衣服不撞衫 编辑:程序博客网 时间:2024/05/17 02:42
最近因为项目需要,需做GDAL线面互转的功能,查阅部分资料完成,下面把核心部分的代码贴出来,留个记录,也欢迎大家提问题指正完善。
/** @brief ConvertPolygonToPolyline 转换面为线* @param[in] OGRGeometry* polygon 要转换的面* @return OGRGeometry* 转换成功后的线* @author * @date * @note 2015年11月04日 梁军龙创建;*/OGRGeometry* FeatureLayerOperator::ConvertPolygonToPolyline(OGRGeometry* polygon){// 线生成OGRwkbGeometryType sourceGeometryType=polygon->getGeometryType();sourceGeometryType=wkbFlatten(sourceGeometryType);OGRwkbGeometryType targetGeometryType;switch(sourceGeometryType){case OGRwkbGeometryType::wkbPolygon:{OGRPolygon* pOGRPolygon=(OGRPolygon*) polygon;int innerCount=pOGRPolygon->getNumInteriorRings();if(innerCount==0){targetGeometryType = OGRwkbGeometryType::wkbLineString;OGRLineString* pOGRLineString=(OGRLineString*)OGRGeometryFactory::createGeometry(targetGeometryType);OGRLinearRing* pOGRLinearRing = pOGRPolygon->getExteriorRing();int pointCount=pOGRLinearRing->getNumPoints();double x=0; double y=0;for(int i=0;igetX(i);y=pOGRLinearRing->getY(i);pOGRLineString->addPoint(x,y);}return pOGRLineString;}else{targetGeometryType = OGRwkbGeometryType::wkbMultiLineString;OGRMultiLineString* pOGRMultiLineString=(OGRMultiLineString*)OGRGeometryFactory::createGeometry(targetGeometryType);// 添加外环OGRLineString ogrLineString;OGRLinearRing* pOGRLinearRing = pOGRPolygon->getExteriorRing();int pointCount=pOGRLinearRing->getNumPoints();double x=0; double y=0;for(int i=0;igetX(i);y=pOGRLinearRing->getY(i);ogrLineString.addPoint(x,y);}pOGRMultiLineString->addGeometry(&ogrLineString);for(int i=0;igetInteriorRing(i);int pointCount=pOGRLinearRing0->getNumPoints();double x=0; double y=0;for(int i=0;igetX(i);y=pOGRLinearRing0->getY(i);ogrLineString0.addPoint(x,y);}pOGRMultiLineString->addGeometry(&ogrLineString0);}return pOGRMultiLineString;}}case OGRwkbGeometryType::wkbMultiPolygon:{targetGeometryType = OGRwkbGeometryType::wkbMultiLineString;OGRMultiLineString* pOGRMultiLineString=(OGRMultiLineString*)OGRGeometryFactory::createGeometry(targetGeometryType);OGRGeometryCollection* pOGRPolygons=(OGRGeometryCollection*) polygon;int geometryCount=pOGRPolygons->getNumGeometries();for(int i=0;igetGeometryRef(i));pOGRMultiLineString->addGeometry(pOGRGeo);}return pOGRMultiLineString;}default:return NULL;}return NULL;}/** @brief ConvertPolylineToPolygon 转换线为面* @param[in] OGRGeometry* polygon 要转换的面* @return OGRGeometry* 转换成功后的线* @author * @date * @note 2015年11月04日 梁军龙创建;*/OGRGeometry* FeatureLayerOperator::ConvertPolylineToPolygon(OGRGeometry* polyline){// 线生成OGRwkbGeometryType sourceGeometryType=polyline->getGeometryType();sourceGeometryType=wkbFlatten(sourceGeometryType);OGRwkbGeometryType targetGeometryType;switch(sourceGeometryType){case OGRwkbGeometryType::wkbLineString:{OGRLineString* pOGRLineString=(OGRLineString*) polyline;targetGeometryType = OGRwkbGeometryType::wkbPolygon;OGRPolygon* pOGRPolygon=(OGRPolygon*)OGRGeometryFactory::createGeometry(targetGeometryType);OGRLinearRing pOGRLinearRing;int pointCount=pOGRLineString->getNumPoints();double x=0; double y=0;for(int i=0;igetX(i);y=pOGRLineString->getY(i);pOGRLinearRing.addPoint(x,y);}pOGRLinearRing.closeRings();pOGRPolygon->addRing(&pOGRLinearRing);return pOGRPolygon;}case OGRwkbGeometryType::wkbMultiLineString:{targetGeometryType = OGRwkbGeometryType::wkbMultiPolygon;OGRMultiPolygon* pOGRMultiPolygon=(OGRMultiPolygon*)OGRGeometryFactory::createGeometry(targetGeometryType);OGRGeometryCollection* pOGRPolylines=(OGRGeometryCollection*)polyline;int geometryCount=pOGRPolylines->getNumGeometries();for(int i=0;igetGeometryRef(i));pOGRMultiPolygon->addGeometry(pOGRGeo);}return pOGRMultiPolygon;}default:return NULL;}return NULL;}
- GDAL线面互转换
- GDAL影像投影转换
- GDAL坐标转换
- GDAL的点投影转换
- GDAL---空间数据转换程序库
- GDAL坐标转换六参的使用方法
- GDAL坐标转换六参的使用方法 .
- GDAL创建坐标系与坐标转换
- 使用GDAL进行RPC坐标转换
- 【GDAL/OGR】利用GDAL/OGR读取shp文件并转换为json文件(Java版)
- 破玩意(一)利用GDAL实现图像格式转换
- c#下使用GDAL将dem转换为灰度图
- 使用GDAL对遥感影像进行投影转换
- 破玩意(一)利用GDAL实现图像格式转换
- 使用GDAL下载并转换SRTM的DEM数据
- gdal将shp数据转换为geojson数据
- 运用GDAL/OGR进行GIS矢量格式转换
- Python空间数据处理2: GDAL栅格图像格式转换
- hadoop安装之-hive
- 【总结】10月训练赛第2场(巴蜀)
- lua工具库penlight(转)
- 修复CocoaPods更新错误
- C++必读书籍推荐
- GDAL线面互转换
- 写给未来的你——余光中
- JAVA正则表达式过滤出中文、字母、数字
- @RequestMapping 用法详解之地址映射
- 枚举类相关知识
- 为什么选择 Java 8 ?
- 为什么文件路径 Program Files 可以写成 Progra~1
- 在spring mvc中解析输入为json格式的数据有两种方式
- 堆排序