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

Examining vector layer attributes

A true GIS layer contains both spatial geometry and database attributes. In this recipe, we'll access a vector point layer's attributes in PyQGIS. We'll use a file-based layer from a shapefile, but once a layer is loaded in QGIS, every vector layer works the same way.

Getting ready

Once again, we'll use the same New York City Museums layer from the Loading a vector layer from a file recipe in this chapter. You can download the layer from https://geospatialpython.googlecode.com/svn/NYC_MUSEUMS_GEO.zip.

Unzip that file and place the shapefile's contents in a directory named nyc within your qgis_data directory, within your root or home directory.

How to do it...

In the following steps, we'll load the layer, access the features iterator, grab the first feature, and then view the attributes as a Python list:

  1. First, load the shapefile as a vector layer:
    layer = QgsVectorLayer("/qgis_data/nyc/NYC_MUSEUMS_GEO.shp", "New York City Museums", "ogr")
    
  2. Next, get the features iterator:
    features = layer.getFeatures()
    
  3. Now, grab the first feature from the iterator:
    f = features.next()
    
  4. Finally, examine the attributes as a Python list:
    f.attributes()
    
  5. Verify that the Python console's output resembles the following list:
    [u'Alexander Hamilton U.S. Custom House', u'(212) 514-3700', u'http://www.oldnycustomhouse.gov/', u'1 Bowling Grn', NULL, u'New York', 10004.0, -74.013756, 40.703817]
    

How it works...

Examining attributes is consistent with accessing the point values of a layer's geometry. Note that all string attribute values are returned as unicode strings, which is the case for all QGIS strings. Unicode allows the internationalization (that is, translation) of QGIS for other languages besides English.

There's more...

The attribute values don't mean much without the knowledge of what those values represent. You will also need to know the fields. You can get the fields as a list by accessing the fields iterator and calling the name() method for each field. This operation is easily accomplished with a Python list comprehension:

[c.name() for c in f.fields().toList()]

This example returns the following result:

[u'NAME', u'TEL', u'URL', u'ADRESS1', u'ADDRESS2', u'CITY', u'ZIP', u'XCOORD', u'YCOORD']
主站蜘蛛池模板: 饶河县| 庄浪县| 白山市| 澳门| 察隅县| 台北县| 瑞昌市| 定远县| 奎屯市| 红河县| 辽中县| 左贡县| 涿鹿县| 车险| 阳谷县| 永定县| 丹江口市| 玉门市| 岑溪市| 延寿县| 隆化县| 金秀| 蓬溪县| 紫金县| 沿河| 库车县| 盈江县| 肥东县| 江陵县| 重庆市| 长沙县| 仙桃市| 永登县| 棋牌| 吉安县| 钟祥市| 武威市| 宜州市| 马关县| 五华县| 丹东市|