使用QGIS3.10的Python脚本将一串坐标点转换为矢量面

目录

一、应用场景

二、关于QGIS的python脚本

三、操作过程

1.打开控制台界面

 2.数据准备

 3.编写/加载脚本

4.执行脚本 

5.查看数据


一、应用场景

在早期的测绘图纸上,常有界址点存在于纸质表格中,若要将这些测绘成果矢量化,就需要用到点转面或者是线的操作。据作者了解,QGIS还没有这样的一个工具或功能,需要通过多种操作完成。但是QGIS提供了二次开发功能。作者阅读了部分QGIS的Python开发文档,写了一个点转面的脚本,现在共享出来和各位交流。声明一下,作者只是一个Python菜鸟,写此文主要是为了作GIS应用。

二、关于QGIS的python脚本

QGIS从0.9开始支持Python,应该说QGIS对Python的支持的比较好了。通过QGIS的python控制台操作,不需要导入和QGIS有关的库,所以便于QGIS应用(本文不涉及应用程序开发)。作者用的3.10版本的Python大版本是3.7。

三、操作过程

1.打开控制台界面

通过插件-Python控制台打开界面(快捷键:ctrl+alt+p)

 然后单击下图圈定的按钮显示编辑器

编辑器界面

 2.数据准备

这里新建一个含有ID字段的面状ShapeFile矢量文件,加载到工程即可,具体过程略。这里为了显示,作者只建立了一个临时图层。

描述信息

 3.编写/加载脚本

将脚本代码复制粘贴到编辑器中,或者是打开脚本都可以。

以下是作者使用的脚本:

class TestPloygon():
    #将txt内容转换为面状矢量的wkt文本
    def Txt2WktPolygon(filename):
        data = 'Polygon (('
        list = []
        # 打开文件
        fo = open(filename, 'r')
        file_data = fo.readlines()
        for row in file_data:
            tmp_list=row.split(',')
            tmp_list[-1] = tmp_list[-1].replace('\n','')
            #print (tmp_list[0]+' '+tmp_list[1]);
            if len(list) == 0:
                list.append(tmp_list[0]+' '+tmp_list[1])
            elif len(list) > 0:
                list.append(","+tmp_list[0]+' '+tmp_list[1])
        data = data + ''.join(list) + '))'
        #print (data)
        return data
        # 关闭文件
        fo.close()
    #添加一个矢量要素
    def AddFeature2Shp(filename):
        layer = iface.activeLayer()
        caps = layer.dataProvider().capabilities()
        wktstr = TestPloygon.Txt2WktPolygon(filename)
        print (wktstr)
        if caps & QgsVectorDataProvider.AddFeatures:
            feat = QgsFeature(layer.fields())
            #设置ID值为1
            feat.setAttribute('ID', '1')
            #设置空间要素,使用的wkt字符串
            feat.setGeometry(QgsGeometry.fromWkt(wktstr));
            (res, outFeats) = layer.dataProvider().addFeatures([feat])    

    
#指定需要读取的txt文件名
filename = 'C:\\Users\\Lenovo\\Desktop\\points.txt'
Wktstr = TestPloygon.AddFeature2Shp(filename)
#print (Wktstr)
print ('要素添加成功!')

 Python代码的缩进有逻辑含义,复制粘贴时一定不要改动每行文本的缩进。

这里对脚本代码简要说明一下

首先指定 一个TXT文件

然后执行添加要素的代码

在执行添加要素的代码过程中,首先选择鼠标选中的图层作为要添加的图层,然后逐行读取指定TXT文件的内容为wkt字符串,英文逗号前是横坐标,逗号后是纵坐标

将读取的wkt字符串转换为矢量文件的空间数据,保存。

 

脚本中读取了一个文本文件,内容如下:

这代表的是一个多边形的各个节点的坐标值,本文新建的工程坐标单位是度,所以这些都是经纬度坐标(不过是地球上不存在的坐标),第一个是X坐标,第二个是Y坐标。注意: 首尾的坐标点要一致。

脚本和txt文本可以在这里下载QGIS310的Python脚本-坐标点转面.zip

4.执行脚本 

单击编辑器上的绿色三角按钮就可以执行了,以下是执行结果。

5.查看数据

将矢量图层缩放至图层范围即可查看图斑。

至此,我们就完成了将一个txt文本作为矢量面要素添加到矢量文件的操作 。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值