Google Maps Javascript API:TypeError:response.data [0] .geometry.location.lat不是函数

时间:2016-06-14 09:39:23

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

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

我按照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;
}

1 个答案:

答案 0 :(得分:0)

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

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

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

请查看此example和客户端geocoder service documentation