If you want to do it correctly, get with your local 911 administrator. Caller ID has nothing to do with 911. When a phone calls 911 and the PSAP (911 Center) answers, there is a tone sent to one of the 911 servers in the US, which replies to the PSAP and populates the calltakers position with name, number, and location. The 911 server contains the 911 datatbase which is constantly being updated.
Because the 911 database has the LDN listed for an address using a PBX and PRI, it will allways give the listed number from any phone called from that PBX, even if it's an OPX or remote voip user.
The proper procedure is to get with your local phone company 911 group and request a login to the 911 database. At that point you will fill out a spread sheet of every DID number and it's office number, address, etc. After the initial database is input, you will constantly update the database with changes, i.e. a phone moves to a different floor, building, or location.
Next, you will program your system using the ERL features. That will enable a phone calling 911 to be routed to trunks you have programmed as ERL trunks, which will be used for 911 calls.
That way when Joe Blow is having a heart attack in his basement office at the annex a block away and calls 911,
the 911 center will send the ambulance to the basement at the annex a block away, instead of the front desk at the main location.