c语言中if循环语句,c语言if循环用法
此代码用于附加了网格像素数的多边形数据。例如,如果格网是土地覆被,则每种土地覆被类型都有一列,每个面中都有相应数量的像素。这个输出来自地理建模环境,因为选项卡网格破坏了我使用的大形状文件。最后我要的是面积值而不是单元格个数,用下面的代码就可以实现。
因此,代码将遍历shapefile属性,提取原始计数字段,然后根据用户输入创建一个新字段。使用用户输入名称网格值在AddField中循环,以获取新的字段名称。然后遍历原始字段的值,并计算新字段的用户指定的面积值。本质上,我试图自动化“添加字段”和“计算字段”模型,它们通常由模型开发人员进行批处理。
我费了好大劲才弄清楚计算新字段的正确逻辑。正如我刚刚写的,我使用for循环来获取原始字段,但是最后只使用了最后一个原始字段值,并且只输入了最后一个新字段。您必须循环获取第一个原始字段,并将其放在适当的新字段中。示例:
If origFields=(NLCDV1 , NLCDV2 。)和addedFields=(KM2_LC1 , KM2_LC2 。),addField计算以适当的值结束。km2 NLCDV1!*单位(KM2_LC2=)=换算(换算(!NLCDV2!*单位),同样,对于所有可能的值。
# user inputs desired final units,loopthrough to find the desired units and calculates the new fields .
unit=arcpy . getparameterastext(7)#必须是:平方米,平方公里,英亩,公顷,平方英里或平方英尺.
# usermustnoworiginalunitsofraster,必须以米或英尺为单位!
对于原始字段中的字段:
如果rastunit==米:
# tomakesquaremetersfinalareaunit .
if unit==SqMeter :
arcpy . calculate field _ management(输入池,添加字段,变换, PYTHON_9.3 ))
# to convertssquaremetersintosquarekilometers .
elif unit==SqKm :
arcpy . calculate field _ management(输入池,addField,转换sqmsqkm, PYTHON_9.3 ))
# to convertssquaremetersintoacres .
elif单位==英亩:
arcpy . calculate field _ management(输入池,addField,转换sqmac, PYTHON_9.3 ))
# to convertssquaremetersintohectares .
elif单位==公顷:
arcpy . calculate field _ management(输入池,addField,转换sqmhec, PYTHON_9.3 ))
# to convertpsquaremetersintosquaremiles .
elif unit==SqMi :
arcpy . calculate field _ management(输入池,addField,转换sqmsqmi, PYTHON_9.3 ))
# to convertssquaremetersintosquarefeet .
elif unit==SqFt :
arcpy . calculate field _ management(输入池,添加字段,转换sqmsqft, PYTHON_9.3 ))
否则:
printarcpy.add警告( ineligibleunitprovided。)
elif rastunit==Foot_US :
#以平方英尺作为最终面积单位.
if unit==SqFt :
arcpy . calculate field _ management(输入池,添加字段,变换, PYTHON_9.3 ))
否则:
print thirasterhasteshe下列单位: rast单位。如果没有,请重新投影光栅。
只需解释如何让相应的原始字段与新添加的字段相匹配。我们正在考虑使用定向字段(zip)、添加字段、调用(calcs)等。我这样做,它给我以下输出:
(uNLCDV1 , KM2_LC1 ,!NLCDV1!* 900.0 )
(uNLCDV2 , KM2_LC2 ,!NLCDV2!* 900.0 )
(uNLCDV3 , KM2_LC3 ,!NLCDV3!* 900.0 )
(uNLCDV4 , KM2_LC4 ,!NLCDV4!* 900.0 )
(uNLCDV5 , KM2_LC5 ,!NLCDV5!* 900.0 )
(uNLCDV7 , KM2_LC7 ,!NLCDV7!* 900.0 )
(uNLCDV8 , KM2_LC8 ,!NLCDV8!* 900.0 )
(uNLCDV9 , KM2_LC9 ,!NLCDV9!* 900.0 )
这些行是我需要的,但我不知道这样的输出是否可以用于输入字段。就算能用,也不知道是python还是zip,所以不知道怎么用。
感谢逻辑支持。欢迎您对清洁/分类提出建议。就像我说的,当这一切结束后,我还是个初学者。如果能顺理成章,我会很开心!谢谢你的确认。如果我的代码太复杂,我很抱歉(在这种情况下,请不要感到惊讶)。
解决办法
我不知道我是否还理解你的要求,但它可能是有用的:
Origfields=(uNLCdv1 ,uNLCDV2 ,uNLCDV3 ))
addedFields=(KM2_LC1 , KM2_LC2 , KM2_LC3 )
calcs=()!NLCDV1!* 900.0 ,!NLCDV2!* 900.0 ,!NLCDV3!* 900.0 )
对于orig、added、calcinzip(Origfields、addedFields、calcs):
打印“{ 0!r}、{!r}、{!r}”。格式(原始,添加,计算).
输出:
uNLCDV1 , KM2_LC1 ,!NLCDV1!* 900.0
uNLCDV2 , KM2_LC2 ,!NLCDV2!* 900.0
uNLCDV3 , KM2_LC3 ,!NLCDV3!* 900.0