官术网_书友最值得收藏!

Adding a polygon feature to a vector layer

In this recipe, we'll add a polygon to a layer. A polygon is the most complex kind of geometry. However, in QGIS, the API is very similar to a line.

Getting ready

For this recipe, we'll use a simple polygon shapefile, which you can download as a ZIP file from https://geospatialpython.googlecode.com/files/polygon.zip.

Extract this shapefile to a folder called polygon in your /qgis_data directory.

How to do it...

This recipe will follow the standard PyQGIS process of loading a layer, building a feature, and adding it to the layer's data provider, as follows:

  1. Start QGIS.
  2. From the Plugins menu, select Python Console.
  3. First, load the layer and validate it:
    vectorLyr = QgsVectorLayer('/qgis_data/polygon/polygon.shp', 'Polygon' , "ogr")
    vectorLyr.isValid()
    
  4. Next, access the layer's data provider:
    vpr = vectorLyr.dataProvider()
    
  5. Now, build a list of points for the polygon:
    points = []
    points.append(QgsPoint(-123.26,49.06))
    points.append(QgsPoint(-127.19,43.07))
    points.append(QgsPoint(-120.70,35.21))
    points.append(QgsPoint(-115.89,40.02))
    points.append(QgsPoint(-113.04,48.47))
    points.append(QgsPoint(-123.26,49.06))
    
  6. Next, create a geometry object and ingest the points as a polygon. We nest our list of points in another list because a polygon can have inner rings, which will consist of additional lists of points being added to this list:
    poly = QgsGeometry.fromPolygon([points])
    
  7. Next, build the feature object and add the points:
    f = QgsFeature()
    f.setGeometry(poly)
    
  8. Finally, add the feature to the layer's data provider and update the extents:
    vpr.addFeatures([f])
    

How it works...

Adding a polygon is very similar to adding a line, with one key difference that is a common pitfall. The last point must be identical to the first point in order to close the polygon. If you don't repeat the first point, you won't receive any errors, but the polygon will not be displayed in QGIS, which can be difficult to troubleshoot.

主站蜘蛛池模板: 京山县| 祁连县| 吕梁市| 昌图县| 罗甸县| 奉贤区| 高雄市| 儋州市| 读书| 汤阴县| 军事| 乌鲁木齐市| 驻马店市| 深水埗区| 临西县| 龙门县| 哈巴河县| 溧阳市| 宜丰县| 河源市| 百色市| 江北区| 苍梧县| 德阳市| 蒙自县| 和平县| 通辽市| 丰镇市| 丰镇市| 太谷县| 阿坝| 佛学| 阿图什市| 泸水县| 安乡县| 泰顺县| 西宁市| 红原县| 农安县| 昌宁县| 姜堰市|