FeatureCollection
# 简介
要素集(FeatureCollection)是PIE-Engine下的矢量数据集对象,对应一份矢量数据,是Feature的一个集合。众多的Feature对象要求具有相同的属性字段,几何图形的坐标系也要相同。PIE-Engine Studio提供要素集相关算法,包括但不限于加载要素集,获取要素集属性信息、几何信息,渲染要素集,要素集内Feature循环计算、要素集指定属性进行聚合统计计算。
# FeatureCollection
函数 | 返回值 |
---|---|
FeatureCollection(args,columns) | FeatureCollection |
参数 | 类型 | 说明 |
---|---|---|
args | String|PIEGeometry|PIEFeature|Array | 矢量数据路径或单个PIEGeomery对象或单个PIEFeature对象或PIEFeature对象Array |
columns | String | 未启用 |
# 示例
featureCollection = pie.FeatureCollection('NGCC/CHINA_PROVINCE_BOUNDARY')
print(featureCollection.getInfo())
# classify
对FeatureCollection中的每个要素进行分类。
函数 | 返回值 |
---|---|
classify(classifier, outputName) | FeatureCollection |
参数 | 类型 | 说明 |
---|---|---|
classifier | RT/SVM/ NormalBayes | 分类器 |
outputName | String | 要添加的输出属性的名称,默认为"classification" |
# 示例
Map = pie.Map()
Map.setCenter(0, 0, 0)
#加载原始矢量和栅格数据
image = pie.Image('user/17090142114/PGDB001/World84').select(["B1", "B2", "B3"])
featureCollection = pie.FeatureCollection('user/17090142114/PGDB001/WorldROI')
#获得训练样本,并且按照7:3分成训练样本和验证样本
sampleFeatureCollection = image.sampleRegions(featureCollection, ["type"], 50000)
sampleFeatureCollection = sampleFeatureCollection.randomColumn('random')
trainingFeatures = sampleFeatureCollection.filter(pie.Filter.lte("random", 0.7))
testingFeatures = sampleFeatureCollection.filter(pie.Filter.gt("random", 0.7))
#构建SVM分类器,并训练数据
classifer = pie.SVM().train(trainingFeatures, "type", ["B1", "B2", "B3"])
#影像分类,并加载显示
resultImage = image.classify(classifer, "classifyA")
visParam = {
'opacity':1,
'uniqueValue':'1,2,3,4',
'palette': 'EAF2F5,000032,1F3600,FAFFC8'
}
Map.addLayer(resultImage, visParam,"ClassifyImage")
#评估训练样本的精度
checkM = classifer.confusionMatrix()
print(checkM.getInfo())
print(checkM.acc().getInfo())
print(checkM.kappa().getInfo())
#评估验证样本的精度
predictResult = testingFeatures.classify(classifer,"classification")
errorM=predictResult.errorMatrix("type","classification")
print(errorM.getInfo())
print(errorM.acc().getInfo())
print(errorM.kappa().getInfo())
Map
# errorMatrix
通过比较FeatureCollection的两列(一列包含实际值,另一列包含预测值),计算FeatureCollection的二维错误矩阵,其中数值从0开始。矩阵的轴0(行)对应于实际值,轴1(列)对应于预测值。
函数 | 返回值 |
---|---|
errorMatrix(actual, predicted, order) | ConfusionMatrix |
参数 | 类型 | 说明 |
---|---|---|
actual | String | 包含实际值的属性的名称 |
predicted | String | 包含预测值的属性的名称 |
order | List | 未启用 |
# 示例
Map = pie.Map()
Map.setCenter(0, 0, 0)
#加载原始矢量和栅格数据
image = pie.Image('user/17090142114/PGDB001/World84').select(["B1", "B2", "B3"])
featureCollection = pie.FeatureCollection('user/17090142114/PGDB001/WorldROI')
#获得训练样本,并且按照7:3分成训练样本和验证样本
sampleFeatureCollection = image.sampleRegions(featureCollection, ["type"], 50000)
sampleFeatureCollection = sampleFeatureCollection.randomColumn('random')
trainingFeatures = sampleFeatureCollection.filter(pie.Filter.lte("random", 0.7))
testingFeatures = sampleFeatureCollection.filter(pie.Filter.gt("random", 0.7))
#构建SVM分类器,并训练数据
classifer = pie.SVM().train(trainingFeatures, "type", ["B1", "B2", "B3"])
#影像分类,并加载显示
resultImage = image.classify(classifer, "classifyA")
visParam = {
'opacity':1,
'uniqueValue':'1,2,3,4',
'palette': 'EAF2F5,000032,1F3600,FAFFC8'
}
Map.addLayer(resultImage, visParam,"ClassifyImage")
#评估训练样本的精度
checkM = classifer.confusionMatrix()
print(checkM.getInfo())
print(checkM.acc().getInfo())
print(checkM.kappa().getInfo())
#评估验证样本的精度
predictResult = testingFeatures.classify(classifer,"classification")
errorM=predictResult.errorMatrix("type","classification")
print(errorM.getInfo())
print(errorM.acc().getInfo())
print(errorM.kappa().getInfo())
Map
# filter
对FeatureCollection对象通过指定过滤器进行过滤,返回过滤后的FeatureCollection对象。
函数 | 返回值 |
---|---|
filter(self, pieFilter) | FeatureCollection |
参数 | 类型 | 说明 |
---|---|---|
pieFilter | JSON | 过滤方法 |
# 示例
featureCollection = pie.FeatureCollection("NGCC/CHINA_PROVINCE_BOUNDARY")
Beijing = featureCollection.filter(pie.Filter.eq('name','北京市'))
print(Beijing.getInfo())
# filterBounds
矢量数据集根据范围过滤。
函数 | 返回值 |
---|---|
filterBounds(geometry) | FeatureCollection |
参数 | 类型 | 说明 |
---|---|---|
geometry | JSON | 矢量数据范围 |
# 示例
geometry = pie.Geometry.Polygon([[
[
117.32231424423242,
31.67739708368279
],
[
117.27770476968334,
31.455679701418802
],
[
117.69777732178011,
31.322396608956836
],
[
117.32231424423242,
31.67739708368279
]
]], None);
featureCollection = pie.FeatureCollection("NGCC/CHINA_PROVINCE_BOUNDARY")
region = featureCollection.filterBounds(geometry)
print(region.getInfo())
Map = pie.Map()
Map.addLayer(pie.Feature(geometry),{'color': "blue"}, "geometry")
Map.addLayer(region,{'color': "red"}, "region")
Map.setCenter(117,31.6,6)
Map
# first
获得FeatureCollection对象中的第一个Feature对象。
函数 | 返回值 |
---|---|
first() | Feature |
# 示例
featureCollection = pie.FeatureCollection("NGCC/CHINA_PROVINCE_BOUNDARY")
f0 = featureCollection.first()
print(f0.getInfo())
# geometries
得到矢量要素的几何形体对象。
函数 | 返回值 |
---|---|
geometries() | Value |
参数 | 类型 | 说明 |
---|---|---|
tolerance | Number | 结果简化距离范围,单位米,默认距离为0,表示不简化 |
# 示例
featureCollection=pie.FeatureCollection("NGCC/CHINA_PROVINCE_BOUNDARY")
geometryList = featureCollection.geometries(2000)
print(geometryList.getString(0))
# get
根据属性名获得FeatureCollection下对应属性值信息。
函数 | 返回值 |
---|---|
get(self, key) | Value |
参数 | 类型 | 说明 |
---|---|---|
key | String | 属性名 |
# 示例
geometry = pie.Geometry.LineString([
[
116.47239746093555,
39.90895451343508
],
[
115.61247314452947,
40.701053532910964
]
], None)
fc = pie.FeatureCollection(geometry)
fc = fc.set("key1",{'name':123})
value = fc.get("key1")
print(value.getInfo())
# getArray
根据属性名获得FeatureCollection下的属性值信息,并且将其转换为数组类型。
函数 | 返回值 |
---|---|
getArray(self, property) | Value |
参数 | 类型 | 说明 |
---|---|---|
property | String | 属性名 |
# 示例
featureCollection = pie.FeatureCollection("user/101/public/shape/Shi_HeBei")
dict = {'key1': [1, 2, 3, 4, 5, 6], 'key2': 12.34, 'key3': "Shanxi"}
featureCollection = featureCollection.setMulti(dict)
value = featureCollection.getArray("key1").getInfo()
print(value)
# getAt
获得FeatureCollection对象中指定编号的Feature对象。
函数 | 返回值 |
---|---|
getAt(index) | Feature |
参数 | 类型 | 说明 |
---|---|---|
index | Number | Feature的编号 |
# 示例
featureCollection = pie.FeatureCollection("NGCC/CHINA_PROVINCE_BOUNDARY")
f0 = featureCollection.getAt(0)
print(f0.getInfo())
# getNumber
根据属性名获得FeatureCollection下的属性值信息,并且将其转换为数值类型。
函数 | 返回值 |
---|---|
getNumber(self, property) | Value |
参数 | 类型 | 说明 |
---|---|---|
property | String | 属性名 |
# 示例
featureCollection = pie.FeatureCollection("user/101/public/shape/Shi_HeBei")
dict = {'key1': [1, 2, 3, 4, 5, 6], 'key2': 12.34, 'key3': "Shanxi"}
featureCollection = featureCollection.setMulti(dict)
value = featureCollection.getNumber("key2").getInfo()
print(value)
# getString
根据属性名获得FeatureCollection下的属性值信息,并且将其转换为字符串类型。
函数 | 返回值 |
---|---|
getString(self, property) | Value |
参数 | 类型 | 说明 |
---|---|---|
property | String | 属性名 |
# 示例
featureCollection = pie.FeatureCollection("user/101/public/shape/Shi_HeBei")
dict = {'key1': [1, 2, 3, 4, 5, 6], 'key2': 12.34, 'key3': "Shanxi"}
featureCollection = featureCollection.setMulti(dict)
value = featureCollection.getString("key3").getInfo()
print(value)
# id
返回FeatureCollection对象的ID。
函数 | 返回值 |
---|---|
id() | Number |
# 示例
featureCollection = pie.FeatureCollection("user/101/public/shape/Shi_HeBei")
id = featureCollection.id().getInfo()
print(id)
# load
FeatureCollection对象加载数据,一般在FeatureCollection初始化的时候会默认调用该方法。
函数 | 返回值 |
---|---|
load(collectionId) | FeatureCollection |
参数 | 类型 | 说明 |
---|---|---|
collectionId | String | 数据路径 |
# 示例
fc = pie.FeatureCollection().load("NGCC/CHINA
# map
针对FeatureCollection中的每个Feature用同一函数进行循环计算。
函数 | 返回值 |
---|---|
map(algorithm, dropNulls) | FeatureCollection |
参数 | 类型 | 说明 |
---|---|---|
algorithm | Function | 参数是Feature的方法,返回Feature |
dropNulls | Boolean | 是否允许返回空值 |
# 示例
featureCollection = pie.FeatureCollection("NGCC/CHINA_PROVINCE_BOUNDARY")
f_buffer = featureCollection.map(lambda feature: feature.buffer(10,None),True)
print(f_buffer.getInfo())
# propertyNames
返回FeatureCollection的属性名称。
函数 | 返回值 |
---|---|
propertyNames() | String |
# 示例
fc = pie.FeatureCollection("NGCC/CHINA_PROVINCE_BOUNDARY")
fc = featureCollection.set("key1", {'name':123})
print(fc.propertyNames().getInfo())
# reduceColumns
FeatureCollection中的所有元素按指定selector中的属性值进行reducer计算,返回一个字典对象。
函数 | 返回值 |
---|---|
reduceColumns(self, reducer, selector, weightSelectors) | Dictionary |
参数 | 类型 | 说明 |
---|---|---|
reducer | Reducer | 统计器,目前仅支持toList统计器 |
selector | Array | 要统计的属性列表 |
weightSelectors | Array | 各个属性的权重,默认为None |
# 示例
featureCollection = pie.FeatureCollection("NGCC/CHINA_PROVINCE_BOUNDARY")
value = featureCollection.reduceColumns(pie.Reducer.toList(2),["name"],None)
print(value.getInfo())
# set
设置FeatureCollection下的指定属性的属性值,如果存在就覆盖更新,如果不存在则直接创建。
函数 | 返回值 |
---|---|
Set(self, key, value) | Void |
参数 | 类型 | 说明 |
---|---|---|
key | String | 属性名 |
value | String|Number|Boolean|Object|List | 属性值 |
# 示例
geometry = pie.Geometry.LineString([
[
116.47239746093555,
39.90895451343508
],
[
115.61247314452947,
40.701053532910964
]
], None)
fc = pie.FeatureCollection(geometry)
fc = fc.set("key1",{'name':123})
print(fc.getInfo())
# setMulti
批量设置FeatureCollection下的属性信息,如果存在就覆盖更新,如果不存在则直接创建。
函数 | 返回值 |
---|---|
setMulti(self, property) | Void |
参数 | 类型 | 说明 |
---|---|---|
property | String | 属性名 |
# 示例
featureCollection = pie.FeatureCollection("user/101/public/shape/Shi_HeBei")
dict = {'key1': [1, 2, 3, 4, 5, 6], 'key2': 12.34, 'key3': "12.34"}
featureCollection = featureCollection.setMulti(dict)
print(featureCollection.getInfo())
# size
获取FeatureCollection对象中PIEFeature的个数。
函数 | 返回值 |
---|---|
size() | Number |
# 示例
featureCollection = pie.FeatureCollection("NGCC/CHINA_PROVINCE_BOUNDARY")
size = featureCollection.size()
print(size.getInfo())
# style
FeatureCollection数据渲染显示,返回渲染绘制后的Image对象。
函数 | 返回值 |
---|---|
style(style) | Image |
参数 | 类型 | 说明 |
---|---|---|
style | JSON | 数据可视化样式,参考示例 |
# 示例
geometry = pie.Geometry.LineString([
[
116.47239746093555,
39.90895451343508
],
[
115.61247314452947,
40.701053532910964
]
], None)
fc = pie.FeatureCollection(geometry).style({'color':'FFFF00FF'})
Map = pie.Map()
Map.addLayer(fc,{},'fc')
Map.setCenter(116,40,8)
Map