Задача поставлена мутно - «с высокой точностью» это очень размыто.
Стандартный подход
Для начала попробуйте Geolocation API браузера. Для определения города вполне подходит.
https://developer.mozilla.org/ru/docs/Web/API/Geol...
Получите координаты пользователя. Браузер сам разберётся на каком устройстве он работает и выдаст вам координаты с точностью которая зависит от возможностей железа.
Затем получение адреса по координатам - задача обратного геокодирование.
Куча сервисов. Например:
https://dadata.ru/api/geolocate/
Для точности на уровне - определить город, вполне будет работать.