专栏首页数据处理与分析生成面要素的中心点-GDAL

生成面要素的中心点-GDAL

啥是GDAL

对于GIS来说,GDAL几乎是万物之源!

QGIS,用了GDAL!

FME,用了GDAL!

ArcGIS,也用了GDAL!

……

具体有多少,可以去官网上去查看,就不再一一列举了!

咋就想到用这个库了呢?

某天,我们的白总在我的QQ群里问了个这样的问题:

并且还不想用商业软件来实现,还要求要用代码!

怎么整!

唉!

谁让他是白总呢!

白总有需求,咱当然要响应了!

于是,就想到了GDAL。

于是,就想:GDAL有没有类似的功能?

答案是:当然有!

所以就打算用GDAL来解决这个问题。

但别问我谁是‘于是’,我也不知道!

做法

搜索引擎的坑

也许是我打开方式有问题吧,我搜索了接近两个小时,百度、必应、谷歌,都试了一遍,但没啥收获!

所以不要过于依赖搜索引擎!

还是官方文档靠谱

搜索无果,我就放弃了搜索引擎。把主要精力放在了官方文档上。看了看文档,我发现了俩函数。经过测试,这俩函数都是可以的。

PointOnSurface(Geometry self) -> Geometry

OGRGeometryH
OGR_G_PointOnSurface(OGRGeometryH hGeom)

Returns a point guaranteed to lie on the surface.

This method relates to the SFCOM ISurface::get_PointOnSurface() method
however the current implementation based on GEOS can operate on other
geometry types than the types that are supported by SQL/MM-Part 3 :
surfaces (polygons) and multisurfaces (multipolygons).

This method is built on the GEOS library, check it for the definition
of the geometry operation. If OGR is built without the GEOS library,
this method will always fail, issuing a CPLE_NotSupported error.

Parameters:
-----------

hGeom:  the geometry to operate on.

a point guaranteed to lie on the surface or NULL if an error occurred.

OGR 1.10

Centroid(Geometry self) -> Geometry

int OGR_G_Centroid(OGRGeometryH hGeom, OGRGeometryH  hCentroidPoint)

Compute the geometry centroid.

The centroid location is applied to the passed in OGRPoint object. The  centroid is not necessarily within the geometry.

This method relates to the SFCOM ISurface::get_Centroid() method  however the current implementation based on GEOS can operate on other  geometry types such as multipoint, linestring, geometrycollection such as  multipolygons. OGC SF SQL 1.1 defines the operation for surfaces  (polygons). SQL/MM-Part 3 defines the operation for surfaces and  multisurfaces (multipolygons).

This function is the same as the C++ method  OGRGeometry::Centroid().

This function is built on the GEOS library, check it for the  definition of the geometry operation. If OGR is built without the GEOS  library, this function will always fail, issuing a CPLE_NotSupported  error.

OGRERR_NONE on success or OGRERR_FAILURE on error.

代码

查完文档,后面的就很简单了,直接上代码吧!

import ogr

p = ogr.CreateGeometryFromWkt('POLYGON((1 1,5 1,5 5,1 5,1 1),(2 2,2 4,4 4,4 2,2 2)) ')

#生成内部点

#方式一

p.PointOnSurface().ExportToWkt()

#方式二

p.Centroid().ExportToWkt()

具体的区别,我还没来得及体会。只知道PointOnSurface生成的点,在面的内部,而Centorid生成的点,不一定在内部!具体的使用,还需日后细细品。

本文分享自微信公众号 - 数据处理与分析(Qing_master),作者:文刀木公

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 在FME中使用循环的另一种方式

    循环可以让很多数据处理的工作变得简单。透过循环,也可以让FME魔板更加简洁! 在之前的推送使用FME沿线生成点(二)中,使用了循环来沿着线来均匀的生成点。今天,...

    数据处理与分析
  • 如何巧妙的解决问题

    这种问题解决方法有很多,比如:可以使用递归,我们写一个函数,功能如下:使用表2中的上手编号在表2中的档案号中进行查找;判断该档案号是否有上手编号;如果有继续调用...

    数据处理与分析
  • FME转换器介绍之(六)

    转换器参数有很多,这里重点介绍两个 Mode:可选参数,有以下两种模式 1、All Coordinates ,提取所有坐标值到列表; 2、Specify Coo...

    数据处理与分析
  • CK+表情数据库及使用

    这个数据库是在 Cohn-Kanade Dataset 的基础上扩展来的,发布于2010年。这个数据库比起JAFFE 要大的多。而且也可以免费获取,包含表情的l...

    李智
  • Codeforces 810C Do you want a date?(数学,前缀和)

    C. Do you want a date? time limit per test:2 seconds memory limit per test:256 m...

    Angel_Kitty
  • 通信通道优化分区(Information Theory)

    给定一个原始的离散源X,它的分布被噪声破坏,产生的噪声数据Y与给定的联合分布p(X,Y)。然后使用量化器/分类器Q: Y→Z对数据Y进行分类/量化,得到具有概率...

    用户6869393
  • 陷入回声室:Twitter上的意大利疫苗辩论(CS AI)

    出现在美国和欧洲的麻疹是在2000年代初被消灭的一种疾病,与此同时,在社交媒体上关于接种疫苗的优点的辩论也越来越多。在这项研究中,我们调查发现Twitter上的...

    用户7035935
  • RFC2616-HTTP1.1-Methods(方法规定部分—单词注释版)

    zaking
  • Codeforces Round #345 (Div. 2)【A.模拟,B,暴力,C,STL,容斥原理】

    A. Joysticks time limit per test:1 second memory limit per test:256 megabytes in...

    Angel_Kitty
  • Controlling Access to the Kubernetes API

    ? API Server Ports and IPs By default the Kubernetes API server serves HTTP o...

    Walton

扫码关注云+社区

领取腾讯云代金券