Gdal库计算形心方法。

在Gdal库中计算形心的方法如下:

int OGRGeometry::Centroid( OGRPoint *poPoint ) const

其函数实现中,是调用的Geos库中的GEOSGetCentroid()方法,最终在Geos的bool

Geometry::getCentroid(Coordinate& ret) const函数中创建了CentroidArea对象,并将几何对象添加进去,获取到其形心。代码如下:

CentroidArea cent;

cent.add(this);

if ( ! cent.getCentroid(c) )

return false;

可见,关键就是这个类CentroidArea。

返回的形心坐标结果:

ret = Coordinate(cg3.x/3.0/areasum2, cg3.y/3.0/areasum2);

计算流程:

此类的方法add添加几何对象,最终会执行如下步骤(略去内环考虑):

void

CentroidArea::addShell(const CoordinateSequence *pts)

{

bool isPositiveArea=!CGAlgorithms::isCCW(pts);

std::size_t const n=pts->getSize()-1;

for(std::size_t i=0; i<n; ++i)

{

addTriangle(basePt, pts->getAt(i), pts->getAt(i+1), isPositiveArea);

}

addLinearSegments(*pts);

}

函数中的basePt被初始化为环的第一个点。

如代码所述,依次将每一个点加进类中,调用私有方法addTriangle ,其代码如下:

CentroidArea::addTriangle(const Coordinate &p0, const Coordinate &p1,

const Coordinate &p2, bool isPositiveArea)

{

double sign=(isPositiveArea)?1.0:-1.0;

centroid3(p0,p1,p2,triangleCent3);

double area2res=area2(p0,p1,p2);

cg3.x+=sign*area2res*triangleCent3.x;

cg3.y+=sign*area2res*triangleCent3.y;

areasum2+=sign*area2res;

}

成员属性cg3和areasum2得到了值。

其中area2res和triangleCent3计算如下:

double CentroidArea::area2(const Coordinate &p1, const Coordinate &p2, const Coordinate &p3)

{

return (p2.x-p1.x)*(p3.y-p1.y)-(p3.x-p1.x)*(p2.y-p1.y);

}

计算的是面积的2倍。

void CentroidArea::centroid3(const Coordinate &p1, const Coordinate &p2,

const Coordinate &p3, Coordinate &c)

{

c.x=p1.x+p2.x+p3.x;

c.y=p1.y+p2.y+p3.y;

}

c的xy除以3的话就是p1,p2,p3的均值了。

还有其他分支,似是一些备选,这里略过了。

所以是相当遍历所有点,将环的0点和当前点及当前点的下一个点构成一个三角形,进行累计计算。对于每一步:

wiki上的多边形形心计算公式:

一个由N个顶点xi , yi确定的不自交闭多边形的中心能如下计算: [4]

记号 xN , yN与顶点 x0 , y0相同。多边形的面积为:

多边形的中心由下式给出:

以面积中心来求:

面积中心和质量中心非常类似,面积中心只取决于图形的几何形状。如果物体是均匀的,质量中心将位于面积中心

对于两部分组成的图形,将有如下等式:

是特定部分的面积中心到所选参考系的距离。是特定部分的面积。

当一个复杂几何图形可以分成一些已知的简单几何图形时,先计算各部分的面积中心,然后通过下面一般的公式计算整个图形的面积中心:

这里从y-轴到中心的距离是,从x-轴到中心的距离是,中心的坐标是

http://zh.wikipedia.org/wiki/%E5%87%A0%E4%BD%95%E4%B8%AD%E5%BF%83

转载于:https://www.cnblogs.com/xiarl/p/4494233.html

