Location/Elevation tracking project

My team and I are working on creating portable lights that can be tracked (both location and elevation, as they will be used on construction sites where buildings may span multiple floors and foremen need to know which floor the device was last seen on). We want to transmit this data in real time to an iOS app so that workers have access to a map of all the devices at any given time. One specific concern we've been discussing is interference with powering the Arduino/transmitting data when workers turn lights off and move them to a new location (i.e. location will no longer be accurate).

We already have an Arduino Uno, but in general are pretty new to Arduino products so if anyone has advice or feedback on the feasibility/execution of this feature, that would be great! We need an idea of what type of add-ons or additional hardware would need to be purchased to implement the functionality described above. Thanks!

How do you plan to determine location and elevation?

GPS generally does not work indoors, and elevation accuracy (even out of doors) is usually not high enough to determine building floor level.

Barometers can be used for elevation but it will drift in long term.

Barometers drift because air pressure change as High and Low pressure systems move thru. So it can be different as the system moves 50 miles.

I don't have any good ideas for tracking things at a construction site. GPS with access to windows could work, if the space is open enough. As it closes up getting sufficient signal may be hard. And with only meters of accuracy available, floor differentation could be tough.