Звонок requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 200.0f, this);
просит обновляться не чаще, чем раз в 1000 мс, когда местоположение из GPS изменяется на более чем 200,0 метров с момента последнего обновления. Если вам нужна более высокая точность, попробуйте уменьшить эти числа.
Тем не менее, вы не должны быть на 80 км. Вы тестируете это снаружи с ясным видом на небо?
Я думаю, что проблема в округлении. Вы используете new GeoPoint((int) lat * 1000000, (int) lng * 1000000);
, но вместо этого делаете это:
new GeoPoint((int) (lat * 1e6), (int) (lng * 1e6));
Разница в том, что двойные значения были преобразованы в целые числа перед умножением. Таким образом, умножение происходит впоследствии, и поэтому после десятичной точки сохраняются цифры.