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

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']
主站蜘蛛池模板: 黄梅县| 平昌县| 林芝县| 通河县| 玛沁县| 荣成市| 贵溪市| 扎鲁特旗| 东台市| 兰溪市| 盘山县| 稻城县| 西乌珠穆沁旗| 金平| 洞口县| 湘潭县| 马公市| 金溪县| 全椒县| 青神县| 班戈县| 漾濞| 阜城县| 剑阁县| 延边| 抚顺市| 江山市| 江都市| 凤凰县| 电白县| 延津县| 潮州市| 金门县| 威远县| 独山县| 瓮安县| 马山县| 无为县| 四子王旗| 治多县| 莆田市|