javascript 从纬度和经度获取国家

6mzjoqzu  于 2023-01-16  发布在  Java
关注(0)|答案(7)|浏览(502)

我想知道如何使用JavaScript从纬度和经度获取国家名称。我可以使用谷歌Map的JavaScript API。我也可以获取城市和邮编吗?

**编辑:**我的目的是自动填充地址字段,而不是在Map上显示。

bxpogfeg

bxpogfeg1#

我不知道它是否能与谷歌Map一起工作,但有一个网络服务可以返回国家代码,并将纬度和经度作为参数。
下面是一个例子:
http://api.geonames.org/countryCodeJSON?lat=49.03&lng=10.2&username=demo
返回JSON数据:{"languages":"de","distance":"0","countryCode":"DE","countryName":"Germany"}
我还发现了一点描述:
任何给定点的iso国家代码。

  • Web服务类型:休息
  • 网址:ws.geonames.org/countryCode?
  • 参数:latlngtypelangradius(沿海地区最近国家的缓冲区,单位为公里)
  • 结果:返回给定纬度/经度的iso国家代码

使用参数type=xml,此服务返回一个包含iso国家代码和国家名称的xml文档。可选参数lang可用于指定国家名称应使用的语言。JSON输出使用type=JSON生成
参见文档

    • 编辑:**请注意,demo只是一个演示用户,您应该在http://www.geonames.org/login上创建一个用户帐户才能使用该服务。
hmae6n7t

hmae6n7t2#

Google Geocoding API以JSON格式提供这些结果。它有一个免费层,但您需要为无限制的API请求付费。
请求的API链接如下所示:

'https://maps.googleapis.com/maps/api/geocode/json?latlng=11.2742848,75.8013801&key=YOUR_API_KEY_HERE'
kmpatx3s

kmpatx3s3#

如果需要自包含库(即,无服务器/ Internet连接且速度快),并且仅需要国家/地区信息,则以下基于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调用,code是latlng的国家代码。

z3yyvxxp

z3yyvxxp4#

<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>
n8ghc7c1

n8ghc7c15#

是的,你可以使用谷歌Map找到给定纬度和经度的国家。使用反向地理编码服务。
您可以从服务器的响应中获取国家、城市、邮政编码和完整地址。有关详细信息,请查看链接中的示例;)

3htmauhk

3htmauhk6#

如果你使用golang,你可以使用这两个库中的一个来获取国家,你甚至不需要调用API,因为数据集是内置的,所以它是无限的。
https://github.com/SocialHarvest/geobed
https://github.com/bradfitz/latlong

wkftcu5l

wkftcu5l7#

您可以使用以下工具:https://www.weatherapi.com/免费。
我的演示是在React和一步一步,但你可以做任何你想要的方式,关键是这个天气API,它接受LON和LAT作为字符串产生城市和天气信息-〉https://api.weatherapi.com/v1/forecast.json?key=YOUR-KEY&q=LATITUDE,LONGITUDE&days=1&aqi=no&alerts=n
注意:您将生成您自己的密钥,通过注册
为此,您将需要4个状态:

const [userAllowedLocation, setUserAllowedLocation] = useState(true);
const [latitude, setLatitude] = useState("");
const [longitude, setLongitude] = useState("");
const [city, setCity] = useState("");

获取Lat和Lon +弹出
首先:通过使用此代码并将状态设置为纬度和经度,请求用户访问“位置”(这将有一个弹出窗口)。

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/ API获取City和其他Intel,基于Lat和Lon
API如下所示:https://api.weatherapi.com/v1/forecast.json?key=3e5e13fac8354c818de152831211305&q=53.3498053,-6.2603097&days=1&aqi=no&alerts=n
API及说明:https://api.weatherapi.com/v1/forecast.json?key=3e5e13fac8354c818de152831211305&q=LATITUDE,LONGITUDE&days=1&aqi=no&alerts=n
现在用纬度和经度调用这个API来获取位置数据,包括城市。我使用useEffect作为触发器,所以一旦我得到纬度的信息,我就使用axios调用API,并将City state设置为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"
},

相关问题