使用反向地理编码获取城市名称和州

时间:2018-04-01 01:51:24

标签: javascript reverse-geocoding geocode weather-api

帮助!我是编码的新手,我刚接触了Free Code Camp的挑战,我需要创建一个使用反向地理编码显示当地天气的网站。我希望页面显示用户所在的城市和州。现在我有经度和纬度,但我不知道如何将其转换为城市和州。这是我到目前为止所拥有的。

if (navigator.geolocation) {
  navigator.geolocation.getCurrentPosition(function(position) {
    var lat = position.coords.latitude;
    var long = position.coords.longitude;
    $("#city").html("latitude: " + lat +"<br>longitude: " + long);
  });
};

我也在另一个Stack Overflow问题上找到了这个答案,但我不知道如何将其纳入以使城市和州自动显示。

var geocoder = new google.maps.Geocoder(),
  latitude = 28.54, //sub in your latitude
  longitude = -81.39, //sub in your longitude
  postal_code,
  city,
  state;
geocoder.geocode({ location: { lat: latitude, lng: longitude } }, function(
  results,
 status
) {
  if (status === google.maps.GeocoderStatus.OK) {
    results.forEach(function(element) {
      element.address_components.forEach(function(element2) {
        element2.types.forEach(function(element3) {
          switch (element3) {
            case "postal_code":
              postal_code = element2.long_name;
              break;
            case "administrative_area_level_1":
              state = element2.long_name;
              break;
            case "locality":
              city = element2.long_name;
              break;
          }
        });
      });
    });
  }
});

3 个答案:

答案 0 :(得分:0)

谢谢你们,我今天做了很多工作,并提出了一个有效的答案。我知道必须有一个比我在那里找到的其他解决方案更简单的解决方案。我使用了免费代码营的API,它们包含在挑战中。

function getLocation () {
  $.getJSON(('https://fcc-weather-api.glitch.me/api/current?lat=' + latitude + 
'&lon=' + longitude), function(loc) {
$("#city").html(loc.name + ", " + loc.sys.country);
  });
};

答案 1 :(得分:0)

对于它的价值,我一直在寻找类似的东西,并且正在尝试https://plus.codes/

如果剥离编码后的位,则会产生一个相当一致的城市,州,国家/地区名称:

const extractCityName = latlng => {
  googleMapsClient.reverseGeocode({ latlng }, (err, response) => {
    if (!err) {
      return response.json.plus_code.compound_code.split(' ').slice(1).join(' ');
    }
  });
};


// examples: 

console.log(extractCityName(40.6599718,-73.9817292));
// New York, NY, USA

console.log(extractCityName(37.386052, -122.083851));
// Mountain View, CA, USA

console.log(extractCityName(51.507351, -0.127758));
// Westminster, London, UK

答案 2 :(得分:-1)

如果您想要点击该点,请找到您已经知道的经度和纬度。

如果要根据已知的经度和纬度获得相应的状态,则需要知道每个状态的纬度和经度范围,然后使用此范围来确定。获取方法也是如此。一个城市。