createProvider()用以创建一个dataprovider实例,实现函数时new一个自定义的dataprovider对象,然后返回即可
decodeUri()解析uri字符串,并以map结构返回解析后的数据,QGis提供了QgsDataSourceUri类,某些情况下可以直接使用QgsDataSourceUri类解析和生成uri字符串,省去了自己解析字符串的 *** 作。参考postgresprovider的uri: dbname='sdetest' host=127.0.0.1 port=5432 user='sde' password='123' table="sde"."testlayer" (shape)。如果不用QgsDataSourceUri类,也可自定义字符串格式并自行解析。
同理,encodeUri的实现也可以借助QgsDataSourceUri类生成uri字符串。
QgsTestProvider重载QgsVectorDataProvider的纯虚函数:
重载QgsDataProvider的纯虚函数:
featureSource()返回自定义的QgsTestFeatureSource对象即可,QgsTestFeatureSource继承自QgsAbstractFeatureSource
getFeatures()返回一个迭代器,通过该迭代器遍历features,同样也需要新建类QgsTestFeatureIterator继承自QgsAbstractFeatureIteratorFromSource<QgsTestFeatureSource>
wkbType()返回feature的类型,该类型为qgswkbtypes.h中QgsWkbTypes::Type枚举。在自定义Provider中定义一个私有变量存放该类型,则返回该变量值即可。
返回要素数量。
fields()返回属性字段,QGis提供了一个QgsFields类去储存属性字段,可以在provider内定义一个该类对象为成员变量,fields()直接返回该对象即可
QgsFields提供append函数添加属性字段,每个字段的具体数据由QgsField对象持有。
crs()返回坐标参考系
extent()返回图层的范围,将读取到的数据以QgsRectangle对象返回,这里以一个成员变量mExtent储存数据。
isValid()返回该图层是否有效。返回自定义的成员变量即可
name()返回provider的key
description()返回provider描述
getFeatures()返回QgsFeatureIterator对象, 通过QgsFeatureIterator( QgsAbstractFeatureIterator *iter SIP_TRANSFER )构造函数创建一个有效的迭代器,构造函数实参传入自定义的FeatureIterator。
rewind()将迭代器重置到起始位置,在QgsTestFeatureIterator中定义成员变量mIterator用以遍历feature,mIterator类型可以根据储存feature的数据结构确定,以QList为例,则定义为:QList<QgsFeature>::iterator mIterator
mClosed变量为父类QgsAbstractFeatureIterator的成员变量,当迭代器关闭时,该变量应置为true。
close()用以关闭迭代器,函数体内直接调用父类QgsAbstractFeatureIteratorFromSource的iteratorClosed()即可
查看QgsAbstractFeatureIteratorFromSource::iteratorClosed()源码可知,其也是直接调用QgsAbstractFeatureSource的iteratorClosed()函数
fetchFeature()获取下一个feature,内部实现也是通过mIterator迭代,将获得的feature赋值给形参feature。
arcgis批量给一字段赋值步骤如下:
1、如图,在Arcmap的一个图层中,画了几个图形。
2、右击图层park名称,选择open attribute table。
3、在table表中,这里还有两列是空的,所属地区和代码。
4、现在我们将这六个图形的所属地区全部赋予一个值。右击所属地区,选择field calculator。
5、然后在field calculator下写上代码,如果是汉字的话,一定要记得加上英文输入法下的引号。
6、点击OK,回到table表中,这时候所属地区那一列已经全部被赋值为滨江新区了。
7、如果是纯数字的,就不需要加引号了,比如在代码的field calculator下直接输入数字。
8、点击OK之后回到table表中,这个代码已经全部被赋值了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)