Gdal库计算形心方法。相关推荐

  1. python 读取geotiff_科学网—利用python GDAL库读写geotiff格式的遥感影像方法 - 张伟的博文...

    (1)利用python GDAL库读写geotiff格式的遥感影像方法,具有很好的参考价值,不错! from osgeo import gdal import numpy as np def read ...

  2. 『飞秋』在.NET 4中调用GDAL库时遇到的问题及解决方法

    『飞秋』在.NET 4中调用GDAL库时遇到的问题及解决方法 最近需要在.NET 4的环境中调用GDAL库.GDAL本身是一套非托管类库,不过还好提供了用SWIG做的托管的Wrapper. 可以在FW ...

  3. Anaconda环境GDAL库基于whl文件的配置方法

      本文介绍在Anaconda环境下,基于.whl文件安装Python中高级地理数据处理库GDAL的方法.   在文章Anaconda下Python中GDAL模块的下载与安装方法(https://bl ...

  4. python读取tiff影像_科学网—利用python GDAL库读写geotiff格式的遥感影像方法 - 张伟的博文...

    (1)利用python GDAL库读写geotiff格式的遥感影像方法,具有很好的参考价值,不错! from osgeo import gdal import numpy as np def read ...

  5. Linux配置gdal变量环境,基于GDAL库的LINUX环境下的FY-3D和FY-4A遥感数据处理

    王燕婷 摘要 基于GDAL库的功能和其开源.可对栅格空间数据操作的特点,将GDAL与C++语言的完美结合,可极大得发挥其在开发遥感图像处理软件中的优势,并可跨平台应用于不同操作系统下的遥感图像数据处理 ...

  6. python基本使用-Python time库基本使用方法分析

    本文实例讲述了Python time库基本使用方法.分享给大家供大家参考,具体如下: 时间获取 time() 获取当前时间戳,为一个浮点数 >>>time.time() 151693 ...

  7. python词云乱码_python词云库wordCloud使用方法详解(解决中文乱码)

    文章中的例子主要借鉴wordColud的examples,在文章对examples中的例子做了一些改动. 一.wordColud设计中文词云乱码 使用wordColud设计词云的时候可能会产生乱码问题 ...

  8. pythontime库简单使用_Python time库基本使用方法分析

    本文实例讲述了Python time库基本使用方法.分享给大家供大家参考,具体如下: 时间获取 time() 获取当前时间戳,为一个浮点数 >>>time.time() 151693 ...

  9. GDAL库三个读取Jpeg2000格式驱动测试

    0.目的 GDAL库中提供了四五种读取Jpeg2000的驱动,但是各个驱动读取数据的效率各不相同,下面就针对三种读取jpeg2000的效率进行测试. GDAL库中提供的读取Jpeg2000的驱动有下面 ...

最新文章

  1. Traincascade Error: Bad argument (Can not get new positive sample. The most possible reason is insuf
  2. asp导出EXCEL数字格式及自动适应宽度的问题
  3. 定义跳转插件_虚幻插件Review:Logic Driver Pro 终极状态机插件
  4. Response.Redirect(x.aspx);跳转后session为null的解决方法
  5. webapi同一个Controller多个函数
  6. [初级]Java中的switch对整型、字符型、字符串的具体实现细节
  7. CSS3的常用属性(一)
  8. c语言折半查找输出坐标,数据结构(C语言版)——有序表查找(折半查找)(代码版)...
  9. Git报错:The file will have its original line endings in your working directory
  10. Android SurfaceFlinger
  11. HDU 4919 打表找规律 java睑板 map 递归
  12. 微信内置浏览器不支持 onclick 如何解决?(原因是因为内面中的内容或者标签大部分是动态生成的)...
  13. python自动发微信朋友圈不带图片_python itchat实现微信自动检测违规涉黄图片
  14. 银联支付接口申请流程
  15. PPT——快速制作图表(快速插入)
  16. 淘宝开店卖零食怎么开?万顿思电商
  17. 知名清理工具或成恶意软件
  18. gitbook build 生成的HTML无法跳转问题
  19. 法甲体育bway周末前瞻 欧塞尔对战洛里昂 升班马令人着急
  20. 微信公众号-定位之地址逆解析导航

热门文章

  1. ncr管理系统_项目管理信息平台
  2. 一份实践性超强的架构部操作手册,拿走不谢!
  3. 作为一个程序员的年终总结。
  4. [猎豹网校 Lua] 第二课.HelloLua
  5. ​富士莱医药通过注册:年营收近5亿 钱祥云曾非法买卖外汇
  6. 利用HTML实现一个个人信息表的网页(代码实例)
  7. 脑机接口科普0012——脑机接口的灭亡
  8. 口袋网咖已有服务器在使用怎么注销,口袋网咖怎么登录_口袋网咖登录方法介绍_游戏吧...
  9. HTML样式中移动鼠标到指定位置改变光标形状
  10. node.js测试html tdd,nodejs的单元测试框架mocha