面对象QgsPolygon

news2024/12/26 22:54:47
  • 几何对象中的面用QgsPolygon进行封装,也称为多边形
  • 简单的多边形是由一串点连接而成,并首尾闭合
  • 多边形的结构更复杂,除了有一个外部轮廓,还可能包括内部多个轮廓

创建面对象

  • QgsPolygon()   #创建一个空的面
    使用setExteriorRing设置多边形的外轮廓
    使用addInteriorRing添加内部轮廓(洞)
  • QgsPolygon(exterior: QgsLineString, rings:Iterable[QgsLineString] = [])   #使用外轮廓和内部的环
  • QgsPolygon(QgsPolygon)   #复制一个多边形
def create_polygon_object():
    # 创建一条线
    line1 = QgsLineString([QgsPoint(0, 0), QgsPoint(1, 0), QgsPoint(1, 1), QgsPoint(0, 1)])
    showgeoms([line1], 'line1')

    # 使用setExterorRing
    polygon1 = QgsPolygon()
    polygon1.setExteriorRing(QgsLineString(line1))
    showgeoms([polygon1], 'polygon1')

    # 复制polygon
    polygon2 = QgsPolygon(polygon1)
    inring = QgsLineString([0.4, 0.6, 0.6, 0.4], [0.7, 0.7, 0.2, 0.2])
    polygon2.addInteriorRing(inring)  # 添加内部空洞
    showgeoms([polygon2], 'polygon2')
    return polygon2

 

面对象的访问 

  •  访问外轮廓:
    |3. exteriorRing()    # 得到多边形的外轮廓
    <QgsLineString: LineString (0 0,1 0, 1 1, 0 1, 0 0)>
  • 访问内轮廓:
    l3.numInteriorRings()  # 得到内轮廓的数量
    l3.interiorRing(0)    # 第1个内部轮廓,要小于numInteriorRings的数量
def access_surface_object(polygon2):
    polygon3 = polygon2.clone()  # 拷贝
    # 访问多边形的内外轮廓
    print(polygon3.exteriorRing())  # 外轮廓
    ering = polygon3.exteriorRing()
    showgeoms([ering], 'ering')

    print('内轮廓数量', polygon3.numInteriorRings())  # 内部轮廓的数量
    print(polygon3.interiorRing(0))  # 第1个内部轮廓,要小于numInteriorRings的数量
    inring = polygon3.interiorRing(0)
    showgeoms([inring], 'inring')

 面对象的修改

  • moveVertex(QgsVertexld position, const QgsPoint &newPos)    # 移动节点
  • insertVertex(QgsVertexld position, const QgsPoint &vertex)    # 插入节点
  • deleteVertex(QgsVertexld position)   # 删除节点

QgsVertexld类:表示要操作的节点。与线对象可以根据线的结点顺序进行定位不同,面有外轮廓,还可能有一个或多个内轮廓,这样定位某个点就比较复杂。因此构造了一个QgsVertexld类。 

QgsVertexld是用于识别几何对象内唯一顶点的实用类。

QgsVertexId (int_ part=-1, int_ _ring=-1, int_ _vertex=-1, VertexType_type= SegmentVertex)
  • 三个参数: _part 部分,_ ring 环,_ vertex 节点顺序
def QgsVertexld_1(polygon2):
    polygon2 = polygon2.clone()  # 拷贝
    # vertexid  part,  ring, vertex
    polygon2.partCount()  # 部分的数量
    polygon2.ringCount()  # 环的数量
    polygon2.nCoordinates()  # 整个对象的节点总数

    idx1 = QgsVertexId(3, 2, 1)
    print(idx1.isValid())
    print(idx1.isValid(polygon2))

    idx2 = QgsVertexId(0, 0, 1)
    print(idx2.isValid())
    print(idx2.isValid(polygon2))

 移动节点

def move_node(polygon2):
    idx2 = QgsVertexId(0, 0, 1)
    polygon2.moveVertex(idx2, QgsPoint(1, -0.5))  # 移动节点

移动前移动后

插入节点

def insert_node(polygon2):  #插入节点
    idx2=QgsVertexId(0,0,1)
    polygon2.insertVertex(idx2,QgsPoint(0.5,-0.5))
    idx3=QgsVertexId(0,1,1)
    polygon2.insertVertex(idx3,QgsPoint(0.5,0.9))

 

 

插入节点前插入节点后

 删除节点

 

