Back to Avenue Source Code Home

'--------------------------------
'Name: shpupdtarpr.bat
'Date: 1-25-01
'
' prompts the user for multiple shapefiles on disk
'
' inserts the following fields into the shapefile
' on disk and populates with the following information:
' (1) numeric field named 'area_m2'
'     area (meters^2) of each polygon
' (2) numeric field named 'area_ha'
'     area (hectares) of each polygon
' (3) numeric field named 'perim_m'
'     perimeter (meters) of each polygon
'
' WARNING: assumes all shapefile units are meters
'
'Returns:
'None
'
'Called By:
'MANY
'
'Calls:
'NONE
'
'Arguments:
'None
'---------------------------------

MsgBox.Report("shpupdtarpr.bat" + NL +
              "1. prompts the user for multiple shapefiles on disk" + NL +
              "2. inserts the following fields into the shapefile" + NL +
              "   on disk and populates with the following information:" + NL +
              "   (1) numeric field named 'area_m2':" + NL +
              "       area (meters^2) of each polygon" + NL +
              "   (2) numeric field named 'area_ha'" + NL +
              "       area (hectares) of each polygon" + NL +
              "   (3) numeric field named 'perim_m'" + NL +
              "       perimeter (meters) of each polygon", "About Script....")
              
'---------------------------------------------
'retrieve FileNames of shapefiles to process
'---------------------------------------------
theFileNameList = FileDialog.ReturnFiles({"*.shp"}, {"ShapeFiles(*.shp)"}, "Select Shapefiles To Update Area And Perimeter Attributes", 0)
if ( theFileNameList.Count = 0 ) then
  return NIL
end

'---------------------------------
'make SrcNames from FileNames
'---------------------------------
theSrcNameList = List.Make
for each fname in theFileNameList
  theSrcName = SrcName.Make(fname.AsString)
  if ( theSrcName <> NIL ) then
    theSrcNameList.Add(theSrcName)
  end
end

'----------------------------------------------------
'add fields to each src name and update attributes
'----------------------------------------------------
for each sn in theSrcNameList
  theTheme = Theme.Make(sn)
  if ( theTheme = NIL ) then
    continue
  end
  theFTab = theTheme.GetFTab
  if ( theFTab = NIL ) then
    continue
  end
  if ( theFTab.CanEdit = FALSE ) then
    MsgBox.Warning("Cannot edit the attributes of theme: " + theTheme.GetName, "Warning")
    continue
  end
  theFTab.SetEditable(TRUE)
  the_area_m2_Field = Field.Make("area_m2", #FIELD_DOUBLE, 16, 2)
  the_area_ha_Field = Field.Make("area_ha", #FIELD_DOUBLE, 16, 2)
  the_perim_m_Field = Field.Make("perim_m", #FIELD_DOUBLE, 16, 2)
  theFTab.AddFields({the_area_m2_Field, the_area_ha_Field, the_perim_m_Field})
  theFTab.Calculate("[Shape].ReturnArea", the_area_m2_Field)
  theFTab.Flush
  theFTab.Calculate("[area_m2] * 0.0001 ", the_area_ha_Field)
  theFTab.Flush
  theFTab.Calculate("[Shape].ReturnLength", the_perim_m_Field)
  theFTab.Flush
  theFTab.SetEditable(FALSE)  
end

av.PurgeObjects

return NIL



Last Updated: Marco Morais