Google Maps Javascript API: TypeError: response.data[0].geometry.location.lat is not a function

Google Maps Javascript API: TypeError: response.data[0].geometry.location.lat is not a function

我成功地从 Google 地图 Javascript Api 中得到了答案,并尝试访问 google.maps.GeocoderResult 的值以从 GeocoderGeometry 中提取纬度和经度/ 经纬度

我按照 TSD 定义实现了 response.data[0].geometry.location.lat(),这导致在 Chrome 中调试时出现错误:

  TypeError: response.data[0].geometry.location.lat is not a function

查看调试器中的对象,有效地表明不支持任何方法 lat() 或 lng()。

我可以访问 response.data[0].geometry.location.lat 以在调试器中成功获取值,但是我的代码不再符合 Typescript。

我当然可以投出结果,但还是想了解原因。此外,也许有人得到了解决方案的解释和建议?

此致

作为记录,打字稿定义:

https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0e139d5d4681b71d53a30408efcc64b79eed6354/googlemaps/google.maps.d.ts

更新 chrome 调试信息:

response.data[0].geometry.location.lat() => <not available>
response.data[0].geometry.location.lat: 47.37793800000001

response.data[0].geometry.location: Object
  lat: 47.37793800000001
  lng: 8.5401898

 response.data[0].geometry: Object
    location:Object
      lat:47.377
      lng: 8.5401898

错误的堆栈跟踪:

TypeError: response.data[0].geometry.location.lat is not a function
at interestsParamsCtrl.js:61
at processQueue (ionic.bundle.js:29127)
at ionic.bundle.js:29143
at Scope.$eval (ionic.bundle.js:30395)
at Scope.$digest (ionic.bundle.js:30211)
at Scope.$apply (ionic.bundle.js:30503)
at done (ionic.bundle.js:24824)
at completeRequest (ionic.bundle.js:25022)
at XMLHttpRequest.requestLoaded (ionic.bundle.js:24963)

更新 2:查询 API 我执行 GET 并解析响应

search(searchLocationTerm:string):ng.IPromise<{}> {
  var deferred = this.$q.defer();

  this.$http.get(Resources.Constants.Default.GOOGLE.API.URL,
    {
      params: {
        address: searchLocationTerm,
        key: Resources.Constants.Default.GOOGLE.API.KEY
      }
    })
    .success((response:Communication.IGeocoder) => {
      deferred.resolve(response);
    }).error((response:Communication.IGeocoder) => {
      deferred.reject(response);
  });

  return deferred.promise;
};

IGeocoder 在哪里

export interface IGeocoder {
  results:google.maps.GeocoderResult[];
  status:google.maps.GeocoderStatus;
}

您正在通过 AJAX 发送 Web 服务请求。请注意,网络服务地理编码 API 的响应是文档中指定的 JSON 对象:

https://developers.google.com/maps/documentation/geocoding/intro?hl=en#GeocodingResponses

您应该使用客户端地理编码服务来获取符合 google.maps.d.ts

中定义的对象

看看这个example and client-side geocoder service documentation