Получить страну от широты долготы

Я хотел бы знать, как я могу получить название страны по широте и долготе, используя 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;amp;q=ШИРОТА,ДОЛГОТА&amp;amp;days=1&amp;amp;aqi=no&amp;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;amp;q=53.3498053,-6.2603097&amp;amp;days=1&amp;amp;aqi=no&amp;amp;alerts=n

API с объяснением: https://api.weatherapi.com/v1/forecast.json?key=3e5e13fac8354c818de152831211305&amp;amp;q=ШИРОТА,ДОЛГОТА&amp;amp;days=1&amp;amp;aqi=no&amp;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, так как набор данных встроен, поэтому он неограничен.

https://github.com/SocialHarvest/geobed

https://github.com/bradfitz/latlong

Другие вопросы по тегам