Guys,
This is how it works.
ALL iOS devices have a Location Based Services Manager (LBSM) module in software, designed to tell applications where the device is. The application has NO idea where the operating system gets this information.
In fact, depending on hardware present it can come from 4 sources, and all can be used by iOS at once. iOS then picks the best and reports to the applications. When an app first asks the LBSM for locations, the LBSM looks at several location services at once. Each service can return a Lat/Long and an EPE (Estimated Position Error)
If WiFi is on and attached, the MAC address of the attached hotspot is grabbed and the number sent to Apple. Apple then compares the number to a database that it maintains, with associated Lat/Longs for known MAC addresses. If a high-reliability match is found, the service is send a Lat/Long. The EPE will be about 100 feet.
If cell is on and a network is attached, the CELL_ID of the tower is grabbed and the number sent to Apple. Apple then compares the number to a database that it maintains, with associated Lat/Longs of towers. The service is sent the Lat/Long. The EPE will be 2000 feet to 20 miles, depending on tower density.
If local GPS hardware is found and a data connection is present, the rough Lat/Long and Time-of-day is sent to an Apple server, which returns information the GPS chip can use to find satellites rapidly. This is the so-called 'fast-start' capability of A-GPS. Without an active data connection the time-to-first-fix will be longer.
If GPS is found and a fix is made, the GPS service returns the LAT/Long and EPE to the LBSM.
If external GPS (BT or connector) is found and the EPE is BETTER than that of the internal GPS, or there is no internal GPS, that fix is used.
On devices without hardware GPS, the ONLY thing different is that the hardware GPS service simply returns NO_HARDWARE to the LBSM, and it continues on.
The LBSM continues to use and report the fix with the best EPE available. With or without WiFi, Cell or GPS.