def delete_node(polygon2):#删除节点
    idx2=QgsVertexId(0,0,1)
    polygon2.deleteVertex(idx2)
    idx3=QgsVertexId(0,1,1)
    polygon2.deleteVertex(idx3)

 

 

删除节点前删除节点后

 

例子:生成经纬网 

def generate_grid():
    polys = []
    for lon in range(0, 360, 10):
        for lat in range(-90, 90, 10):
            bottomleft = QgsPoint(lon, lat)
            bottomright = QgsPoint(lon + 10, lat)
            topright = QgsPoint(lon + 10, lat + 10)
            topleft = QgsPoint(lon, lat + 10)
            tl = QgsLineString([bottomleft, bottomright, topright, topleft])
            polys.append(QgsPolygon(tl))
    showgeoms(polys, 'grid')

 

 参考:pyqgis2.05面对象

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/530652.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring AOP 实践指南

Spring AOP 实践指南 文章目录 Spring AOP 实践指南一、概述1、简介2、官方资料3、本文档说明 二、基本使用1、引入依赖2、定义切面3、定义切点4、创建 HelloController5、启动项目&#xff0c;访问测试 三、通知1、概述五种通知通知的顺序 2、通知方法接受的参数3、前置通知代…

Thread线程学习(1) 了解线程的基本知识——什么是线程

本专栏将记录有关线程方面的知识 在计算机科学领域中&#xff0c;线程&#xff08;Thread&#xff09;是一种执行计算机程序的基本单元。对于初学者来说&#xff0c;理解线程是学习并发编程的关键一步。本文将带你了解线程的基础知识&#xff0c;包括线程的定义、线程与进程的关…

GPT神奇应用:给孩子做每日安排

正文共 1163 字&#xff0c;阅读大约需要 4 分钟 家长必备技巧&#xff0c;您将在4分钟后获得以下超能力&#xff1a; 快速生成每日安排计划 Beezy评级 &#xff1a;B级 *经过简单的寻找&#xff0c; 大部分人能立刻掌握。主要节省时间。 推荐人 | Kim 编辑者 | Linda ●图片…

JavaScript实现打印倒金字塔的代码

以下为实现打印倒金字塔的程序代码和运行截图 目录 前言 一、实现打印倒金字塔 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择&#xff0c;您可以在目录里进行快速查找&#xff1b; 2.本博文代码可以根据题目要求实现相关使用功…

动态规划专题

动态规划专题 最长递增子序列LeetCode 300. 最长递增子序列解题思路代码实现 LeetCode 354. 俄罗斯套娃信封问题解题思路代码实现 总结 不要纠结&#xff0c;干就完事了&#xff0c;熟练度很重要&#xff01;&#xff01;&#xff01;多练习&#xff0c;多总结&#xff01;&…

【Redis】Redis中bitmap的原理和使用

文章目录 一、原理二、BitMap 相关命令三、BitMap 空间计算四、使用场景1. 用户签到2. 统计活跃用户&#xff08;用户登陆情况&#xff09;3. 统计用户在线状态4. 实现布隆过滤器 五、总结 一、原理 先声明一下&#xff1a;Redis 有5种数据类型&#xff0c;而 BitMap 在 Redis…

【k8s】Ubuntu22.04离线部署k8s集群:搭建软件仓库和镜像仓库(repo节点)

上两篇主要记录了在CentOS 7环境中离线部署k8s的方案&#xff0c;本篇继续介绍方案二在Ubuntu 22.04的实现。&#xff08;当然&#xff0c;整体思路还是跟上篇基本相似&#xff09; 目录 Ubuntu22.04离线部署k8s集群&#xff1a;搭建软件仓库和镜像仓库&#xff08;repo节点&am…

总结852

学习目标&#xff1a; 月目标&#xff1a;5月&#xff08;张宇强化前10讲&#xff0c;背诵15篇短文&#xff0c;熟词僻义300词基础词&#xff09; 周目标&#xff1a;张宇强化前5讲并完成相应的习题并记录&#xff0c;英语背3篇文章并回诵 每日必复习&#xff08;5分钟&#…

云上高校导航 小程序 开发教程 1.0.1

​ Gitee仓库&#xff1a;云上高校导航 GitHub仓库&#xff1a;云上高校导航 “云上高校导航”是一套基于小程序云开发的校园导航类系统开发方案&#xff0c;该开发方案可供开发者进行二次开发&#xff0c;用于解决师生和访客的校园出行需求。 项目优势及创新&#xff1a;…

ChatGPT vs. Bing vs. Bard

