Google Maps API - JavaScript:查找给定LatLng的高程

时间:2017-03-20 17:40:15

标签: javascript google-maps google-maps-api-3

任何人都可以看到我的功能有任何问题吗? 我这样调用函数:

 var elevation = getElevation(tempWaypt);

tempWaypt是一个LatLng对象文字,它一直告诉我

 elevation

未定义!

 function getElevation(location) {
            elevator.getElevationForLocations({
                'locations': [location]
              }, function(results, status) {
                        if (status === 'OK')
                        {
                            if (results[0])
                            {
                                  return results[0].elevation;
                            }
                        }
                  });
            }

我正在使用该功能来确定LatLng是在陆地上还是在海上! 此外,当我在getElevation函数中设置一个等于的变量时:

 results[0].elevation

它给了我正确的答案

2 个答案:

答案 0 :(得分:0)

很多Google Maps API服务都是异步的。如果您想访问结果,可以使用但不限于以下方式或使用Promise。

var elevation;
function getElevation(location) {
    ..., function(results, status) {
      ...
      if (results[0]) {
         elevation = results[0];
      }
  ...
}

使用承诺



getElevation.then(function(elevation){
  console.log("Elevation: " + elevation); 
});

function getElevation(location) {
  return new Promise(function(resolve, reject) {
    //...
    function(results, status) {
      //...
      if (results[0]) {
         resolve(results[0]);
      } else {
        reject('Your reason ...');
      }
    //...
  }
}




答案 1 :(得分:0)

海拔可能是一个棘手的方法,可以确定一个点是在水面还是在陆地上,因为地球上有许多干燥的地方存在于海平面或海平面以下。您可能希望使用专门处理水的数据源获得更多显式答案。

我为一家提供免费网络API的公司工作,以确定积分是在水上还是在陆地上。我们在内部使用它。它被称为onwater.io并且相当直接:给定纬度和经度,它将通过get请求准确地返回true或false。

关于水的例子: https://api.onwater.io/23.92323,-66.3

{
  lat: 23.92323,
  lon: -66.3,
  water: true
}

陆地上的例子: https://api.onwater.io/42.35,-71.1

{
  lat: 42.35,
  lon: -71.1,
  water: false
}

由于您使用的是JavaScript,以下是您可能使用的示例jQuery代码段:

function is_water_huh(lat, lon) {
  $.get( "https://api.onwater.io/api/v1/results/" + lat + "," + lon, function( data ) {
    return data['water'];
  });
}

alert(is_water_huh(23.92323, -66.3));