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

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']
主站蜘蛛池模板: 阳山县| 合阳县| 内江市| 章丘市| 榆林市| 仙桃市| 卢氏县| 东平县| 临沂市| 靖江市| 卓尼县| 鸡泽县| 白水县| 富宁县| 罗田县| 托克托县| 呈贡县| 庆元县| 天峻县| 齐河县| 拉萨市| 新田县| 视频| 从江县| 贺兰县| 驻马店市| 兴城市| 银川市| 黄山市| 沈丘县| 碌曲县| 莎车县| 柞水县| 剑阁县| 庄浪县| 永定县| 定结县| 乃东县| 霍山县| 康平县| 彩票|