- QGIS Python Programming Cookbook
- Joel Lawhead
- 286字
- 2021-07-23 19:48:56
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:
- Start QGIS.
- From the Plugins menu, select Python Console.
- First, load the layer and validate it:
vectorLyr = QgsVectorLayer('/qgis_data/polygon/polygon.shp', 'Polygon' , "ogr") vectorLyr.isValid()
- Next, access the layer's data provider:
vpr = vectorLyr.dataProvider()
- 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))
- 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])
- Next, build the feature object and add the points:
f = QgsFeature() f.setGeometry(poly)
- 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.
- Web前端開發(fā)技術(shù):HTML、CSS、JavaScript(第3版)
- TypeScript Blueprints
- Learn Type:Driven Development
- Rust編程:入門、實戰(zhàn)與進(jìn)階
- Microsoft Dynamics 365 Extensions Cookbook
- Python程序設(shè)計(第3版)
- Clojure for Domain:specific Languages
- 云計算通俗講義(第3版)
- 老“碼”識途
- PhoneGap Mobile Application Development Cookbook
- jQuery炫酷應(yīng)用實例集錦
- Instant PHP Web Scraping
- Web性能實戰(zhàn)
- Scratch·愛編程的藝術(shù)家
- Java高級程序設(shè)計