【问题标题】:QGIS: add polygon by inputting coordinatesQGIS:通过输入坐标添加多边形
【发布时间】:2017-05-12 05:37:15
【问题描述】:

简单的问题,我想编辑一个图层添加一个正方形:

x,y
10,10
10,20
20,20
20,10

但是我不想把它放到一个csv/txt文件中,我只想一次输入一个坐标并构造多边形,有什么想法吗?

【问题讨论】:

  • 不完全确定您的意思,但您可以创建一个带有坐标的知名文本文件:

标签: qgis


【解决方案1】:

不完全确定您的意思,但您可以使用坐标创建一个众所周知的文本文件:

"id","st_astext" 3,"POLYGON((380021.900198576 277004.918072763,380001.683890889 276942.789907678,380057.895087871

然后导入 csv?

【讨论】:

    【解决方案2】:

    感谢您的回答,但显然 QGIS 没有添加单个坐标的插件(就像 ArcGIS 使用 F6 快捷方式所做的那样)。

    【讨论】:

    • 您可以使用 Numerical Digitize 命令在 QGIS 中创建具有精确(手动输入)精确坐标的点。其他选项是 gis.stackexchange.com/a/142247
    【解决方案3】:

    这是一个简单的例子,但我相信可以理解这个问题。

    我有一个简单的插件,它加载多边形图层(注意:只有一个),这是空的,并使用这种模式输入新的多边形 "x0,y0;x1,y1....; x0,y0":

    然后输入这个值:

    -4.6142578125,39.40224434029275;-2.6806640625,39.40224434029275;-2.6806640625,40.97989806962013;-4.6142578125,40.97989806962013;-4.6142578125,39.40224434029275

    当点击“Aceptar”按钮时,添加新的多边形。

    这是 run() 方法:

    def run(self):
        self.dlg.cmb_TOC.clear()
        self.dlg.input_ln.clear()
        layers = self.iface.legendInterface().layers()
        layer_list = []
        for layer in layers:
            layerType = layer.type()
            if layerType == QgsMapLayer.VectorLayer and layer.wkbType()==QGis.WKBPolygon:
    
                layer_list.append(layer.name())
                self.dlg.cmb_TOC.addItems(layer_list)
    
        """Run method that performs all the real work"""
        # show the dialog
        self.dlg.show()
        # Run the dialog event loop
        result = self.dlg.exec_()
        # See if OK was pressed
        if result == 1:   
            if unicode(self.dlg.cmb_TOC.currentText())=="" or self.dlg.input_ln.text()=="":
                self.iface.messageBar().pushMessage("Info", "Empty parameters", level=QgsMessageBar.WARNING, duration=3)
                return 1
    
            t_e="-4.6142578125,39.40224434029275;-2.6806640625,39.40224434029275;-2.6806640625,40.97989806962013;-4.6142578125,40.97989806962013;-4.6142578125,39.40224434029275"   
            t_e=self.dlg.input_ln.text()
    
            v=t_e.rstrip('\n').split(';')
    
            #Create New Polygon
            points =[]
    
            for p in v:             
                point=QgsPoint( float(p.split(',')[0]), float(p.split(',')[1]))
                points.append(point)
    
            polygon = QgsGeometry.fromPolygon([points]) 
    
            selectedLayerIndex = self.dlg.cmb_TOC.currentIndex()
            selectedLayer = layers[selectedLayerIndex]
    
            pr = selectedLayer.dataProvider() 
            poly = QgsFeature()
            poly.setGeometry(polygon)
            pr.addFeatures([poly])
            selectedLayer.updateExtents()
            selectedLayer.triggerRepaint()
    

    希望对你有帮助

    注意:我重复了另一个例子

    【讨论】:

      【解决方案4】:

      是的,如果你使用 python,可以通过 python 制作一个多边形

      • 制作一个 json 字典

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-19
        • 2012-07-05
        • 1970-01-01
        • 1970-01-01
        • 2018-03-31
        • 2017-07-17
        • 2017-11-04
        • 1970-01-01
        相关资源
        最近更新 更多