随着 2022 年 ChatGTP 的推出&#xff0c;人工智能聊天机器人的世界突然走上了一条新道路。如今&#xff0c;密切关注 AI 的人都知道&#xff0c;不同公司推出了几款产品。从谷歌拥有自己的 Bard AI&#xff0c;到微软发布新的 Bing AI Chat&#xff0c;再到 OpenAI 发布GPT-4。…

云服务器搭建Python项目实现学术优化chatgpt

云服务器搭建实现学术优化chatgpt 1 服务器准备2 云服务器配置2.1 python虚拟环境2.1.1 python3.9安装配置2.1.2 下载python项目2.1.3 创建python虚拟环境 3 后台运行python项目&#xff08;不然不能关闭与云服务器的连接&#xff0c;那意义何在&#xff1f;&#xff09; 1 服务…

GEE:将年度NDVI时间序列影像集合(Image Collection)转变为多波段影像,并下载

作者:CSDN @ _养乐多_ 本文将重点介绍如何使用 Google Earth Engine (GEE) 将多波段影像堆叠并导出,并探讨其应用场景和好处。 通过使用 GEE 的多波段影像堆叠功能,我们可以将不同波段的遥感影像整合成一个多波段影像,以支持各种地理空间分析任务。这种方法适用于遥感影…

以太网端口类型

以太网端口有 3种链路类型:access、trunk、hybird Access类型端口只能属于1个VLAN 般用于连接计算机 端口&#xff1b;Trunk类型端口可以允许多个VLAN通过,可以接收和发送多个VLAN 报文,一般用于交换机之间的连接&#xff1b;Hybrid类型端口可以允许多个VLAN通过&#xff0c;可…

Dubbo的使用

Dubbo在开发中&#xff0c;存在两种开发思路。基于SOA(面向服务的体系架构)思想和辅助SpringCloud架构提升效率。 Dubbo 默认使用 Netty 框架 Dubbo基于SOA思想 正常SpringBoot项目是只有一个启动类&#xff0c;接口定义在web层(即Controller层)中,然后调用Service层。&…

Matlab 梯度下降法

一、简介 梯度下降法&#xff08;Gradient descent&#xff09;或最速下降法&#xff08;steepest descent&#xff09;是求解无约束最优化问题的一种常用方法。 假设fx)在R上具有一阶连续偏导数的函数。要求解的无约束最优化问题是。其本质是一个迭代的方法&#xff0c;选择…

VMware Workstation 网络备忘 + 集群规模

概述 在虚拟机中部署服务&#xff0c;进行IP规划&#xff0c;进行相关的前期准备 3 张网卡 2个不同的网段 1个NAT 概述截图 NAT 截图 VMnet0 截图 VMnet1 截图 总结&#xff1a; 网卡&#xff08;网络适配器&#xff09;名称IP网段备注NATens33192.168.139.0VMnet0ens34VMne…

手把手教你在RT-THREAD bsp上运行pikascript脚本点亮小灯

简介 这篇文章介绍如何在RT-THREAD bsp上运行pikascript脚本。 pikascript相当于一个小型的micropython。 最近有一些结构上的调整&#xff0c;写这篇文章大概介绍一下如何使用&#xff0c;以及开发过程中需要注意的问题。 这篇文章几乎适配所有的RT-THREAD上的bsp。&#xff…

在Kubernetes(K8S) 上运行第一个应用

1、启动代理 &#xff1a; kubectl proxy 2、部署应用程序最简单的方式是使用 kubectl run 命令&#xff0c;该命令可以创建所有必要的组件而无需JSON或YAML文件。 --imageluksa/kubia 显示的是指定要运行的容器镜像&#xff0c;--port8080 选项告诉Kubernetes应用正在监听808…

每日一算-冒泡排序

冒泡排序是最简单的排序算法&#xff0c;如果相邻元素的顺序错误&#xff0c;则通过重复交换它们来工作。该算法不适用于大数据集&#xff0c;因为它的平均和最坏情况时间复杂度都很高。 原理 输入&#xff1a; arr[] {6, 3, 0, 5} 第一步&#xff1a; 冒泡排序从最前面的两个…

每日一算-选择排序算法

大家好&#xff0c;我是易安&#xff01; 今天我们开始每日一算的篇章&#xff0c;今天带来的是选择算法。 选择排序是一种简单而高效的排序算法&#xff0c;它通过从列表的未排序部分中重复选择最小&#xff08;或最大&#xff09;元素并将其移动到列表的已排序部分来工作。该…