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

Changing a vector layer feature's attribute

The process to change an attribute in a feature is straightforward and well-supported by the PyQGIS API. In this recipe, we'll change a single attribute, but you can change as many attributes of a feature as desired at once.

Getting ready

You will need the New York City museums' shapefile used in other recipes, which you can download as a ZIP file from https://geospatialpython.googlecode.com/svn/NYC_MUSEUMS_GEO.zip.

Extract this shapefile to /qgis_data/nyc.

How to do it...

We will load the shapefile as a vector layer, validate it, define the feature IDs of the fields we want to change, get the index of the field names that we will change, define the new attribute value as an attribute index and value, and change the feature in the layer. To do this, we need to perform the following steps:

  1. Start QGIS.
  2. From the Plugins menu, select Python Console.
  3. First, load the layer and validate it:
    vectorLyr = QgsVectorLayer('/qgis_data/nyc/NYC_MUSEUMS_GEO.shp', 'Museums' , "ogr")
    vectorLyr.isValid()
    
  4. Next, define the feature IDs you want to change:
    fid1 = 22
    fid2 = 23
    
  5. Then, get the index of the fields you want to change, which are the telephone number and city name:
    tel = vectorLyr.fieldNameIndex("TEL")
    city = vectorLyr.fieldNameIndex("CITY")
    
  6. Now, create the Python dictionary for the attribute index and the new value, which in this case is an imaginary phone number:
    attr1 = {tel:"(555) 555-1111", city:"NYC"}
    attr2 = {tel:"(555) 555-2222", city:"NYC"}
    
  7. Finally, use the layer's data provider to update the fields:
    vectorLyr.dataProvider().changeAttributeValues({fid1:attr1, fid2:attr2})
    

How it works...

Changing attributes is very similar to changing the geometry within a feature. We explicitly name the feature IDs in this example, but in a real-world program, you would collect these IDs as a part of some other process output, such as a spatial selection. An example of this type of spatial selection is available in the Filtering a layer by Geometry recipe, in Chapter 2, Querying Vector Data.

主站蜘蛛池模板: 烟台市| 绥德县| 疏附县| 石河子市| 宁陵县| 景东| 桐庐县| 海丰县| 崇义县| 昆明市| 韩城市| 惠来县| 丰县| 新蔡县| 泽普县| 轮台县| 太谷县| 运城市| 大宁县| 齐齐哈尔市| 八宿县| 元氏县| 灵璧县| 上高县| 建湖县| 枣阳市| 元江| 平塘县| 永州市| 宁都县| 阿勒泰市| 平陆县| 洛川县| 霍邱县| 龙胜| 平南县| 宁德市| 繁峙县| 自贡市| 民权县| 台北县|