Gdal库计算形心方法。
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库计算形心方法。相关推荐
- python 读取geotiff_科学网—利用python GDAL库读写geotiff格式的遥感影像方法 - 张伟的博文...
(1)利用python GDAL库读写geotiff格式的遥感影像方法,具有很好的参考价值,不错! from osgeo import gdal import numpy as np def read ...
- 『飞秋』在.NET 4中调用GDAL库时遇到的问题及解决方法
『飞秋』在.NET 4中调用GDAL库时遇到的问题及解决方法 最近需要在.NET 4的环境中调用GDAL库.GDAL本身是一套非托管类库,不过还好提供了用SWIG做的托管的Wrapper. 可以在FW ...
- Anaconda环境GDAL库基于whl文件的配置方法
本文介绍在Anaconda环境下,基于.whl文件安装Python中高级地理数据处理库GDAL的方法. 在文章Anaconda下Python中GDAL模块的下载与安装方法(https://bl ...
- python读取tiff影像_科学网—利用python GDAL库读写geotiff格式的遥感影像方法 - 张伟的博文...
(1)利用python GDAL库读写geotiff格式的遥感影像方法,具有很好的参考价值,不错! from osgeo import gdal import numpy as np def read ...
- Linux配置gdal变量环境,基于GDAL库的LINUX环境下的FY-3D和FY-4A遥感数据处理
王燕婷 摘要 基于GDAL库的功能和其开源.可对栅格空间数据操作的特点,将GDAL与C++语言的完美结合,可极大得发挥其在开发遥感图像处理软件中的优势,并可跨平台应用于不同操作系统下的遥感图像数据处理 ...
- python基本使用-Python time库基本使用方法分析
本文实例讲述了Python time库基本使用方法.分享给大家供大家参考,具体如下: 时间获取 time() 获取当前时间戳,为一个浮点数 >>>time.time() 151693 ...
- python词云乱码_python词云库wordCloud使用方法详解(解决中文乱码)
文章中的例子主要借鉴wordColud的examples,在文章对examples中的例子做了一些改动. 一.wordColud设计中文词云乱码 使用wordColud设计词云的时候可能会产生乱码问题 ...
- pythontime库简单使用_Python time库基本使用方法分析
本文实例讲述了Python time库基本使用方法.分享给大家供大家参考,具体如下: 时间获取 time() 获取当前时间戳,为一个浮点数 >>>time.time() 151693 ...
- GDAL库三个读取Jpeg2000格式驱动测试
0.目的 GDAL库中提供了四五种读取Jpeg2000的驱动,但是各个驱动读取数据的效率各不相同,下面就针对三种读取jpeg2000的效率进行测试. GDAL库中提供的读取Jpeg2000的驱动有下面 ...
最新文章
- Traincascade Error: Bad argument (Can not get new positive sample. The most possible reason is insuf
- asp导出EXCEL数字格式及自动适应宽度的问题
- 定义跳转插件_虚幻插件Review:Logic Driver Pro 终极状态机插件
- Response.Redirect(x.aspx);跳转后session为null的解决方法
- webapi同一个Controller多个函数
- [初级]Java中的switch对整型、字符型、字符串的具体实现细节
- CSS3的常用属性(一)
- c语言折半查找输出坐标,数据结构(C语言版)——有序表查找(折半查找)(代码版)...
- Git报错:The file will have its original line endings in your working directory
- Android SurfaceFlinger
- HDU 4919 打表找规律 java睑板 map 递归
- 微信内置浏览器不支持 onclick 如何解决?(原因是因为内面中的内容或者标签大部分是动态生成的)...
- python自动发微信朋友圈不带图片_python itchat实现微信自动检测违规涉黄图片
- 银联支付接口申请流程
- PPT——快速制作图表(快速插入)
- 淘宝开店卖零食怎么开?万顿思电商
- 知名清理工具或成恶意软件
- gitbook build 生成的HTML无法跳转问题
- 法甲体育bway周末前瞻 欧塞尔对战洛里昂 升班马令人着急
- 微信公众号-定位之地址逆解析导航
热门文章
- ncr管理系统_项目管理信息平台
- 一份实践性超强的架构部操作手册,拿走不谢!
- 作为一个程序员的年终总结。
- [猎豹网校 Lua] 第二课.HelloLua
- ​富士莱医药通过注册:年营收近5亿 钱祥云曾非法买卖外汇
- 利用HTML实现一个个人信息表的网页(代码实例)
- 脑机接口科普0012——脑机接口的灭亡
- 口袋网咖已有服务器在使用怎么注销,口袋网咖怎么登录_口袋网咖登录方法介绍_游戏吧...
- HTML样式中移动鼠标到指定位置改变光标形状
- node.js测试html tdd,nodejs的单元测试框架mocha