Setting Identity Data of Structural Elements Based on Area Plan

I am trying to create schedules in my structural model to calculate things such as rebar quantities, concrete takeoff etc. The footprint of the lower levels is quite large so I need to further breakdown each level into separate zones (E.g. Car Park 1, Car Park 2, Car Park 3, Office Tower, etc). I used an area plan to define the boundaries of each zone since areas can be arbitrary and don’t require being bound by walls. I have added a new project parameter under Identity Data called Zone for all the categories I need to schedule.

So here is my script to set this parameter based on which area the element is in. It worked pretty well for structural columns.

Only issue I did have was with doing all the areas together, so instead I just run the script 4 times changing the input area each time. No problem. Now I want to do the other categories I have listed but for whatever reason, I get a variety of errors for each category and no output at all (Zone parameter doesn’t change).

With rebar, floors and stairs for instance, the Element.GetLocation node just doesn’t put out anything. All null. With framing and foundations, Element.GetLocation works but inconsistently and there are further internal errors with the Intersect node that I didn’t understand.

This is my first ever script and as expected i’m really struggling. How do I get this to work with multiple categories? Is there an easier way of doing this? I’ve actually tried using Rhythm’s Elements.AreaLocation but couldn’t work it out at all. Thanks in advance!