Я работаю над приложением React, и мне нужно получить коды стран ISO 3166 на основе широты и долготы. Я хочу использовать эти коды стран в API OpenWeather.
В настоящее время у меня есть специальный крючок useGeoLocation, который предоставляет мне координаты широты и долготы. Вот код:
// useGeoLocation.js
import { useEffect, useState } from "react";
const useGeoLocation = () => {
const [location, setLocation] = useState({
loaded: false,
coordinates: { lat: "", lng: "" },
});
const onSuccess = (location) => {
setLocation({
loaded: true,
coordinates: {
lat: location.coords.latitude,
lng: location.coords.longitude,
},
});
};
const onError = (error) => {
setLocation({
loaded: true,
error,
});
};
useEffect(() => {
if (!("geolocation" in navigator)) {
onError({
code: 0,
message: "Geolocation not supported",
});
}
navigator.geolocation.getCurrentPosition(onSuccess, onError);
}, []);
return location;
};
экспортировать useGeoLocation по умолчанию;
Я хотел бы знать, есть ли какие-либо альтернативные решения для получения кодов стран ISO 3166, не полагаясь на внешние API, такие как API геокодирования Google Maps. Существуют ли какие-либо автономные базы данных или сторонние библиотеки, которые могут помочь с обратным геокодированием?
Любые предложения или рекомендации будут с благодарностью приняты. Спасибо!
«Я хочу использовать эти коды стран в API OpenWeather» — зачем именно? Поскольку API уже может принимать широту и длину в качестве параметров, я не уверен, для чего вам нужен код страны. Или какой код страны вы бы вообще ожидали получить, если бы я использовал ваше приложение на круизном лайнере посреди океана...?
Чтобы получить код страны, вы можете легко найти набор данных (csv/json) в Google с кодом страны и широтой/долготой. Затем в вашем приложении:
Надеюсь, это вам поможет.
Спасибо, что нашли время ответить на мой вопрос. Ваше объяснение расчета геохеша для координат пользователя и сопоставления его с индексированным набором данных было ясным и полезным.
Вы можете посмотреть номинатим , это FOSS, основанный на данных OpenStretMap.