Many people ask why and how Maps get their location wrong so I decided to write an answer just once to point everyone to:
Maps (like other GNOME components) simply uses a system service called Geoclue to fetch your location. Geoclue uses the following means to find your location:
Geo-IP: It asks Mozilla Location Service (MLS for short) to get your location given your (external) IP address. This is typically only accurate to city-level. Although not very reliable othewise, this method almost always yields a result that is not way too wrong. The best thing about this method is that it works for every hardware that is connected to internet.
3G modems: Geoclue uses ModemManager to talk to modem to try to locate you through it. Most modems have GPS these days and geoclue can make use of that so if you have a modem, there is very good chances of getting your exact location. Geoclue also fetches your location from MLS based on the cell tower your modem is connected to, in case GPS can't get the lock or app only requested neighbourhood-level location.
WiFi: This is typically the best for laptops since most people don't have a modem on their laptops. This is also much more accurate source compared to geoip. For this also, Geoclue makes use of MLS.
When geoclue gets your location wrong, you have a very good chance of correcting that yourself if you have wifi or 3G modem on your machine (dongles would work too) using Mozstumbler app on your android phone.