Получить страну от широты долготы
Я хотел бы знать, как я могу получить название страны по широте и долготе, используя JavaScript. Я открыт для использования JavaScript API Карт Google. Могу ли я получить город и почтовый индекс?
Редактировать: Моя цель - заполнить поле адреса автоматически, а не отображать его на карте.
8 ответов
Я не знаю, работает ли он с Google Maps, но есть веб-сервис, который возвращает код страны и принимает в качестве параметров lat и long.
Вот пример:
http://api.geonames.org/countryCodeJSON?lat=49.03&lng=10.2&username=demo
Возвращает данные JSON:{"languages":"de","distance":"0","countryCode":"DE","countryName":"Germany"}
Я также нашел небольшое описание:
Код страны iso любой данной точки.
- Тип веб-сервиса: REST
- Адрес:
ws.geonames.org/countryCode?
- Параметры:
lat
,lng
,type
,lang
,radius
(буфер в км для ближайшей страны в прибрежных районах)- Результат: возвращает код страны iso для данной широты / долготы
С параметром
type=xml
Этот сервис возвращает XML-документ с ISO-кодом страны и названием страны. Необязательный параметр lang может использоваться для указания языка, на котором должно быть название страны. Вывод JSON производится сtype=JSON
Посмотреть документы
Изменить: обратите внимание, что demo
это просто демонстрационный пользователь, и вы должны создать учетную запись пользователя по адресу http://www.geonames.org/login для того, чтобы использовать сервис.
Google Geocoding API предоставляет эти результаты в формате JSON. Это бесплатно, но вам может потребоваться оплатить неограниченный доступ.
Попробуйте ссылку ниже
http://maps.googleapis.com/maps/api/geocode/json?latlng=11.2742848,75.8013801
Если желательна автономная библиотека (т. Е. Нет соединения с сервером / интернетом и требуется быстрая) и требуется только информация о стране, может пригодиться следующая библиотека, основанная на данных openstreetmap - https://github.com/hlaw/codegrid-js
<script type="text/javascript" src="[path]/codegrid.js"></script>
grid = codegrid.CodeGrid(); // initialize
grid.getCode (lat, lng, function (err, code) { ... });
Обратный вызов вызывается с code
, код страны для лат.
<form id="form1" runat="server">
<div>
<script type="text/javascript" src="http://j.maxmind.com/app/geoip.js" ></script>
<br />Country Code:
<script type="text/javascript">document.write(geoip_country_code());</script>
<br />Country Name:
<script type="text/javascript">document.write(geoip_country_name());</script>
<br />City:
<script type="text/javascript">document.write(geoip_city());</script>
<br />Region:
<script type="text/javascript">document.write(geoip_region());</script>
<br />Region Name:
<script type="text/javascript">document.write(geoip_region_name());</script>
<br />Latitude:
<script type="text/javascript">document.write(geoip_latitude());</script>
<br />Longitude:
<script type="text/javascript">document.write(geoip_longitude());</script>
<br />Postal Code:
<script type="text/javascript">document.write(geoip_postal_code());</script>
</div>
</form>
Да, вы можете использовать карты Google, чтобы найти страну для данных широт и долгот. Используйте сервис обратного геокодирования.
Вы можете получить страну, город, почтовый индекс и полный адрес из ответа, полученного с сервера. Проверьте пример по ссылке для деталей;)
Если вам нужна информация о стране только на основе координат (широта, долгота), вы можете использовать npm-пакет координат_то_страны . Таким образом, вам не нужно создавать какой-либо API. Он основан на границах страны OSM.
В противном случае, если вам нужна дополнительная информация о местоположении (город, адрес, район и т. д.), вы можете изучить различные API геокодирования, такие как:
Вы можете сделать это с помощью: БЕСПЛАТНО.
Моя демонстрация в React и шаг за шагом, но вы можете сделать это любым способом, который вы хотите, ключом является этот Weather API, который принимает LON и LAT в виде строки для получения информации о городе и погоде -> https://api . Weatherapi.com/v1/forecast.json?key=ВАШ-КЛЮЧ&amp;q=ШИРОТА,ДОЛГОТА&amp;days=1&amp;aqi=no&amp;alerts=n
Примечание: вы должны сгенерировать СВОЙ СОБСТВЕННЫЙ КЛЮЧ, зарегистрировавшись
Для этого вам понадобятся 4 состояния:
const [userAllowedLocation, setUserAllowedLocation] = useState(true);
const [latitude, setLatitude] = useState("");
const [longitude, setLongitude] = useState("");
const [city, setCity] = useState("");
получить широту и долготу + всплывающее окно
Во-первых: запросите доступ к «местоположению» у пользователя (у этого будет всплывающее окно), используя этот код, и установите для состояния широту и долготу.
useEffect(() => {
function getPosition() {
const successCallback = (position) => {
console.log(position);
setLatitude(position.coords.latitude);
setLongitude(position.coords.longitude);
setUserAllowedLocation(true);
};
const errorCallback = (error) => {
setUserAllowedLocation(false);
console.log(error);
};
navigator.geolocation.getCurrentPosition(successCallback, errorCallback);
}
getPosition();
}, []);
Выбрать город/страну на основе широты и долготы:
Во-вторых, используйте https://www.weatherapi.com/https://www.weatherapi.com/ API, чтобы получить город и другую информацию, основанную на широте и долготе.
API выглядит так: https://api.weatherapi.com/v1/forecast.json?key=3e5e13fac8354c818de152831211305&amp;q=53.3498053,-6.2603097&amp;days=1&amp;aqi=no&amp;alerts=n
API с объяснением: https://api.weatherapi.com/v1/forecast.json?key=3e5e13fac8354c818de152831211305&amp;q=ШИРОТА,ДОЛГОТА&amp;days=1&amp;aqi=no&amp;alerts=n
Теперь вызовите этот API с широтой и долготой, чтобы получить данные о местоположении, включая город. Я использую useEffect в качестве триггера, поэтому, как только я получаю информацию о Latitude, я вызываю API с помощью axios и устанавливаю состояние города на то, что когда-либо выходит из объекта API.
useEffect(() => {
if (latitude === "" || longitude === "") { // this is to stop fetching data on component mount, cause we have no Latitude and Longitude YET
return;
}
async function getWeather() {
let res = await axios.get(
`https://api.weatherapi.com/v1/forecast.json?key=3e5e13fac8354c818de152831211305&q=${latitude},${longitude}&days=1&aqi=no&alerts=no`
);
console.log(res.data);
console.log(res.data.location.name);
setCity(res.data.location.name);
}
getWeather();
}, [latitude, longitude]);
Вот видео на моем канале YouTube, где вы можете увидеть демонстрацию этого: https://youtu.be/gxcG8V3Fpbk
РЕЗУЛЬТАТ от API:
"location": {
"name": "Dublin",
"region": "Dublin",
"country": "Ireland",
"lat": 53.35,
"lon": -6.26,
"tz_id": "Europe/Dublin",
"localtime_epoch": 1673737376,
"localtime": "2023-01-14 23:02"
},
Если вы используете golang, вы можете использовать одну из этих двух библиотек, чтобы получить страну, и вам даже не нужно совершать вызов API, так как набор данных встроен, поэтому он неограничен.