You might want to use nearby cell towers and wifi base stations to establish the position of the vehicle. As mentioned in a previous answer, SkyHook provides this kind of service, and both major smartphone platforms (Android and iOS) have this capability built in. (As for Android, it is part of the proprietary Google package, and not in the open-source AOSP code). Non-commercial implementations of such services include Mozilla Location Service, OpenCellID and OpenBmap.
Bear in mind the constraints of these services:
- Cell towers are typically from a few hundred meters to a few kilometers away from each other. Even with multiple nearby cell towers as reference, your location estimate will have an accuracy in the 100m range, that is, around 30 times the width of one lane.
- Wifis are typically dense in urban areas (where GPS reception is hampered), which would make it a good complement to GPS. However, wifis may move and become unreliable for position estimates.
- Ultimately, most of the underlying data was collected using GPS as a reference. A sufficiently high number of samples will eliminate random errors, but the results are still prone to systematic error. This is somewhat less of an issue with cell tower locations obtained from commercial providers, as they may obtained these locations directly from the carriers rather than through measurements.
- Wifi data is frequently biased, as surveyors typically just get within a few meters on one or two sides of the building in which they are located. Thus, in the raw data, wifis in a residential area will appear to be on the road rather than in the buildings.
In conclusion, you do not want to drop GPS altogether. A better approach would be to fuse position readings from both sources, giving higher weight to more accurate estimates. Also, getting one of the more recent receivers, which rely not only on GPS but also GLONASS and Beidou (its Russian and Chinese counterparts), will somewhat mitigate the precision and availability issues of older GPS-only receivers. Also, as mentioned in another answer, make sure you get a good signal and minimize interference – a roof antenna will give you better results than the internal antenna of the GPS receiver.
Inertial navigation using sensors may help you to further refine position estimates. The sensors found in most consumer devices (smartphones and tablets) are notoriously inaccurate. If you want to equip a fleet with tracking technology, sensors which are mounted in the vehicle and properly calibrated will give you more accurate results.
- A magnetic compass will give you the bearing of the vehicle. It can be complemented with a gyroscope to reduce inaccuracies caused by stray magnetic fields. You might also be able to find an inertial compass which incorporates both in one device.
- As an alternative, you could also use a combination of GPS bearing and gyroscope.
- To get speed (and possibly other vehicle parameters), the easiest way is to get an OBD dongle in the vehicle and read from that. These devices simply plug into the existing OBD port of the vehicle and are typically accessed via Bluetooth, a serial connection or USB.
Having somewhat accurate values for speed and bearing, you can then extrapolate from the last known position.
Still, inertial navigation is prone to error (which accumulates over time), thus you'll want to fuse it with data from the "primary" location sources or use it to fill in the gaps when nothing else is available.
All of this will still give you GPS-grade accuracy. A good GPS under decent conditions will be accurate to about 1 or 2 lane widths. YMMV and will certainly be less favorable in densely built-up areas. If you need accuracy down to the lane the vehicle is on, you will need to install a camera (or even multiple ones), use pattern recognition to detect lane markings, and from that infer which lane the vehicle is on.